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 info。
此操作目前僅支援 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 查找物件,建置 ID 以十六進制字串指定。找到的物件會被視為輸入檔名。
- -C, --demangle¶
在輸出中對符號名稱進行demangle處理。
- --debug-file-directory <path>¶
提供包含 .build-id 子目錄的路徑,以搜尋已移除除錯資訊的二進制檔案的除錯資訊。會按照指定的順序搜尋此參數的多個執行個體。
- --debuginfod, --no-debuginfod¶
是否嘗試對偵錯二進位檔案進行 debuginfod 查找。除非有指定,只有在編譯 libcurl 時 (
LLVM_ENABLE_CURL
) 且環境變數DEBUGINFOD_URLS
提供至少一個伺服器網址的情況下,才會啟用 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 卸載區段的內容。
- --print-imm-hex¶
在反組譯輸出中列印立即值時,使用十六進位格式(預設)。
- -S, --source¶
反組譯時,顯示與反組譯程式碼交錯的原始碼。隱含
--disassemble
。
- --show-all-symbols¶
即使在同一個位置定義了多個符號,也要在反組譯期間顯示所有符號。
- --show-lma¶
傾印 ELF 區段標頭時顯示 LMA 欄位。預設為關閉,除非有任何區段的 VMA 和 LMA 不同。
- --start-address=<位址>¶
反組譯時,僅從指定的位址開始反組譯。
列印重定位時,僅列印修補至少從
位址
開始的偏移量的重定位。列印符號時,僅列印值至少為
位址
的符號。
- --stop-address=<位址>¶
反組譯時,僅反組譯到指定的位址,但不包括該位址。
列印重定位時,僅列印修補到
位址
的偏移量的重定位。列印符號時,僅列印值最大為
位址
的符號。
- --symbolize-operands¶
反組譯時,將分支目標運算元符號化,以列印標籤而不是實際位址。
列印與 PC 相關的全局符號參考時,將其列印為從前導符號開始的偏移量。
當存在 bb-address-map 區段時(即,使用
-fbasic-block-sections=labels
建置目標文件),將從該區段而不是其他區段檢索標籤。如果 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¶
將
--symbolize-operands
與 bb-address-map 和 pgo-analysis-map 一起使用時,使用與其分析遍歷相同的格式列印分析。漂亮格式的一個例子是以與 BFI 相同的方式列印相對於入口區塊的區塊頻率。僅在啟用
--symbolize-operands
時有效。
- --triple=<字串>¶
要反組譯的目標三元組,有關可用目標,請參見
--version
。
- -w, --wide¶
為了與 GNU objdump 相容,已忽略。
- --x86-asm-syntax=<樣式>¶
已淘汰。當與
--disassemble
一起使用時,從 X86 後端選擇要發出的程式碼樣式。支援的值為預設的組譯樣式為 att。
- -z, --disassemble-zeroes¶
組譯時不要跳過零區塊。
- @<FILE>¶
從回應檔案 <FILE> 讀取命令列選項和命令。
僅限 MACH-O 的選項和命令¶
- --arch=<架構>¶
指定要組譯的架構。請參閱
--version
以取得可用的架構。
- --archive-member-offsets¶
列印 Mach-O 封存中每個封存成員的偏移量(需要
--archive-headers
)。
- --bind¶
顯示繫結資訊
- --data-in-code¶
顯示程式碼表格中的資料。
- --dis-symname=<名稱>¶
僅組譯指定符號的指令。
- --chained-fixups¶
列印鏈式修正資訊。
- --dyld-info¶
列印 dyld 用於解析最終連結二進制檔案中外部參考的繫結和重定址資訊。
- --dylibs-used¶
顯示連結檔案使用的共享程式庫。
- --dsym=<字串>¶
使用 .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¶
以字串形式顯示資訊屬性列表區段。
- --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/>。