要高效反汇编 Linux 下的程序,关键在于选对工具 + 理解文件格式 + 结合上下文。下面按“实战流程”给你一个系统性的方案,从入门到进阶,适合 ELF 可执行文件 / 共享库 / 内核模块。
| 目标 | 建议方式 |
|---|---|
| 用户态 ELF(可执行 / so) | objdump / radare2 / Ghidra |
| 内核 / 驱动 | objdump + vmlinux |
| 运行时分析 | GDB + 反汇编 |
| 恶意样本 / 复杂逻辑 | Ghidra / IDA |
| 脚本化 / 自动化 | pyelftools + capstone |
objdump -d ./a.out
objdump -S ./a.out
objdump -d ./a.out | grep -A 30 "<main>"
objdump -M intel -d ./a.out
-M intel用 Intel 语法,比 AT&T 更直观
适合:
gdb ./a.out
(gdb) disassemble main
disassemble
disassemble <func>
disassemble 0x401000, 0x401100
info registers
✅ 优点:能看到真实执行路径
❌ 缺点:需要运行环境
适合:
r2 ./a.out
aaa # 自动分析
s main # 跳到 main
pdf # 打印函数反汇编
pdf # 反汇编函数
pd 20 # 反汇编 20 条指令
afl # 列出函数
✅ 高效、可脚本化
❌ 学习曲线略陡
适合:
✅ 效率最高
✅ 免费
✅ 支持 ARM / x86 / MIPS
反汇编不是只看指令,而是理解结构:
readelf -h ./a.out # ELF 头
readelf -S ./a.out # 段表
readelf -s ./a.out # 符号表
重点看:
.text(代码).plt / .got(动态链接).init / .fininm ./a.out
objdump -d ./a.out | less
gcc -O0 -g -o a.out a.c
objdump -S a.out
from capstone import *
md = Cs(CS_ARCH_X86, CS_MODE_64)
for i in md.disasm(code, 0x1000):
print(f"{i.address:#x}:\t{i.mnemonic}\t{i.op_str}")
| 场景 | 推荐 |
|---|---|
| 快速看逻辑 | objdump -M intel -d |
| 调试 | GDB |
| 深度逆向 | Ghidra |
| 脚本分析 | radare2 + capstone |
main / syscall你可以直接贴:
我可以一步步带你做。