入门 Linux 反汇编,建议按 “汇编基础 → 程序运行原理 → 反汇编工具 → 实战练习” 的顺序来,不要一上来就硬啃大型程序。下面给你一条比较清晰、可执行的路线。
反汇编本质是“看编译器把 C 变成了什么”,所以你需要:
if / for / while 的底层逻辑✅ 推荐:
《C Primer Plus》或《C 程序设计语言(K&R)》
Linux 下主要是 x86-64 汇编(AT&T 语法)。
rax, rbx, rcx, rdx, rsp, rbp, rsi, rdimov, add, sub, cmp, jmp, call, ret
push, pop, lea
rdi, rsi, rdx, rcx, r8, r9rax✅ 推荐资料:
反汇编前要知道程序长什么样:
.text / .data / .bss / .rodata_start✅ 推荐:
readelfobjdump -hobjdump -d a.out
readelf -h a.out
readelf -S a.out
nm a.out
gdb ./a.out
(gdb) disas main
(gdb) info registers
(gdb) x/10x $rsp
✅ 必会 GDB 命令:
breakrunstepi / nextidisasinfo registers| 工具 | 用途 |
|---|---|
| radare2 / r2 | 专业逆向 |
| Ghidra | 反编译 + 反汇编 |
| IDA Pro | 商业级(贵) |
| strace / ltrace | 系统调用分析 |
int add(int a, int b) {
return a + b;
}
gcc -O0 -S test.c
对比:
-O0-O2gcc -no-pie -fno-stack-protector test.c -o test
objdump -d test
只看 main 和关键函数。
call / ret适合入门的:
if 判断推荐平台:
❌ 一上来就学 IDA
❌ 不懂汇编直接看反编译
❌ 只看不动手调试
❌ 忽略栈和函数调用约定
你可以直接告诉我:
我可以给你: