在 CentOS 上入门 反汇编(Disassembly),核心目标是:
学会 把可执行文件/二进制还原成汇编代码,并理解它在做什么。
下面给你一个 从零到可用的完整路线,适合初学者,偏实战。
CentOS 常用于:
sudo yum install -y \
binutils \
gdb \
nasm \
gcc \
make
推荐再加:
sudo yum install -y strace ltrace
// hello.c
#include <stdio.h>
int main() {
puts("Hello");
return 0;
}
编译(带调试信息):
gcc -g -O0 hello.c -o hello
❗ 不要加
-O2,否则反汇编很难看
objdump -d hello
重点看:
main:
push rbp
mov rbp,rsp
...
call puts
objdump -d hello | grep -A 20 "<main>:"
objdump -t hello
gdb ./hello
disassemble main
或者:
disas main
break main
run
disas
si # 汇编单步
ni # 指令单步(不进函数)
info registers
你需要会看:
| 指令 | 含义 |
|---|---|
mov |
赋值 |
push/pop |
栈操作 |
call |
函数调用 |
ret |
返回 |
cmp |
比较 |
jmp |
跳转 |
RAX RBX RCX RDX
RSP RBP
RIP
sudo yum install -y radare2
使用:
r2 ./hello
常用命令:
aaa
pd 20
file hello
readelf -h hello
readelf -S hello
strings hello
nm hello
objdump -dmain → call → retif / for / while 对应汇编❌ 直接用 -O2 编译 → 很难看懂
❌ 跳过 GDB,直接学 IDA → 基础不牢
❌ 不懂汇编就看反编译 → 永远学不会
你可以直接说:
我可以直接带你 手把手分析真实二进制。