Linux 在ARM体系结构中使用objdump:分解到ARM

Linux 在ARM体系结构中使用objdump:分解到ARM,linux,arm,disassembly,objdump,Linux,Arm,Disassembly,Objdump,我有一个对象文件,正在尝试反汇编它。当我使用: objdump -d example.o 我在代码中得到一个文件格式为elf64-x86-64的程序集 我正在尝试将其分解到ARM中,如何进行此操作?安装并使用ARM linux objdump。您试图使用一个只知道x86的程序来反汇编ARM指令。使用正确的目标编译binutils,以获得知道如何反汇编ARM的binutils objdump二进制文件 例如,/configure--enable targets=all 选择您的目标,制作并使用

我有一个对象文件,正在尝试反汇编它。当我使用:

objdump -d example.o
我在代码中得到一个文件格式为
elf64-x86-64
的程序集


我正在尝试将其分解到ARM中,如何进行此操作?

安装并使用ARM linux objdump。您试图使用一个只知道x86的程序来反汇编ARM指令。

使用正确的目标编译
binutils
,以获得知道如何反汇编ARM的binutils objdump二进制文件

例如,
/configure--enable targets=all

选择您的目标,制作并使用您的目标感知的新的
objdump
二进制文件。有关目标的更多信息,请参阅
binutils/README
文件

objdump -D t3c # stock binary
objdump: t3c: File format not recognized
vs

/。/../binutils-2.22/binutils/objdump-D t3c#从源代码和所有目标编译的最新版本
在t3c档案中:
t3c:arm:文件格式mach-o-le
第节的分解。正文:
00002d94:
2d94:e59d0000 ldr r0[sp]
...

如果你想反汇编ARM代码,你最好有一个ARM工具链,这就是我得到的:

完成此操作后,可以使用arm elf objdump而不是objdump。 我使用的命令是

arm-elf-objdump -D -b binary -marm binaryfile.dat
如果查看手册页,您会发现“-b”后跟文件类型。抱歉,我不知道如何告诉-b您要分析.o文件。“-marm”将告诉cpu是ARM


希望这能对您有所帮助。

您必须先使用
arm linux gnueabi gcc为arm交叉编译文件。您正在使用本机objdump。要反汇编arm对象文件,请使用

armlinux-gnueabi-objdump
。希望这有助于澄清,你是说你有一个x86_64可执行文件/对象文件,并希望将其作为ARM指令进行反汇编吗?是的,一位教授让我做一个项目,我想做的是反汇编对象文件,但我猜它是一个x86可执行文件。如果我使用arm linux objdump,我应该能够反汇编成arm。对于编译和反汇编,您需要使用arm交叉编译器工具链。现在您可以使用
sudo apt install gcc arm none eabi
安装它,并使用
gcc arm none eabi objdump-d-marm
反汇编arm二进制文件。在我的例子中(Ubuntu 18.04),
gcc-arm-none-eabi-objdump
不起作用,但
arm-none-eabi-objdump
起作用。
arm-elf-objdump -D -b binary -marm binaryfile.dat