Nm - Linux命令 - UNIX命令

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

列出歸檔成員中的符號時,請包括索引:哪些模塊包含哪些名稱的定義的映射(由arranlib存儲在歸檔中)。

-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 )查看特定計算機上的命令使用方式。