温馨提示×

怎样反汇编arm架构程序

小樊
69
2026-10-09 08:55:16
栏目: 编程语言

反汇编(Disassembly)是把机器码还原成汇编指令的过程。对 ARM 架构程序,常用方法和工具如下:


一、常用反汇编工具

1. 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-objdump
  • aarch64-linux-gnu-objdump(64 位 ARM)

2. gdb(动态反汇编)

适合调试和运行时分析

gdb program
(gdb) set architecture arm
(gdb) disassemble main

或:

(gdb) x/10i $pc

3. IDA Pro(最强,图形化)

  • 支持 ARM / Thumb / AArch64
  • 可识别函数、控制流
  • 商业软件(有免费版)

4. Ghidra(NSA 开源)

  • 支持 ARM 反汇编 + 伪代码
  • 免费,功能强

5. radare2(命令行神器)

r2 program
[0x00000000]> aaa
[0x00000000]> pdf

6. ndisasm(不推荐用于 ARM)

⚠️ ndisasm 只支持 x86


二、ARM 常见架构模式

ARM 反汇编时要注意:

1. ARM 模式

  • 指令长度:32 位
  • 示例:
mov r0, #1
bl printf

2. Thumb 模式

  • 指令长度:16 / 32 位
  • 更省空间
  • 反汇编需指定:
objdump -d -m thumb program

3. AArch64(ARM64)

  • 64 位
  • 使用:
aarch64-linux-gnu-objdump -d program

三、裸机 / 固件反汇编(无 ELF)

如果是 bin / img:

arm-linux-gnueabi-objdump -b binary -m arm -D firmware.bin

或:

r2 -b 16 -a arm -m 0x8000 firmware.bin

四、典型分析流程(推荐)

  1. 判断架构(32/64、Thumb)
  2. file program
  3. objdump -d
  4. 用 Ghidra / IDA 看控制流
  5. 必要时 gdb 动态调试

如果你愿意,可以告诉我:

  • 是 Linux ARM 程序 / 安卓 / 嵌入式固件?
  • 32 位还是 64 位?
  • 有没有符号表?

我可以给你 更针对性的命令和示例。

0 踩