llvm-nm - 列出 LLVM bitcode 和物件檔案的符號表

概要

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

描述

llvm-nm 工具程式會列出 LLVM bitcode 檔案、物件檔案和封存檔中的符號名稱。每個符號都會連同其來源的一些簡單資訊一起列出。如果未指定檔案名稱,則會使用 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 bitcode 檔案通常包含在連結到可執行映像檔或動態編譯「即時」之前,不被認為具有地址的物件,因此 llvm-nm 不會為 LLVM bitcode 檔案中的任何符號列印地址,即使是 bitcode 檔案中定義的符號也是如此。

選項

-B

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

-X

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

32

僅處理 32 位元物件檔案。

64

僅處理 64 位元物件檔案。

32_64

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

any

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

在 AIX OS 上,預設為僅處理 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 可以是 sysvposixdarwinbsdjust-symbols。預設值為 bsd

--help, -h

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

-j

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

--line-numbers, -l

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

-m

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

--no-demangle

不要解構符號名稱。這是預設值。

--no-llvm-bc

停用 LLVM bitcode 讀取器。

--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)