温馨提示×

Linux反汇编怎么入门

小樊
36
2026-08-05 05:12:48
栏目: 智能运维

入门 Linux 反汇编,建议按 “汇编基础 → 程序运行原理 → 反汇编工具 → 实战练习” 的顺序来,不要一上来就硬啃大型程序。下面给你一条比较清晰、可执行的路线。


一、先补必要基础(很重要)

1️⃣ 会一点 C 语言

反汇编本质是“看编译器把 C 变成了什么”,所以你需要:

  • 基本语法
  • 函数调用
  • 指针
  • 数组 / 结构体
  • if / for / while 的底层逻辑

✅ 推荐:

《C Primer Plus》或《C 程序设计语言(K&R)》


2️⃣ 学汇编(重点:x86 / x86-64)

Linux 下主要是 x86-64 汇编(AT&T 语法)

必会内容

  • 寄存器:rax, rbx, rcx, rdx, rsp, rbp, rsi, rdi
  • 栈(stack)和函数调用过程
  • 常见指令:
    mov, add, sub, cmp, jmp, call, ret
    push, pop, lea
    
  • 函数调用约定(System V AMD64 ABI):
    • 参数用寄存器:rdi, rsi, rdx, rcx, r8, r9
    • 返回值:rax

✅ 推荐资料:

  • 《汇编语言(王爽)》(入门感受)
  • 《Professional Assembly Language》
  • 在线:
    • https://asmtutor.com/
    • https://godbolt.org (看 C → 汇编)

二、理解 Linux 程序是怎么运行的

1️⃣ ELF 文件格式(重点)

反汇编前要知道程序长什么样:

  • ELF 是什么
  • .text / .data / .bss / .rodata
  • 符号表、入口点 _start

✅ 推荐:

  • readelf
  • objdump -h

2️⃣ 程序运行原理

  • 栈帧(stack frame)
  • 函数调用 / 返回
  • 局部变量在栈上
  • main 并不是真正的入口

三、Linux 反汇编核心工具

1️⃣ 静态分析(入门首选)

objdump(最基础)

objdump -d a.out

readelf

readelf -h a.out
readelf -S a.out

nm

nm a.out

2️⃣ GDB(调试 + 反汇编)

gdb ./a.out
(gdb) disas main
(gdb) info registers
(gdb) x/10x $rsp

✅ 必会 GDB 命令:

  • break
  • run
  • stepi / nexti
  • disas
  • info registers

3️⃣ 进阶工具(后期)

工具 用途
radare2 / r2 专业逆向
Ghidra 反编译 + 反汇编
IDA Pro 商业级(贵)
strace / ltrace 系统调用分析

四、入门实战路线(强烈建议)

✅ Step 1:写 C → 看汇编

int add(int a, int b) {
    return a + b;
}
gcc -O0 -S test.c

对比:

  • -O0
  • -O2

✅ Step 2:反汇编自己的小程序

gcc -no-pie -fno-stack-protector test.c -o test
objdump -d test

只看 main 和关键函数。


✅ Step 3:用 GDB 单步执行

  • 看寄存器变化
  • 看栈变化
  • 理解 call / ret

✅ Step 4:CTF / 逆向小练习

适合入门的:

  • 简单 crackme
  • 去掉 if 判断
  • 找密码字符串

推荐平台:

  • https://pwnable.tw
  • https://pwnable.kr
  • https://ctflearn.com

五、推荐书单(按阶段)

入门

  • 《逆向工程核心原理》
  • 《Linux 二进制分析》

进阶

  • 《Practical Reverse Engineering》
  • 《The Art of Assembly》
  • 《深入理解计算机系统(CSAPP)》✅(强烈推荐)

六、常见误区(避坑)

❌ 一上来就学 IDA
❌ 不懂汇编直接看反编译
❌ 只看不动手调试
❌ 忽略栈和函数调用约定


七、如果你愿意,我可以继续帮你

你可以直接告诉我:

  • ✅ 你是 安全 / CTF / 逆向 / 内核 / 普通开发
  • ✅ 用的是 x86 还是 ARM
  • ✅ 有没有 Linux 使用基础

我可以给你:

  • 一份 30 天学习计划
  • 手把手带你 反汇编第一个程序
  • 帮你 逐行解释一段汇编代码

0