我可以使用以下命令来将原始二进制文件反汇编:
我可以使用
> aarch64-linux-gnu-objdump -m aarch64 -b binary -D file.bin
我可以使用
llvm-objdump
来实现相同的效果吗?还有LLVM工具链中的其他工具吗?> 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
objdump
时写的一样)。-d
表示反汇编所有代码段,而唯一的代码段是我们在前一步中使用--rename-section
标记的那个。
1该命令适用于LLVM 10及以上版本。LLVM 10已经移除了二进制特定的-B
选项,而是使用-O
选项指定输出目标。对于LLVM 9及以下版本,您需要使用-B aarch64
。
llvm-objdump
时,您可以使用--section .data
指定要反汇编的部分,这意味着您可以省略--rename-section=.data=.text,code
。 - msbit--triple armv7m
的东西。 - ayke