linux nm命令

功能

nm是names的簡稱,通過該指令可以列舉文件中的符號(一般是庫文件),因爲很多時候我們並不首要關注庫邏輯實現,只需要知道某些函數或變量的命名衝突等問題,這個時候就可以使用nm命令,當然,類似的命令還有其他的,這裏我只講nm。

Usage: nm [option(s)] [file(s)]
 List symbols in [file(s)] (a.out by default).
 The options are:
  -a, --debug-syms       只顯示調試信息
  -A, --print-file-name   在每行符號信息前,打印查詢的文件名
  -C, --demangle[=STYLE] 將低級別的符號名稱轉換爲用戶級別的名稱,意思是轉換爲用戶較容易理解的形式
  -D, --dynamic          顯示動態符號信息
  -f, --format=FORMAT    設置信息輸出格式. 它可以是`bsd',`sysv' 或者 `posix'. 默認爲 `bsd'
  -g, --extern-only      只顯示外部符號;封裝成動態庫時,需要被外部調用的函數必須是外部符號,否則無法使用
  -l, --line-numbers     顯示每個符號的文件名和行號
  -n, --numeric-sort     將符號按地址排序
  -r, --reverse-sort     反向排序
  -S, --print-size       顯示定義符號的大小
  -u, --undefined-only   僅顯示未定義符號
  -X 32_64               (ignored)

一般顯示格式

值(the symbol value)、類型(the symbol type)、名字(the symbol name) 

類型

nm 將找到的符號值使用十六進制缺省表示,並在函數前添加其類型,類型主要有:

描述
A 符號絕對,鏈接過程不允許被改變
B/b 非初始化符號,出現在bss段中
C 公有符號,鏈接時會被同名符號覆蓋
D/d 初始化符號
G/g 初始化符號,面向小數據訪問優化
I 其它符號的間接引用
N 調試符號
P 棧區符號(清空)
R/r 符號只讀
S/s 非初始化符號,面向小數據訪問優化
T/t 代碼區符號
U 未定義或在外部定義的符號
u 全局唯一,GNU保留符
V/v 弱定義符(詳見C++強弱符號定義)
W/w 弱符號,但是還沒有被弱對象定義
- stabs格式符號
? 無法識別的符號

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章