nm - 列出來自目標文件的符號
概要
nm [ -a | --debug-syms ] [ -g | - 僅限於外部 ]
[ -B ] [ -C | --demangle [= style ]] [ -D | - 動態 ]
[ -S | --print-size ] [ -s | --print-armap ]
[ -A | -o | --print-file-name ]
[ -n | -v | --numeric-sort ] [ -p | --no-sort ]
[ -r | --reverse-sort ] [ --size-sort ] [ -u | --undefined-only ]
[ -t radix | --radix = radix ] [ -P | - 便攜性 ]
[ --target = bfdname ] [ -f format | --format = 格式 ]
[ - 僅限定義 ] [ -l | --line-numbers ] [ --no-demangle ]
[ -V | --version ] [ -X 32_64 ] [ --help ] [ objfile ...]
描述
GNU nm列出了來自目標文件objfile ....的符號。如果沒有目標文件被列為參數, nm將假定文件a.out 。
對於每個符號, nm顯示:
*
符號值,以選項(請參閱下文)選定的基數,或默認情況下為十六進制。
*
符號類型。 至少使用以下類型; 其他的也取決於目標文件格式。 如果小寫,符號是本地的; 如果大寫,符號是全局的(外部的)。
一個
該符號的值是絕對的,並且不會通過進一步鏈接進行更改。
乙
該符號位於未初始化的數據部分(稱為BSS)中。
C
該符號很常見。 常用符號是未初始化的數據。 鏈接時,多個常用符號可能會以相同的名稱出現。 如果符號是在任何地方定義的,則通用符號將被視為未定義的引用。
d
該符號位於已初始化的數據部分。
G
該符號位於小型對象的初始化數據部分。 某些目標文件格式允許更有效地訪問小數據對象,例如全局int變量,而不是大型全局數組。
一世
該符號是對另一個符號的間接引用。 這是很少使用的a.out目標文件格式的GNU擴展。
ñ
該符號是一個調試符號。
[R
該符號位於只讀數據部分。
小號
該符號位於未初始化的數據部分中,用於小型對象。
Ť
該符號位於文本(代碼)部分。
ü
該符號未定義。
V
一個符號是一個弱對象。 當一個弱定義的符號與一個正常定義的符號鏈接時,正常定義的符號被使用而沒有錯誤。 當一個弱的未定義符號被鏈接並且該符號未被定義時,弱符號的值變為零而沒有錯誤。
w ^
該符號是一個弱符號,沒有被特別標記為弱對象符號。 當一個弱定義的符號與一個正常定義的符號鏈接時,正常定義的符號被使用而沒有錯誤。 當一個弱的未定義符號被鏈接並且該符號未被定義時,弱符號的值變為零而沒有錯誤。
-
該符號是a.out目標文件中的一個插入符號。 在這種情況下,打印的下一個值是其他字段的刺,刺stc desc字段和刺類型。 Stabs符號用於保存調試信息。
?
符號類型未知,或者特定的目標文件格式。
*
符號名稱。
OPTIONS
這裡顯示的作為替代方案的長期和短期形式是相同的。
-一個
-o
--print文件名稱
在每個符號前面加上找到它的輸入文件(或存檔成員)的名稱,而不是在所有符號之前標識一次輸入文件。
-一個
--debug-SYMS
顯示所有符號,即使只有調試器符號; 通常這些都沒有列出。
-B
與--format = bsd相同(為了兼容MIPS nm )。
-C
--demangle [= 樣式 ]
將低級符號名稱解碼( demangle )為用戶級名稱。 除了刪除由系統預設的任何初始下劃線外,這使得C ++函數名稱可讀。 不同的編譯器有不同的移動樣式。 可選的demangling樣式參數可用於為編譯器選擇合適的demangling樣式。
--no-還原函數
不要去掉低級別的符號名稱。 這是默認設置。
-D
- 動態
顯示動態符號而不是普通符號。 這只對動態對像有意義,比如某些類型的共享庫。
-f 格式
--format = 格式
使用輸出格式格式 ,可以是“bsd”,“sysv”或“posix”。 默認值是“bsd”。 只有格式的第一個字符是重要的; 它可以是大寫或小寫。
-G
--extern只
只顯示外部符號。
-l
--line號碼
對於每個符號,使用調試信息來嘗試查找文件名和行號。 對於定義的符號,查找符號地址的行號。 對於未定義的符號,請查找引用符號的重定位條目的行號。 如果可以找到行號信息,請在其他符號信息之後打印。
-n
-v
--numeric排序
按照地址對數字符號進行排序,而不是按名稱按字母順序排列。
-p
--no排序
不要打擾以任何順序排列符號; 按照遇到的順序打印它們。
-P
- 可移植性
使用POSIX.2標準輸出格式而不是默認格式。 相當於-f posix 。
-S
--print大小
打印“bsd”輸出格式的已定義符號的大小。
-s
--print-armap
列出歸檔成員中的符號時,請包括索引:哪些模塊包含哪些名稱的定義的映射(由ar或ranlib存儲在歸檔中)。
-r
--reverse排序
顛倒排序順序(無論是數字還是字母); 讓最後一個先到。
--size排序
按大小排序符號。 大小的計算方法是符號值與具有下一個較高值的符號值之間的差值。 符號的大小被打印出來,而不是數值。
-t 基數
--radix = radix
使用基數作為打印符號值的基數。 它必須是十進制的d ,八進制的o或十六進制的x 。
--target = bfdname
指定目標代碼格式,而不是系統的默認格式。
-u
--undefined只
僅顯示未定義的符號(每個對象文件的外部符號)。
--defined只
僅顯示每個對象文件的定義符號。
-V
- 版
顯示nm的版本號並退出。
-X
為了與AIX版本的nm兼容,此選項被忽略。 它需要一個參數,它必須是字符串32_64 。 AIX nm的默認模式對應於-X 32 ,GNU nm不支持該模式。
- 幫幫我
顯示nm選項的摘要並退出。
也可以看看
ar (1), objdump (1), ranlib (1)和binutils的Info條目。
重要提示:使用man命令( %man )查看特定計算機上的命令使用方式。