使用 objdump 进行 ARM 架构:反汇编到 ARM

问题描述 投票:0回答:6

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

objdump -d example.o

我得到了文件格式为

elf64-x86-64
的代码程序集。

我正在尝试将其反汇编到 ARM 中,我该怎么做?

linux arm disassembly objdump
6个回答
20
投票

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

希望这可以帮助你。


8
投票

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


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]
...

4
投票

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


0
投票

我在 macOS (arm64) 上遇到了这个问题。由于某种原因,configure 已从 Xcode SDK 中找到了

objdump
,并且我没有进行交叉编译,因此 Xcode 也必须包含 Intel 二进制文件。

我所要做的就是

brew install binutils
– 问题解决了。


0
投票

我使用的是 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
© www.soinside.com 2019 - 2024. All rights reserved.