llvm-nm - 列出 LLVM 位元碼和物件檔案的符號表

語法

llvm-nm [選項] [檔名…]

說明

llvm-nm 工具會列出 LLVM 位元碼檔案、物件檔案和封存檔案中符號的名稱。每個符號都會列出,並附帶一些關於其來源的簡單資訊。如果沒有指定檔名,則使用 a.out 作為輸入。如果使用 - 作為檔名,llvm-nm 將從其標準輸入串流讀取檔案。

llvm-nm 的預設輸出格式是傳統的 BSD nm 輸出格式。每個此類輸出記錄都包含一個(可選的)8 位數十六進位地址,後跟一個類型代碼字元,後跟一個名稱,用於每個符號。每行列印一條記錄;欄位以空格分隔。當地址被省略時,它會被 8 個空格取代。

支援的類型代碼字元如下所示。如果同時列出大小寫字元表示相同的意思,則小寫字元表示局部符號,而大寫字元表示全域(外部)符號。

a, A

絕對符號。

b, B

未初始化數據(bss)物件。

C

通用符號。多個定義鏈接在一起成為一個定義。

d, D

可寫入數據物件。

i, I

COFF:.idata 符號或設定了 IMAGE_SCN_LNK_INFO 的區段中的符號。

n

ELF:來自非配置區段的局部符號。

COFF:除錯符號。

N

ELF:除錯區段符號,或來自非配置區段的全域符號。

s, S

COFF:區段符號。

Mach-O:絕對符號或來自 __TEXT_EXEC __text、__TEXT __text、__DATA __data 或 __DATA __bss 以外區段的符號。

r, R

唯讀數據物件。

t, T

程式碼(文字)物件。

u

ELF:GNU 唯一符號。

U

已命名的物件在此檔案中未定義。

v

ELF:未定義的弱物件。如果未定義物件,則不會發生鏈接錯誤。

V

ELF:已定義的弱物件符號。僅當鏈接中不存在常規定義時,才會使用此定義。如果存在多個弱定義且沒有常規定義,則將使用其中一個弱定義。

w

除 ELF 物件符號以外的未定義弱符號。如果未定義符號,則不會發生鏈接錯誤。

W

除 ELF 物件符號以外的已定義弱符號。僅當鏈接中不存在常規定義時,才會使用此定義。如果存在多個弱定義且沒有常規定義,則將使用其中一個弱定義。

-

Mach-O:N_STAB 符號。

?

無法辨識的內容。

由於 LLVM 位元碼檔案通常包含在被連結到可執行映像檔或動態編譯「 just-in-time 」之前不被視為具有位址的物件,因此 llvm-nm 不會列印 LLVM 位元碼檔案中任何符號的位址,即使是位元碼檔案中定義的符號也是如此。

選項

-B

使用 BSD 輸出格式。 --format=bsd 的別名。

-X

指定 llvm-nm 應檢查的 XCOFF 物件檔案、ELF 物件檔案或 IR 物件檔案輸入的類型,可以從命令列或封存檔案中指定。 模式必須是以下其中之一

32

僅處理 32 位元物件檔案。

64

僅處理 64 位元物件檔案。

32_64

同時處理 32 位元和 64 位元物件檔案。

any

處理所有支援的物件檔案。

在 AIX 作業系統上,預設值是僅處理 32 位元物件檔案並忽略 64 位元物件。 可以透過設定 OBJECT_MODE 環境變數來變更此設定。 例如,OBJECT_MODE=64 會導致 llvm-nm 處理 64 位元物件並忽略 32 位元物件。 -X 旗標會覆寫 OBJECT_MODE 變數。

在其他作業系統上,預設值是處理所有物件檔案:不支援 OBJECT_MODE 環境變數。

--debug-syms, -a

顯示所有符號,即使是通常會被隱藏的符號。

--defined-only, -U

僅列印在此檔案中定義的符號。

--demangle, -C

對符號名稱進行反組譯。

--dynamic, -D

顯示動態符號,而不是一般符號。

--export-symbols

列印已排序的符號及其可見性(如果適用),並移除重複的符號。

--extern-only, -g

僅列印定義為外部的符號;也就是說,可以從其他檔案存取的符號。

--format=<format>, -f

選擇輸出格式;*format* 可以是 *sysv*、*posix*、*darwin*、*bsd* 或 *just-symbols*。預設值為 *bsd*。

--help, -h

列印命令列選項及其含義的摘要。

-j

僅列印符號名稱。 –format=just-symbols` 的別名。

--line-numbers, -l

使用除錯資訊來列印定義符號的檔案名稱和行號。 未定義的符號會改為列印其第一個重定位的位置。

-m

使用 Darwin 格式。 --format=darwin 的別名。

--no-demangle

不要對符號名稱進行去混淆處理。這是預設值。

--no-llvm-bc

停用 LLVM 位元碼讀取器。

--no-sort, -p

按照遇到的順序列出符號。

--no-weak, -W

不要列印弱符號。

--numeric-sort, -n, -v

按地址對符號進行排序。

--portability, -P

使用 POSIX.2 輸出格式。 --format=posix 的別名。

--print-armap

除了符號之外,還要列印封存符號表。

--print-file-name, -A, -o

在每個符號前加上其來源檔案。

--print-size, -S

顯示符號大小以及地址(不適用於 Mach-O)。

--quiet

隱藏「無符號」診斷訊息。

--radix=<RADIX>, -t

指定符號地址的進制。可接受的值為 d(十進制)、x(十六進制)和 o(八進制)。

--reverse-sort, -r

以反向順序排序符號。

--size-sort

按大小排序符號。

--special-syms

不要從輸出中過濾特殊符號。

--undefined-only, -u

僅列印未定義的符號。

--version, -V

顯示 llvm-nm 可執行檔的版本,然後退出。不與其他命令堆疊。

@<FILE>

從回應檔案 <FILE> 讀取命令列選項。

MACH-O 特定選項

--add-dyldinfo

從 dyldinfo 中添加符號(如果它們尚未出現在符號表中)。這是預設值。

--add-inlinedinfo

從內嵌程式庫中添加符號,僅限 TBD 檔案輸入。

--arch=<arch1[,arch2,...]>

傾印來自指定架構的符號。

--dyldinfo-only

僅傾印來自 dyldinfo 的符號。

--no-dyldinfo

不要添加任何來自 dyldinfo 的符號。

-s <segment> <section>

僅傾印來自此區段和區段名稱的符號。

-x

以十六進制打印符號條目。

XCOFF 特定選項

--no-rsrc

從匯出符號列表中排除資源檔符號 (__rsrc)。

錯誤

  • llvm-nm 不支援 GNU nm 的完整參數集。

結束狀態

llvm-nm 結束時會返回零的結束代碼。

另請參閱

llvm-ar(1), llvm-objdump(1), llvm-readelf(1), llvm-readobj(1)