在 Linux 下进行反汇编(disassembly)通常用于逆向工程、漏洞分析、调试或学习程序运行机制。下面我从工具选择、实用技巧、常见场景和注意事项四个方面系统讲一下。
objdump(最基础、必备)适合查看 ELF 文件汇编代码。
objdump -d ./a.out
常用参数:
-M intel # 使用 Intel 语法(默认 AT&T)
-s # 显示数据段
-S # 源码+汇编(需 -g 编译)
-j .text # 只看代码段
示例:
objdump -M intel -S ./a.out
gdb(动态反汇编 + 调试)适合运行时分析。
gdb ./a.out
常用命令:
disas main
disas 0x401234
info registers
x/10i $rip
stepi
技巧:
layout asm:汇编视图set disassembly-flavor intel:切换语法radare2(r2,专业逆向)功能极强,适合完整逆向分析。
r2 ./a.out
常用命令:
aaa # 自动分析
s main # 跳到 main
pdf # 打印函数汇编
pd 20 # 反汇编 20 条
进阶:
V # 可视化模式
VV # 流程图
IDA Pro / Ghidra(图形化)适合:
capstone / pyelftools适合自己写脚本分析 ELF。
file ./a.out
常见:
x86-64ARMMIPS不同架构指令集完全不同。
mov %rax, %rbxmov rbx, rax推荐:
objdump -M intel
反汇编时重点看:
callretjmp / je / jne帮助理解程序逻辑。
nm ./a.out
readelf -s ./a.out
若去除了符号表(strip):
strip ./a.out
反汇编会变得困难,需要靠:
strings ./a.out
常用于:
很多混淆代码:
配合:
gdbstraceltracegdb ./a.out
disas main
技巧:
syscallmmap / mprotect关注:
retrsp / rbp⚠️ 合法性
⚠️ 反汇编 ≠ 反编译
objdump + gdbradare2如果你愿意,我可以:
你现在是偏向哪一类使用场景?