如果你是一个新手,想学习 CentOS 下的反汇编指令,可以按下面这个路线来,既不枯燥也容易上手。
在 CentOS 里说“反汇编”,通常指:
常用工具:
objdump ✅(最基础)gdb ✅(调试 + 反汇编)readelf(看 ELF 结构)nm(看符号)sudo yum install -y binutils gdb gcc
binutils → 包含 objdumpgdb → 调试器gcc → 用来生成测试程序// hello.c
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int x = add(3, 4);
printf("%d\n", x);
return 0;
}
编译(不要优化,方便看):
gcc -O0 -g -o hello hello.c
objdump -d hello
只看 main 函数:
objdump -d hello | grep -A 20 '<main>:'
objdump -S hello
你会看到:
push %rbp
mov %rsp,%rbp
...
这就是 x86-64 汇编
gdb ./hello
disassemble main
break main
run
nexti
disassemble
nexti = 单步执行一条汇编指令
不用全学,先记住这些:
| 指令 | 含义 |
|---|---|
mov |
赋值 |
push/pop |
栈操作 |
call |
函数调用 |
ret |
返回 |
add/sub |
加减 |
cmp/jmp |
判断跳转 |
寄存器:
rax:返回值rdi, rsi:第1、2个参数rbp/rsp:栈帧objdump -dgdb disassemblemain 和函数调用man objdump
man gdb
如果你愿意,我可以:
你现在是想 学逆向安全,还是 搞懂程序底层运行?