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>

将反汇编或节头打印中显示的地址增加指定的偏移量。

--arch-name=<string>

反汇编时指定目标架构。使用 --version 获取可用目标的列表。

--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 可以是 unicodeascii,如果省略则默认为 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 卸载节的内容。

--prefix=<prefix>

当使用 --source 选项进行反汇编时,将 prefix 前置到绝对路径。

--prefix-strip=<level>

当使用 --source 选项进行反汇编时,从绝对路径中剥离 level 个初始目录。此选项在没有 --prefix 的情况下无效。

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

AT&T 风格的汇编

intel

Intel 风格的汇编

默认的反汇编风格为 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

显示延迟绑定信息。

显示链接器优化提示。

-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/>。

参见

llvm-nm(1), llvm-otool(1), llvm-readelf(1), llvm-readobj(1)