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¶
显示输入文件的展开信息。
此操作目前仅支持 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¶
在输出中解构符号名称。
- --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 卸载节的内容。
- --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¶
当将
--symbolize-operands
与 bb-address-map 和 pgo-analysis-map 一起使用时,使用与其分析传递相同的格式打印分析。漂亮格式的一个示例是将块频率打印为相对于入口块的频率,与 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/>。