学习 Linux 下的反汇编(disassembly)命令,建议从「工具 → 基本命令 → 实战练习 → 进阶」这样一个路径来学。下面给你一套比较系统的学习路线。
反汇编是把 机器码(二进制) 翻译成 汇编指令 的过程,常用于:
在 Linux 下,常见场景:
sudo apt install binutils
sudo apt install gdb
sudo apt install radare2
sudo apt install binutils
objdump -d ./a.out
objdump -d ./a.out | grep -A 20 "<main>:"
gcc -g test.c -o test
objdump -S test
nm ./a.out
readelf -h ./a.out
gdb ./a.out
disassemble
disassemble main
break main
run
disassemble
stepi
nexti
info registers
int add(int a, int b) {
return a + b;
}
编译:
gcc -g -O0 test.c -o test
反汇编:
objdump -S test
观察:
gcc -O0 test.c -o t0
gcc -O2 test.c -o t2
objdump -d t0
objdump -d t2
你会看到:
echo -ne "\x90\x90\x90" > code.bin
objdump -D -b binary -m i386 code.bin
不学汇编,反汇编看不懂。
mov, add, sub, call, retpush, poprax, rbx, rsp, rbp, rip推荐资料:
r2 ./a.out
aaa
pdf @ main
C 语言
↓
gcc 编译过程
↓
ELF 文件结构
↓
objdump / gdb
↓
x86 汇编
↓
逆向分析实战
如果你愿意,我可以:
你现在是「纯新手」还是「已有 C / Linux 基础」?