温馨提示×

如何反汇编arm linux程序

小樊
46
2026-10-24 00:45:59
栏目: 智能运维

反汇编 ARM Linux 程序通常用于分析二进制文件、调试、逆向工程或漏洞研究。下面从工具选择、基本流程和常见示例三个方面说明。


一、常用工具

1. objdump(最常用)

GNU binutils 自带,适合 ELF 文件。

arm-linux-gnueabihf-objdump -d program
  • -d:反汇编可执行代码段
  • -D:反汇编所有段
  • -S:源码+汇编(需带调试信息)

2. gdb(动态分析)

适合运行时反汇编。

gdb ./program
(gdb) disassemble main

或:

(gdb) layout asm

3. IDA Pro / Ghidra(高级逆向)

  • IDA Pro(商业)
  • Ghidra(NSA 开源,免费)

支持 ARM32 / ARM64,自动识别函数、控制流。

4. radare2 / rizin

命令行逆向框架。

r2 ./program
[0x00000000]> aaa
[0x00000000]> pdf @ main

5. llvm-objdump

如果你使用 LLVM 工具链:

llvm-objdump -d program

二、基本步骤(以 objdump 为例)

1. 确认架构

file program

示例输出:

ELF 32-bit LSB executable, ARM, EABI5

2. 静态反汇编

arm-linux-gnueabihf-objdump -d program > disasm.txt

如果是 aarch64:

aarch64-linux-gnu-objdump -d program

3. 查看符号和函数

arm-linux-gnueabihf-nm program

4. 带有调试信息

arm-linux-gnueabihf-objdump -S program

三、常见示例

示例 1:反汇编 main 函数

arm-linux-gnueabihf-objdump -d program | grep -A 30 "<main>:"

示例 2:反汇编指定地址

arm-linux-gnueabihf-objdump -d --start-address=0x8000 --stop-address=0x8100 program

示例 3:使用 GDB 动态反汇编

gdb ./program
(gdb) break main
(gdb) run
(gdb) disassemble

四、ARM 特有注意点

  • ARM / Thumb 模式

    • ARM:32 位指令
    • Thumb:16/32 位混合
    • 反汇编时要注意切换:
      objdump -d -M reg-names-std program
      
  • ARM64(AArch64)

    • 指令集不同,需用 aarch64 工具链
  • PIE / 地址随机化

    • 静态分析看到的是偏移地址
    • 运行时才是真实地址

五、推荐组合

  • 初学者:objdump + gdb
  • 逆向分析:Ghidra / IDA
  • 自动化:radare2 / rizin

如果你有具体目标(比如某个 ARM Linux 二进制、固件、Android so),可以告诉我,我可以给你更针对性的命令。

0 踩