我可以使用以下命令反汇编原始二进制文件:
> aarch64-linux-gnu-objdump -m aarch64 -b binary -D file.bin
我可以用
llvm-objdump
达到同样的效果吗?怎么做?也许 LLVM 工具链中的任何其他工具?
我发现只使用 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
.