反汇编(Disassembly)是把机器码还原成汇编指令的过程。对 ARM 架构程序,常用方法和工具如下:
objdump(最常用,GNU 工具链)适合 ELF 格式(Linux / 嵌入式)
# 反汇编整个文件
arm-linux-gnueabi-objdump -d program
# 指定架构(如 ARMv7 / Thumb)
arm-linux-gnueabi-objdump -d -m arm program
arm-linux-gnueabi-objdump -d -m thumb program
# 反汇编并显示源码
arm-linux-gnueabi-objdump -d -S program
交叉编译工具链示例:
arm-linux-gnueabi-objdumpaarch64-linux-gnu-objdump(64 位 ARM)gdb(动态反汇编)适合调试和运行时分析
gdb program
(gdb) set architecture arm
(gdb) disassemble main
或:
(gdb) x/10i $pc
IDA Pro(最强,图形化)Ghidra(NSA 开源)radare2(命令行神器)r2 program
[0x00000000]> aaa
[0x00000000]> pdf
ndisasm(不推荐用于 ARM)⚠️ ndisasm 只支持 x86
ARM 反汇编时要注意:
mov r0, #1
bl printf
objdump -d -m thumb program
aarch64-linux-gnu-objdump -d program
如果是 bin / img:
arm-linux-gnueabi-objdump -b binary -m arm -D firmware.bin
或:
r2 -b 16 -a arm -m 0x8000 firmware.bin
file programobjdump -d如果你愿意,可以告诉我:
我可以给你 更针对性的命令和示例。