【发布时间】:2019-07-31 19:27:19
【问题描述】:
我可以使用以下命令反汇编原始二进制文件:
> aarch64-linux-gnu-objdump -m aarch64 -b binary -D file.bin
我可以用llvm-objdump 达到同样的效果吗?如何?可能是 LLVM 工具链中的任何其他工具?
【问题讨论】:
标签: llvm disassembly objdump
我可以使用以下命令反汇编原始二进制文件:
> aarch64-linux-gnu-objdump -m aarch64 -b binary -D file.bin
我可以用llvm-objdump 达到同样的效果吗?如何?可能是 LLVM 工具链中的任何其他工具?
【问题讨论】:
标签: llvm disassembly objdump
我发现仅使用 LLVM 工具执行此操作的最简单方法是首先将二进制文件 objcopy 转换为 ELF,然后将 objdump ELF。
llvm-objcopy -I binary -B aarch64 --rename-section=.data=.text,code file.bin file.elf
让我们逐个查看这个选项:
-I binary:指定输入是原始二进制格式,而不是 ELF 格式。-B aarch64 (LLVM 91):指定将二进制文件解释为 AArch64 机器码。--rename-section=.data=.text,code:指定从二进制文件复制时自动创建的名为.data 的部分应命名为.text 并标记为可执行代码。这允许使用-d 进行反汇编,以便以后工作。llvm-objdump -d file.elf
这是不言自明的(和你用 GNU objdump 编写的一样)。 -d 表示要反汇编所有代码段,唯一的代码段是我们在上一步中使用--rename-section 标记的代码段。
1此命令适用于 LLVM 9 及更低版本。 LLVM 10 删除了二进制特定的 -B 选项,转而使用 -O 选项指定输出目标,因此您可以改写为 -O elf64-littleaarch64。
【讨论】:
llvm-objdump时可以用--section .data指定要反汇编的部分,也就是说你可以去掉--rename-section=.data=.text,code。