使用 objdump 进行 ARM 架构:反汇编到 ARM
我有一个目标文件,正在尝试反汇编它。当我使用时:
objdump -d example.o
我得到了文件格式为 elf64-x86-64
的代码程序集。
我正在尝试将其反汇编到 ARM 中,我该怎么做?
I have an object file and am trying to disassemble it. When I use:
objdump -d example.o
I get an assembly in code in the file format of elf64-x86-64
.
I am trying to disassemble this into ARM, how do I go about doing this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
如果你想反汇编ARM代码,你最好有一个ARM工具链,这就是我得到的:
http://bb.osmocom.org/trac/wiki/toolchain
有了这个之后,您可以使用arm-elf-objdump代替objdump。
我使用的命令是
如果你查看联机帮助页,你会发现“-b”后面跟着文件类型。抱歉,我不知道如何告诉 -b 您想要分析 .o 文件。 “-marm”会告诉CPU是ARM。
希望这可以帮助你。
If you want to do disassemble of ARM code, you'd better have an ARM tool chain, this is what I got:
http://bb.osmocom.org/trac/wiki/toolchain
After you have this, you can use arm-elf-objdump instead of objdump.
The command I used is
If you look the manpage, you will find "-b" is followed by the file type. Sorry I don't know how to tell -b you want to analyze a .o file. "-marm" will tell the cpu is ARM.
Hope this can help you.
在反汇编二进制文件之前,请通过“file”检查文件类型,例如:
所以现在我们知道它是一个ARM对象或ELF文件。
要反汇编arm目标文件,请使用
arm-linux-gnueabi-objdump
。在 Ubuntu 中,“arm-linux-gnueabi-objdump”是 ARM 二进制文件的默认反汇编程序 - 不需要编译。要安装它,只需执行:
sudo apt-get install binutils-arm-linux-gnueabi
此软件包中还有其他二进制文件,可以为您进一步分析 ARM 二进制文件。
Before disassembling the binary, check the filetype via "file", for example:
So now we know it is an ARM object or ELF file.
To disassemble arm object file use
arm-linux-gnueabi-objdump
. In Ubuntu, "arm-linux-gnueabi-objdump" is the default disassembler for ARM binaries - no compilation is needed.To install it, just do:
sudo apt-get install binutils-arm-linux-gnueabi
There are also other binaries inside this package that can further analyze the ARM binaries for you.
使用正确的目标编译 binutils 以获得知道如何反汇编 ARM 的 binutils objdump 二进制文件。
http://www.gnu.org/software/binutils/
./configure --enable-targets=all
例如。选择您的目标,制作并使用新的 objdump 二进制文件,该二进制文件可识别您的目标。有关定位的更多信息,请参阅
binutils/README
文件。与
Compile
binutils
with the right target(s) to get binutils objdump binary that knows how to disassemble ARM.http://www.gnu.org/software/binutils/
./configure --enable-targets=all
for example.Pick your targets, make and use the new
objdump
binary that is your-target-aware. See thebinutils/README
file for more information on targeting.vs.
安装ELDK并使用arm-linux-objdump。您正在尝试使用仅识别 x86 的程序反汇编 ARM 指令。
Install the ELDK and use arm-linux-objdump. You're trying to disassemble ARM instructions using a program that only knows x86.
我在 macOS (arm64) 上遇到了这个问题。由于某种原因,configure 已从 Xcode SDK 中找到了 objdump,并且我没有进行交叉编译,因此 Xcode 也必须包含 Intel 二进制文件。
我所要做的就是
brew install binutils
——问题就解决了。I had this issue on macOS (arm64). For some reason, configure had located
objdump
from the Xcode SDK, and I'm not cross-compiling, so Xcode must contain the Intel binaries as well.All I had to do was
brew install binutils
– problem solved.我使用的是 Debian 12。所以我安装了
arm-trusted-firmware-tools
这是 Debian 的arm
反汇编工具:之后我使用与上面类似的命令(qiuhan1989),并且将文件另存为 .asm 文件
I am using Debian 12. So I install
arm-trusted-firmware-tools
which is Debian'sarm
disassembly tool:After that I use similar command as above (qiuhan1989), and save the file as .asm one