温馨提示×

Linux反汇编入门法

小樊
48
2026-08-20 07:14:36
栏目: 智能运维

下面给你一套Linux 下反汇编(Reverse / Disassembly)入门路线,从“能看懂”到“能分析”,偏实战,不堆理论。


一、先搞清楚:反汇编在 Linux 下是干嘛的?

反汇编 ≠ 逆向工程全部
它只是:

把机器码 → 汇编指令

常见用途:

  • 分析 ELF 程序行为
  • 理解漏洞(栈溢出、ROP)
  • 去掉混淆 / 壳
  • 理解编译器优化
  • 调试无源码程序

二、必备基础(别跳过)

1️⃣ Linux 基本操作

必须会:

file
strings
xxd / hexdump
objdump
nm
readelf

2️⃣ 汇编基础(x86 / x64)

重点不是“背指令”,而是理解:

概念 说明
寄存器 rax, rbx, rsp, rbp, rip
push / pop / call / ret
函数调用 System V ABI
指令 mov, add, sub, cmp, jmp, call

✅ 推荐先学 x86-64(AMD64)
❌ 不建议一上来就 ARM


三、工具链(Linux 反汇编三件套)

✅ 1. objdump(最基础)

objdump -d ./a.out

常用:

objdump -M intel -d ./a.out

说明:

  • -M intel:Intel 语法(比 AT&T 好看)
  • -d:反汇编代码段

✅ 适合:看函数结构、学习汇编


✅ 2. GDB(动态反汇编)

gdb ./a.out

常用命令:

disas main
info registers
x/10i $rip
break main
run
stepi

进阶:

gdb -q ./a.out
set disassembly-flavor intel

✅ 适合:理解程序执行流程


✅ 3. radare2 / Cutter(进阶)

r2 ./a.out

常用:

aaa
s main
pdf

或用图形界面:

cutter

✅ 适合:逆向工程、漏洞分析


四、第一个反汇编实验(强烈建议动手)

1️⃣ 写个简单 C 程序

int main() {
    int a = 1;
    int b = 2;
    return a + b;
}

编译:

gcc -m64 -O0 -no-pie -fno-stack-protector test.c -o test

2️⃣ 反汇编

objdump -M intel -d test | less

重点看:

  • main
  • push rbp
  • mov rbp, rsp
  • mov DWORD PTR [rbp-4], 1

3️⃣ 用 GDB 单步

gdb ./test
disas main
break main
run
stepi

五、ELF 文件结构(必须懂)

查看 ELF 信息

readelf -h test
readelf -S test

重点理解:

  • .text(代码)
  • .data(已初始化数据)
  • .rodata(只读数据)
  • .plt / .got(函数调用)

六、常见反汇编场景速查

场景 方法
找 main objdump -d + 搜索 main
找字符串 strings ./a.out
找系统调用 strace ./a.out
分析函数调用 GDB + bt
去混淆 动态调试 + 多次运行

七、学习路线(推荐顺序)

  1. ✅ C + Linux 基础
  2. ✅ x86-64 汇编(只看常用指令)
  3. ✅ objdump + GDB
  4. ✅ ELF 文件格式
  5. ✅ radare2 / IDA Free
  6. ✅ CTF pwn / reverse 题

八、推荐资料(质量高)

书籍

  • 《逆向工程核心原理》
  • 《Practical Reverse Engineering》
  • 《Understanding the Linux Kernel》(辅助)

在线


九、一句经验总结

反汇编不是“看懂每一行汇编”,而是“知道程序在干什么”。

如果你愿意,我可以:

  • 带你 逐行分析一个 objdump 输出
  • 给你 一个入门逆向练习(带答案)
  • 或专门讲 ARM / RISC-V / 内核反汇编

你更想往 安全 / 漏洞 / CTF / 内核 哪个方向走?

0