概述
nm 分析物件檔案中的符號表,並輸出每個符號的名稱、類型、位址等資訊。這對於診斷連結問題、檢查函式庫內容、分析程式碼優化等非常有用。
主要功能
- 輸出物件檔案的符號列表
- 識別符號類型(函數、變數、已定義、未定義等)
- 提供符號位址和大小資訊
- 支援 C++ 名稱解碼
主要選項
nm 指令提供多種選項來過濾符號列表和控制輸出格式。
符號過濾
輸出格式
生成的命令:
請試著組合命令。
這個 Django 應用程序是一個技術指南文檔,旨在為用戶輕鬆解釋 Linux 的各種命令。
`nm` 執行命令。
請將上述選項組合在一起,與 AI 一同虛擬執行命令。
使用範例
透過範例了解使用 nm 指令檢查物件檔案符號資訊的各種方法。
顯示基本符號列表
gcc -c main.c -o main.o
nm main.o
以基本格式輸出已編譯的可執行檔或物件檔案的所有符號。
僅顯示未定義的符號
nm -u main.o
僅輸出未連結的外部函數或變數等未定義的符號,這對於診斷連結問題非常有用。
C++ 符號解碼
g++ -c my_class.cpp -o my_class.o
nm -C my_class.o
將 C++ 物件檔案中複雜的符號名稱轉換成人類易讀的形式輸出。
顯示符號大小
nm -S main.o
與每個符號的位址一起,輸出該符號佔用的大小(位元組)。
提示與注意事項
有效利用 nm 指令的提示和注意事項。
符號類型字元
nm 輸出中每個符號旁邊顯示的字元表示符號的類型。大寫字母表示全域 (global) 符號,小寫字母表示區域 (local) 符號。
- A: 絕對符號 (Absolute)
- B/b: 未初始化資料段 (BSS)
- D/d: 已初始化資料段
- T/t: 文字 (程式碼) 段
- U: 未定義符號 (Undefined)
- W/w: 弱符號 (Weak)
除錯應用
nm 在診斷連結器錯誤或檢查特定函數或變數是否正確包含在函式庫中時非常有用。特別是 -u 選項,可以幫助找出未定義的引用並解決連結問題。