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(指定为十六进制字符串)查找对象。找到的对象将像输入文件名一样进行处理。
- -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-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¶
当与 bb-address-map 和 pgo-analysis-map 一起使用
--symbolize-operands
时,使用与其分析传递相同的格式打印分析。漂亮格式的一个示例是打印相对于入口块的块频率,与 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/>。