使用LLVM工具反汇编AArch64原始二进制文件

3
我可以使用以下命令来将原始二进制文件反汇编:
> aarch64-linux-gnu-objdump -m aarch64 -b binary -D file.bin

我可以使用llvm-objdump来实现相同的效果吗?还有LLVM工具链中的其他工具吗?
1个回答

4

使用LLVM工具进行此操作的最简单方法是首先将二进制文件objcopy为ELF格式,然后再objdump该ELF文件。

转换文件

llvm-objcopy -I binary -O elf64-littleaarch64 --rename-section=.data=.text,code file.bin file.elf

让我们逐个选项地进行:

  • -I binary:指定输入为原始二进制格式,而不是ELF格式。
  • -O elf64-littleaarch64(LLVM 10+1):指定将二进制文件解释为AArch64机器代码。
  • --rename-section=.data=.text,code:指定从二进制文件复制时自动创建的名为.data的节应该被命名为.text并标记为可执行代码。这允许稍后使用-d进行反汇编。

反汇编文件

llvm-objdump -d file.elf

这个很容易理解(和你使用GNU objdump时写的一样)。-d表示反汇编所有代码段,而唯一的代码段是我们在前一步中使用--rename-section标记的那个。

1该命令适用于LLVM 10及以上版本。LLVM 10已经移除了二进制特定的-B选项,而是使用-O选项指定输出目标。对于LLVM 9及以下版本,您需要使用-B aarch64


1
当运行 llvm-objdump 时,您可以使用 --section .data 指定要反汇编的部分,这意味着您可以省略 --rename-section=.data=.text,code - msbit
对于那些想要反汇编ARM Thumb代码的人,可以使用类似 --triple armv7m 的东西。 - ayke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接