在 CentOS 上学习反汇编指令,可以按下面几个阶段来走:
sudo yum install -y gcc gcc-c++ gdb binutils
可选(更专业):
sudo yum install -y nasm objdump readelf strace ltrace
常用工具说明:
gcc:编译 C 程序objdump:反汇编 ELF 文件(最常用)gdb:调试 + 查看汇编readelf:分析 ELF 结构nasm:写汇编程序(可选)// test.c
int add(int a, int b) {
return a + b;
}
int main() {
return add(1, 2);
}
gcc -g -O0 test.c -o test
objdump -d test
objdump -d test | grep -A 20 '<add>:'
objdump -S -d test
你会看到类似:
0000000000400526 <add>:
400526: 55 push %rbp
400527: 48 89 e5 mov %rsp,%rbp
40052a: 89 7d fc mov %edi,-0x4(%rbp)
gdb ./test
break main
run
disassemble
或单步执行汇编:
stepi
info registers
| 指令 | 含义 |
|---|---|
mov |
数据传送 |
push/pop |
栈操作 |
call/ret |
函数调用 |
add/sub |
加减 |
cmp/test |
比较 |
je/jne |
条件跳转 |
lea |
取地址 |
objdump -M intel -d test
如果你愿意,我可以:
你更想学哪一块?