linux 在ARM架构中使用objdump:拆卸至ARM

70gysomp  于 2023-04-11  发布在  Linux
关注(0)|答案(5)|浏览(240)

我有一个目标文件,并试图反汇编它。当我用途:

objdump -d example.o

我得到一个文件格式为elf64-x86-64的程序集。
我正在尝试将其拆解到ARM中,我该如何进行?

piah890a

piah890a1#

如果你想反汇编ARM代码,你最好有一个ARM工具链,这是我得到的:
http://bb.osmocom.org/trac/wiki/toolchain
有了这个之后,可以使用arm-elf-objdump代替objdump

arm-elf-objdump -D -b binary -marm binaryfile.dat

如果你看manpage,你会发现“-B”后面跟着文件类型。对不起,我不知道如何告诉-b你想分析一个.o文件。“-marm”会告诉cpu是ARM。
希望这能帮到你。

rn0zuynd

rn0zuynd2#

使用正确的目标编译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]
...
c3frrgcw

c3frrgcw3#

在反汇编二进制文件之前,请通过“file”检查文件类型,例如:
文件dnslookup.o
dnslookup.o:ELF 32位LSB可重定位,ARM,EABI 5版本1(SYSV),未剥离
所以现在我们知道它是一个ARM对象或ELF文件。
使用arm-linux-gnueabi-objdump反汇编arm对象文件。在Ubuntu中,“arm-linux-gnueabi-objdump”是ARM二进制文件的默认反汇编程序-不需要编译。
要安装它,只需执行以下操作:
sudo apt-get install binutils-arm-linux-gnueabi
这个包中还有其他的二进制文件,可以进一步分析ARM二进制文件。

kt06eoxx

kt06eoxx4#

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

oipij1gg

oipij1gg5#

我在macOS(arm 64)上遇到了这个问题。出于某种原因,configure从Xcode SDK中找到了objdump,我没有交叉编译,所以Xcode必须也包含Intel二进制文件。
我所要做的就是brew install binutils-问题解决了。

相关问题