19

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

objdump -d example.o

我得到一个文件格式为elf64-x86-64.

我想把它拆成ARM,我该怎么做呢?

4

4 回答 4

16

如果你想反汇编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。

希望这可以帮到你。

于 2013-01-29T01:01:15.790 回答
7

使用正确的目标编译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]
...
于 2012-04-17T06:11:40.350 回答
7

在反汇编二进制文件之前,通过“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 二进制文件。

于 2017-01-22T21:35:52.300 回答
4

安装ELDK并使用 arm-linux-objdump。您正在尝试使用仅知道 x86 的程序来反汇编 ARM 指令。

于 2010-10-06T15:05:34.253 回答