我有一个目标文件,正在尝试反汇编它。当我使用时:
objdump -d example.o
我得到了文件格式为
elf64-x86-64
的代码程序集。
我正在尝试将其反汇编到 ARM 中,我该怎么做?
如果你想反汇编ARM代码,你最好有一个ARM工具链,这是我得到的:
http://bb.osmocom.org/trac/wiki/toolchain
有了这个之后,你就可以使用arm-elf-objdump来代替objdump了。 我使用的命令是
arm-elf-objdump -D -b binary -marm binaryfile.dat
如果你查看联机帮助页,你会发现“-b”后面跟着文件类型。抱歉,我不知道如何告诉 -b 您想要分析 .o 文件。 “-marm”会告诉CPU是ARM。
希望这可以帮助你。
在反汇编二进制文件之前,通过“file”检查文件类型,例如:
文件 dnslookup.o
dnslookup.o:ELF 32 位 LSB 可重定位、ARM、EABI5 版本 1 (SYSV)、 没有脱光
现在我们知道它是一个 ARM 对象或 ELF 文件。
要反汇编arm目标文件,请使用
arm-linux-gnueabi-objdump
。在 Ubuntu 中,“arm-linux-gnueabi-objdump”是 ARM 二进制文件的默认反汇编程序 - 无需编译。
要安装它,只需执行以下操作:
sudo apt-get install binutils-arm-linux-gnueabi
此软件包中还有其他二进制文件,可以为您进一步分析 ARM 二进制文件。
使用正确的目标编译
binutils
以获得知道如何反汇编ARM的binutils objdump二进制文件。
http://www.gnu.org/software/binutils/
例如./configure --enable-targets=all
。
选择您的目标,制作并使用新的
objdump
二进制文件,该二进制文件可识别您的目标。有关定位的更多信息,请参阅 binutils/README
文件。
objdump -D t3c # stock binary
objdump: t3c: File format not recognized
与
./../../binutils-2.22/binutils/objdump -D t3c # latest compiled from source with all targets
In archive t3c:
t3c:arm: file format mach-o-le
Disassembly of section .text:
00002d94 <start>:
2d94: e59d0000 ldr r0, [sp]
...
安装ELDK并使用arm-linux-objdump。您正在尝试使用仅识别 x86 的程序反汇编 ARM 指令。
我在 macOS (arm64) 上遇到了这个问题。由于某种原因,configure 已从 Xcode SDK 中找到了
objdump
,并且我没有进行交叉编译,因此 Xcode 也必须包含 Intel 二进制文件。
我所要做的就是
brew install binutils
– 问题解决了。
我使用的是 Debian 12。所以我安装了
arm-trusted-firmware-tools
,这是 Debian 的 arm
反汇编工具:
sudo apt install arm-trusted-firmware-tools
之后我使用与上面类似的命令(qiuhan1989),并将文件另存为.asm一个
arm-none-eabi-objdump -D -b binary -marm binary.elf > binary.elf.asm