nm用於顯示目標文件的符號,也是二進制工具集(info binutils)里的一員
先來看一個例子,源碼和對應的命令結果
四部分分別表示的意義
- 符號所在的obj文件名
- 符號的值,這里應該是指符號所在段的偏移地址。
- 符號類型
- 符號名
其中,'3'的符號類型有以下幾類,小寫表示局部,大寫表示全局
A |
符號的值不會在連接時發生改變,是固定的 |
b\B |
符號在未初始化數據段(BSS) |
C |
The symbol is common. Common symbols are uninitialized data. When linking, multiple common symbols may appear with the same name. If the symbol is defined anywhere, the common symbols are treated as undefined references. |
D\d |
符號在初始化的數據段里(.data) |
G\g |
符號在初始化的數據段里(small objects),個別的允許小數據的目標文件 |
N |
符號是調試符號 |
p |
符號在stack unwind段里 |
R\r |
符號在只讀數據段里 |
S\s |
符號在未初始化的數據段里(for small objects) |
T\t |
符號在代碼(text)段(code) |
U |
符號未定義 |
u |
符號是一個唯一的全局符號 |
命令概述
選項解釋
只介紹有用的
-a --debug-syms |
顯示所有的符號。 |
-D --dynamic |
顯示動態符號而不是通常的符號,通常用來顯示動態庫 |
-g --extern-only |
只顯示外部的(external)符號 |
-l --line-numbers |
用調試信息盡量找出符號對應的文件名和行數(有時候會不准確) |
-n -V --numeric-sort |
用地址排序符號而不是用名字的字母排序 |
-r --reverse-sort |
反轉排序序列 |
-S --print-size |
以bsd風格同時打印符號的地址和大小 |
-s --print-armap |
同時打印出索引(由ar或ranlib生成),可以知道符號是哪個模塊的。(用於庫文件) |
-t radix --radix=radix |
指定基地址數制, d 十進制 o 八進制 x 十六進制 |
-u --undefined-only |
只打印未定義的符號 |
--size-sort |
以符號的大小排序 |
本文由 劉英皓 創作,采用 知識共享 署名-非商業性使用-相同方式共享 3.0 中國大陸 許可協議進行許可。歡迎轉載,請注明出處:
轉載自:http://www.cnblogs.com/yinghao1991/p/6395566.html
參考
【1】 man nm