llvm-objdump - LLVM 的物件檔案傾印器¶
概要¶
llvm-objdump [命令] [選項] [檔案名稱…]
描述¶
llvm-objdump 工具程式會印出命令列上指定的物件檔案和最終連結映像檔的內容。如果沒有指定檔案名稱,llvm-objdump 會嘗試從 a.out 讀取。如果 - 作為檔案名稱使用,llvm-objdump 將會處理標準輸入串流上的檔案。
命令¶
至少需要下列命令之一,並且某些命令可以與其他命令組合使用
- -a, --archive-headers¶
顯示封存檔標頭中包含的資訊。
- -d, --disassemble¶
反組譯輸入檔案中找到的所有可執行區段。在某些架構(AArch64、PowerPC、x86)上,預設會反組譯所有已知的指令。在其他架構上,需要
--mcpu
或--mattr
來啟用某些指令集。停用的指令會顯示為<unknown>
。
- -D, --disassemble-all¶
反組譯輸入檔案中找到的所有區段。
- --disassemble-symbols=<symbol1[,symbol2,...]>¶
僅反組譯指定的符號。當指定
--demangle
時,會採用還原修飾的符號名稱,否則採用修飾過的符號名稱。暗示--disassemble
。
- --dwarf=<value>¶
傾印指定的 DWARF 偵錯區段。支援的值為
frames - .debug_frame
- -f, --file-headers¶
顯示整體檔案標頭的內容。
- --fault-map-section¶
顯示錯誤映射區段的內容。
- -h, --headers, --section-headers¶
顯示每個區段標頭的摘要。
- --help¶
顯示使用資訊並結束。不與其他命令堆疊。
- -p, --private-headers¶
顯示特定格式的檔案標頭。
- -r, --reloc¶
顯示檔案中的重定位條目。
- -R, --dynamic-reloc¶
顯示檔案中的動態重定位條目。
- --raw-clang-ast¶
傾印 clang AST 區段的原始二進位內容。
- -s, --full-contents¶
顯示每個區段的內容。
- -t, --syms¶
顯示符號表。
- -T, --dynamic-syms¶
顯示動態符號表的內容。
- -u, --unwind-info¶
顯示輸入的 unwind 資訊。
此操作目前僅支援 COFF 和 Mach-O 物件檔案。
- -v, --version¶
顯示 llvm-objdump 可執行檔的版本。不與其他命令堆疊。
- -x, --all-headers¶
顯示所有可用的標頭資訊。相當於指定
--archive-headers
、--file-headers
、--private-headers
、--reloc
、--section-headers
和--syms
。
選項¶
llvm-objdump 支援下列選項
- --adjust-vma=<offset>¶
將反組譯或區段標頭列印中顯示的位址增加指定的偏移量。
- --build-id=<string>¶
使用給定的建置 ID 查找物件,以十六進位字串指定。找到的物件會被視為輸入檔案名稱處理。
- -C, --demangle¶
在輸出中還原修飾符號名稱。
- --debug-file-directory <path>¶
提供具有 .build-id 子目錄的目錄路徑,以搜尋已剝離二進位檔的偵錯資訊。將依給定的順序搜尋此引數的多個實例。
- --debuginfod, --no-debuginfod¶
是否嘗試使用 debuginfod 查找偵錯二進位檔。除非另有指定,否則僅當編譯了 libcurl (
LLVM_ENABLE_CURL
) 且環境變數DEBUGINFOD_URLS
提供了至少一個伺服器 URL 時,才會啟用 debuginfod。
- --debug-vars=<format>¶
在反組譯旁邊印出原始碼層級變數的位置(在暫存器或記憶體中)。
format
可以是unicode
或ascii
,如果省略則預設為unicode
。
- --debug-vars-indent=<width>¶
相對於反組譯的開頭,縮排原始碼層級變數顯示的距離。預設為 52 個字元。
- -j, --section=<section1[,section2,...]>¶
僅對指定的區段執行命令。對於 Mach-O,請使用 segment,section 來指定區段名稱。
- -l, --line-numbers¶
反組譯時,顯示原始碼行號。暗示
--disassemble
。
- -M, --disassembler-options=<opt1[,opt2,...]>¶
傳遞目標特定的反組譯器選項。可用選項
reg-names-std
:僅限 ARM(預設)。以 ARM 的指令集文件中列印,其中 r13/r14/r15 替換為 sp/lr/pc。reg-names-raw
:僅限 ARM。使用 r 後面跟著暫存器編號。no-aliases
:僅限 AArch64 和 RISC-V。印出原始指令助憶符號,而不是虛擬指令助憶符號。numeric
:僅限 RISC-V。印出原始暫存器名稱,而不是 ABI 助憶符號。(例如,印出 x1 而不是 ra)att
:僅限 x86(預設)。以 AT&T 語法印出。intel
:僅限 x86。以 Intel 語法印出。
- --disassembler-color=<mode>¶
啟用或停用反組譯器色彩輸出。
off
:停用反組譯器色彩輸出。on
:啟用反組譯器色彩輸出。terminal
:如果終端機支援,則啟用反組譯器色彩輸出(預設)。
- --mcpu=<cpu-name>¶
針對反組譯指定特定的 CPU 類型。指定
--mcpu=help
以顯示可用的 CPU。
- --mattr=<a1,+a2,-a3,...>¶
啟用/停用目標特定的屬性。指定
--mattr=help
以顯示可用的屬性。
- -mllvm <arg>¶
指定要轉發到 LLVM CommandLine 程式庫的引數。
- --no-leading-addr, --no-addresses¶
反組譯時,不要印出指令或內嵌重定位的前導位址。
- --no-print-imm-hex¶
在反組譯輸出中,不要對立即值使用十六進位格式。
- --no-show-raw-insn¶
反組譯時,不要印出每個指令的原始位元組。
- --offloading¶
顯示 LLVM offloading 區段的內容。
- --print-imm-hex¶
在反組譯輸出中印出立即值時使用十六進位格式(預設)。
- -S, --source¶
反組譯時,顯示與反組譯交錯的原始碼。暗示
--disassemble
。
- --show-all-symbols¶
在反組譯期間顯示所有符號,即使在相同位置定義了多個符號。
- --show-lma¶
傾印 ELF 區段標頭時,顯示 LMA 欄位。除非任何區段具有不同的 VMA 和 LMA,否則預設為關閉。
- --start-address=<address>¶
反組譯時,僅從指定的位址開始反組譯。
列印重定位時,僅列印從至少
address
的偏移量修補的重定位。列印符號時,僅列印值至少為
address
的符號。
- --stop-address=<address>¶
反組譯時,僅反組譯到指定的位址但不包含該位址。
列印重定位時,僅列印修補偏移量到
address
的重定位。列印符號時,僅列印值到
address
的符號。
- --symbolize-operands¶
反組譯時,將分支目標運算元符號化,以印出標籤而不是實際位址。
當印出 PC 相對全域符號參考時,將其印為與前導符號的偏移量。
當 bb-address-map 區段存在時(即,物件檔案是使用
-fbasic-block-address-map
建置的),標籤會從該區段擷取。如果 pgo-analysis-map 與 bb-address-map 一起存在,則任何可用的分析都會在相關的區塊標籤後印出。預設情況下,任何具有特殊表示法的分析(即 BlockFrequency、BranchProbability 等)都會印為原始十六進位值。僅適用於 PowerPC 物件或 X86 連結映像檔。
- 範例
非符號化的分支指令,具有本機目標和 PC 相對記憶體存取,例如
cmp eax, dword ptr [rip + 4112] jge 0x20117e <_start+0x25>
可能會變成
<L0>: cmp eax, dword ptr <g> jge <L0>
- --pretty-pgo-analysis-map¶
當搭配 bb-address-map 和 pgo-analysis-map 使用
--symbolize-operands
時,使用與其分析 Pass 相同的格式印出分析。美化格式的範例是印出相對於進入區塊的區塊頻率,與 BFI 相同。僅當啟用
--symbolize-operands
時才有效。
- --triple=<string>¶
要反組譯的目標三元組,請參閱
--version
以取得可用的目標。
- -w, --wide¶
為了與 GNU objdump 相容而被忽略。
- --x86-asm-syntax=<style>¶
已棄用。當與
--disassemble
一起使用時,選擇從 X86 後端發出的程式碼樣式。支援的值為預設的反組譯樣式為 att。
- -z, --disassemble-zeroes¶
反組譯時,不要跳過零區塊。
- @<FILE>¶
從回應檔案 <FILE> 讀取命令列選項和命令。
僅限 MACH-O 選項與命令¶
- --arch=<architecture>¶
指定要反組譯的架構。請參閱
--version
以取得可用的架構。
- --archive-member-offsets¶
印出 Mach-O 封存檔中每個封存成員的偏移量(需要
--archive-headers
)。
- --bind¶
顯示綁定資訊
- --data-in-code¶
顯示程式碼資料表中的資料。
- --dis-symname=<name>¶
僅反組譯指定符號的指令。
- --chained-fixups¶
印出鏈式修復資訊。
- --dyld-info¶
印出 dyld 用於解析最終連結二進位檔中外部參考的綁定和重新定基資訊。
- --dylibs-used¶
顯示連結檔案使用的共享程式庫。
- --dsym=<string>¶
使用 .dSYM 檔案進行偵錯資訊。
- --dylib-id¶
顯示 dylib 檔案的共享程式庫 ID。
- --exports-trie¶
顯示匯出的符號。
- --function-starts [=<addrs|names|both>]¶
印出 Mach-O 物件的函式啟動表。使用
addrs
(預設) 僅印出函式的位址,使用names
僅印出函式的名稱(如果可用),或使用both
印出位址旁邊的名稱。
- -g¶
如果可用,則從偵錯資訊中印出行資訊。
- --full-leading-addr¶
反組譯時印出完整的前導位址。
- --indirect-symbols¶
顯示間接符號表。
- --info-plist¶
以字串形式顯示 info plist 區段。
- --lazy-bind¶
顯示延遲綁定資訊。
- --link-opt-hints¶
顯示連結器最佳化提示。
- -m, --macho¶
使用 Mach-O 特定物件檔案剖析器。與
--macho
一起使用時,命令和其他選項的行為可能會有所不同。
- --no-leading-headers¶
不要印出任何前導標頭。
- --no-symbolic-operands¶
反組譯時不要印出符號運算元。
- --non-verbose¶
以非詳細或數字形式顯示 Mach-O 物件的資訊。
- --objc-meta-data¶
顯示 Objective-C 執行階段中繼資料。
- --private-header¶
僅顯示第一個特定格式的檔案標頭。
- --rebase¶
顯示重新定基資訊。
- --rpaths¶
顯示二進位檔的執行階段搜尋路徑。
- --universal-headers¶
顯示通用標頭。
- --weak-bind¶
顯示弱綁定資訊。
僅限 XCOFF 選項與命令¶
- --symbol-description¶
將符號描述新增至反組譯輸出。
- --traceback-table¶
解碼反組譯輸出中的回溯表。暗示
--disassemble
。
錯誤¶
若要回報錯誤,請造訪 <https://github.com/llvm/llvm-project/labels/tools:llvm-objdump/>。