要“快速掌握反汇编指令”,关键在于分层次学习 + 大量对照实践,而不是死记硬背。下面给你一套高效上手路线(以 x86 / x86-64 为主,也适用 ARM 思路)。
反汇编 ≠ 学汇编语言全集
你只需要能读懂 CPU 在做什么,不需要会手写汇编。
核心目标:
mov dst, src
常见寄存器:
eax / rax:返回值esp / rsp:栈指针ebp / rbp:栈基址rdi, rsi, rdx, rcx:函数参数(x86-64)push x
pop x
call func
ret
你只要理解:
call = 跳过去执行函数ret = 回来push/pop = 保存/恢复现场add / sub
mul / div
inc / dec
用途:
cmp a, b
je / jne
jg / jl
jmp
对应高级语言:
if (a == b)
while (a < b)
[rbp-8]
[rdi+rax*4]
理解:
int add(int a, int b) {
return a + b;
}
编译:
gcc -O0 -S test.c
你会看到:
mov eax, edi
add eax, esi
ret
✅ 一次看懂:
参数 → 运算 → 返回
objdump -d:反汇编gdb:单步看汇编IDA / Ghidra:图形化辅助Compiler Explorer(online):实时看汇编| 天数 | 内容 |
|---|---|
| Day1 | 寄存器 + mov |
| Day2 | 栈 + call/ret |
| Day3 | if / while 对应汇编 |
| Day4 | 数组 / 指针 |
| Day5 | 结构体 |
| Day6 | 函数调用约定 |
| Day7 | 真实程序反汇编 |
✅ 正确做法:
遇到不懂的指令 → 查 → 对照 C 代码
如果你愿意,我可以:
你现在是纯新手还是已有 C / 编程基础?