温馨提示×

怎么快速学linux反汇编指令

小樊
35
2026-07-21 15:12:44
栏目: 智能运维

学习 Linux 反汇编指令,核心不在于“背指令”,而在于建立“汇编 ↔ 机器码 ↔ 程序逻辑”的映射关系。下面给你一条高效、实战导向的学习路线,适合从零到能看懂、能分析、能调试。


一、先明确你要学的是哪一层

Linux 反汇编通常涉及三层:

层级 内容 是否重点
汇编指令 AT&T / Intel 语法 ✅ 核心
反汇编工具 objdump / gdb / radare2 / IDA ✅ 核心
系统机制 调用约定、栈帧、ELF ✅ 高频
优化与混淆 编译器优化、花指令 ⏳ 后期

二、最快入门路线(7 天可上手)

Day 1–2:搞懂汇编“骨架”

目标:能看懂函数调用和栈

必学概念:

  • 寄存器:
    • x86:eax / ebx / ecx / edx / esi / edi / ebp / esp
    • x64:rax / rbx / rdi / rsi / rsp / rbp / rdx
  • 指令:
    mov / add / sub / push / pop / call / ret
    
  • 栈帧结构:
    [参数]
    [返回地址]
    [old ebp]
    [局部变量]
    

✅ 推荐材料:

  • 《深入理解计算机系统》(CSAPP)第 3 章
  • 在线:https://godbolt.org(看 C → 汇编)

Day 3–4:熟悉 Linux 反汇编工具

目标:能把程序“拆开看”

1️⃣ objdump(最基础)

objdump -d a.out

重点看:

  • <main>
  • call
  • ret
  • leave

2️⃣ gdb(动态反汇编)

gdb ./a.out
disas main
info registers

常用:

si        # 单步汇编
ni
x/10x $rsp

Day 5–6:学会“读反汇编代码”

目标:看到汇编能猜出 C 代码

重点对照:

汇编 C 含义
mov edi, 1 int a = 1
call printf printf(...)
cmp + jne if / while
push ebp 函数开头
leave / ret 函数返回

✅ 强烈建议:

  • 写简单 C → 编译 → 反汇编
gcc -m32 -O0 test.c -o test
objdump -d test

Day 7:系统机制 + 实战

目标:理解“为什么这么写”

必学:

  • x86 vs x64 调用约定(System V AMD64)
  • 参数传递:
    • x86:栈
    • x64:寄存器(rdi, rsi, rdx...
  • ELF 结构(section / symbol / plt / got)

三、AT&T vs Intel 语法速查(Linux 常见)

AT&T Intel 含义
mov %eax, %ebx mov ebx, eax 方向反
mov $5, %eax mov eax, 5 立即数
(%eax) [eax] 间接寻址

Linux 默认 AT&T 语法

objdump -M intel -d a.out

四、推荐工具链(效率翻倍)

工具 用途
gdb + pwndbg 调试 / 反汇编
objdump 静态分析
radare2 / Cutter 进阶
IDA Free 可视化
strace / ltrace 系统调用

五、常见“卡点”与解决方式

❌ 很多指令看不懂
✅ 先只看 控制流 + 函数调用

❌ 被优化后的汇编吓到
✅ 用 -O0 编译

❌ 死记指令
✅ 记住:“这条指令在改什么状态”


六、如果你有具体目标,我可以更精准

你可以直接告诉我:

  • ✅ 是为了 CTF / pwn / 逆向
  • ✅ 是为了 内核 / 驱动
  • ✅ 是为了 安全分析
  • ✅ x86 还是 ARM

我可以给你定制版速成笔记 + 练习程序 + 常见套路

0