温馨提示×

Linux反汇编如何上手

小樊
45
2026-08-05 06:02:51
栏目: 智能运维

学习 Linux 下的反汇编(Disassembly) 通常是为了逆向工程、漏洞分析、二进制安全或理解程序底层执行过程。下面给你一个从零到入门、循序渐进的上手路线。


一、基础知识准备

1. 了解 CPU 架构

Linux 下最常见的是:

  • x86 / x86-64(最常见)
  • ARM(嵌入式、手机、M1 Mac)

建议先学 x86-64,资料最多。

2. 了解汇编基础

重点掌握:

  • 寄存器:RAX, RBX, RCX, RDX, RSP, RBP, RIP
  • 指令:
    • 数据移动:mov, push, pop
    • 运算:add, sub, xor
    • 控制流:call, ret, jmp, je, jne
  • 栈与函数调用(calling convention)

推荐速成:

  • 《汇编语言(x86)入门》
  • 搜索关键词:x86-64 assembly tutorial

二、准备 Linux 环境

1. 系统

  • Ubuntu / Debian / Arch
  • 推荐 64 位系统

2. 安装基础工具

sudo apt update
sudo apt install -y \
  gcc gdb nasm objdump binutils \
  radare2 strace ltrace

三、从“自己写程序 + 反汇编”开始(最重要)

1. 写一个简单的 C 程序

// test.c
#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int main() {
    int x = add(3, 5);
    printf("%d\n", x);
    return 0;
}

编译(保留调试信息,关闭优化):

gcc -m64 -O0 -g -o test test.c

2. 使用 objdump 反汇编(入门首选)

objdump -d test

重点看:

  • main
  • add
  • call, ret
  • 函数参数如何传递(寄存器)

更清晰一点:

objdump -M intel -d test

3. 使用 GDB 动态反汇编(非常关键)

gdb ./test

常用命令:

disas main
disas add
info registers
stepi
nexti
break main
run

查看汇编 + 源码:

layout asm
layout src

四、进阶工具(逆向必备)

1. radare2(强烈推荐)

r2 ./test

常用命令:

aaa        # 分析
s main     # 跳转
pdf        # 反汇编函数

2. IDA / Ghidra(图形化)

  • IDA Free(x86)
  • Ghidra(NSA 开源,免费)

适合:

  • 大型程序
  • 函数识别
  • 伪代码(C 伪代码)

五、理解反汇编在干什么

1. 函数调用流程

call add
ret

对应:

  • 压栈返回地址
  • 跳转函数
  • 返回

2. 参数传递(x86-64)

add(3,5)

常见:

  • RDI, RSI, RDX, RCX, R8, R9

六、常见学习路径(推荐)

✅ 入门阶段

  1. C → 汇编(gcc + objdump)
  2. GDB 单步调试汇编
  3. 理解栈、函数调用

✅ 进阶阶段

  1. 无源码逆向(strip 后的程序)
  2. 缓冲区溢出 / ROP
  3. shellcode 分析

七、推荐学习资料

书籍

  • 《逆向工程核心原理》
  • 《Practical Reverse Engineering》
  • 《深入理解计算机系统(CSAPP)》

在线


八、学习建议(很现实)

  • 先写程序再反汇编
  • ❌ 别一开始就硬啃大型软件
  • ✅ 多对比:源码 ↔ 汇编 ↔ 运行结果
  • ✅ 学会“猜逻辑”,而不是逐条翻译汇编

如果你愿意,我可以:

  • 带你 逐行分析一段反汇编代码
  • 给你 一个从 C 到汇编的完整对照示例
  • 安全 / 逆向 / 系统方向 给你定制学习路线

你更偏向哪一类?

0