我有一个目标文件,正在尝试反汇编它。当我使用:
objdump -d example.o
我得到一个文件格式为elf64-x86-64
.
我想把它拆成ARM,我该怎么做呢?
我有一个目标文件,正在尝试反汇编它。当我使用:
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。
希望这可以帮到你。
使用正确的目标编译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]
...
在反汇编二进制文件之前,通过“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 二进制文件。
安装ELDK并使用 arm-linux-objdump。您正在尝试使用仅知道 x86 的程序来反汇编 ARM 指令。