学习 Linux 反汇编是一个循序渐进、偏实战的过程,核心是把 汇编 + 程序运行原理 + 工具链 打通。下面给你一条比较系统、可落地的学习路线,并附上推荐资源和常见坑。
一、前置知识(非常重要)
1️⃣ Linux 基础
必须会的基本操作:
- 文件、进程、权限
gcc / g++ / make
objdump / file / strings / ldd
- 调试符号、ELF 文件概念
✅ 推荐:
- 《Linux 命令行与 Shell 脚本编程大全》
- 或熟悉 Ubuntu / Debian 日常使用
2️⃣ C 语言(重点)
反汇编本质是“看懂编译器干了什么”。
必须掌握:
- 指针、数组、结构体
- 函数调用
- 栈和内存布局
main 的参数(argc/argv)
✅ 推荐:
- 《C Primer Plus》
- 或《C 程序设计语言(K&R)》
二、汇编语言(核心)
1️⃣ x86 / x86-64 汇编(Linux 主流)
重点不是“写汇编”,而是能读懂反汇编代码。
必学内容
- 寄存器:
RAX, RBX, RCX, RDX, RSP, RBP, RIP
- 指令:
mov, add, sub, cmp, jmp, call, ret
push / pop
- 寻址方式
- 函数调用约定(System V AMD64 ABI)
- 参数传递:RDI, RSI, RDX, RCX, R8, R9
- 返回值:RAX
✅ 推荐资源:
- 《汇编语言(王爽)》(入门思路好,但偏 x86-16)
- 《Professional Assembly Language》
- 在线:
- https://godbolt.org(看 C → 汇编)
三、ELF 与程序运行原理
1️⃣ ELF 文件结构
理解反汇编“从哪来”。
重点:
.text(代码)
.data / .bss
.rodata
.symtab / .strtab
- 入口点
_start vs main
✅ 工具:
readelf -h a.out
readelf -S a.out
objdump -d a.out
2️⃣ 程序的内存布局
理解:
四、反汇编工具链(实战核心)
1️⃣ 静态分析工具
| 工具 |
用途 |
| objdump |
基础反汇编 |
| readelf |
ELF 分析 |
| nm |
符号表 |
| strings |
字符串 |
| file |
文件类型 |
示例:
objdump -M intel -d a.out
2️⃣ 动态调试(非常重要)
GDB(必学)
- 断点:
break
- 单步:
si / ni
- 查看汇编:
disas
- 查看寄存器:
info registers
- 查看内存:
x
✅ 推荐:
- 《Debugging with GDB》
- 实战:调试自己写的 C 程序
3️⃣ 进阶工具
- Radare2 / Cutter(逆向神器)
- IDA Pro(Linux 版)
- Ghidra(免费、强)
建议顺序:
GDB → objdump → radare2 → Ghidra
五、学习路径(推荐顺序)
✅ 第一阶段(1–2 个月)
- 会 Linux 基本操作
- 会 C 语言
- 能读懂简单 x86-64 汇编
- 会用
objdump + gdb 分析 Hello World
目标:
能看懂 main → printf 的汇编流程
✅ 第二阶段(2–3 个月)
- ELF 文件结构
- 函数调用栈
- 参数传递
- if / for / switch 的汇编形式
目标:
能从反汇编还原 C 逻辑
✅ 第三阶段(进阶)
- 逆向 crackme
- 分析真实程序
- 简单漏洞(栈溢出、ROP)
- 去混淆、反编译对抗
六、推荐书籍(精选)
汇编 & 逆向
- 《逆向工程核心原理》(强烈推荐)
- 《Practical Reverse Engineering》
- 《The Art of Assembly Language》
安全 & 底层
- 《深入理解计算机系统(CSAPP)》(必读)
- 《Linux 二进制分析》
七、常见误区 ❌
- ❌ 死背汇编指令(没用)
- ❌ 一上来就逆向大型程序
- ❌ 忽略 C 语言
- ❌ 只看不动手
✅ 正确方式:
写 C → 编译 → 反汇编 → 对照理解
八、你可以这样开始(今晚就能做)
- 写一个 C 程序:
int add(int a, int b) {
return a + b;
}
- 编译:
gcc -O0 -g -fno-stack-protector main.c -o main
- 反汇编:
objdump -M intel -d main
- 用 gdb 单步执行
如果你愿意,我可以:
- ✅ 给你 定制 30 天学习计划
- ✅ 带你 逐行分析一段反汇编代码
- ✅ 按 安全 / 逆向 / 内核 / 嵌入式 方向细化
你学 Linux 反汇编,是为了 逆向、安全、内核,还是兴趣?