温馨提示×

linux反汇编指令如何学

小樊
46
2026-09-27 14:57:17
栏目: 智能运维

学习 Linux 下的反汇编指令(assembly / disassembly),建议按“工具 → 指令集 → 反汇编阅读 → 实战”的路径来。下面给你一套比较系统的学习路线。


一、先搞清楚几个基础概念

在 Linux 下说“反汇编”,通常涉及:

  • CPU 架构:最常见是 x86 / x86_64(AT&T 和 Intel 语法)
  • 文件格式:ELF(Linux 可执行文件)
  • 工具链:gcc、objdump、gdb、IDA、radare2 等
  • 汇编语言:机器码 ↔ 汇编指令

二、环境准备(Linux)

sudo apt update
sudo apt install gcc gdb binutils objdump nasm radare2

三、从最简单程序开始

1. 写一个简单的 C 程序

// hello.c
#include <stdio.h>
int main() {
    int a = 1;
    int b = 2;
    return a + b;
}

编译:

gcc -o hello hello.c

四、使用 objdump 反汇编(最基础)

objdump -d hello

常用参数:

objdump -d -M intel hello   # Intel 语法(推荐新手)
objdump -S hello            # 源码+汇编对照

你会看到类似:

mov eax, 1
mov ebx, 2
add eax, ebx

五、使用 GDB 动态看汇编(非常重要)

gdb ./hello

GDB 常用反汇编命令:

disassemble main
layout asm
layout split   # 源码+汇编
stepi          # 单步执行汇编
info registers

六、学习汇编指令本身(重点)

推荐学习顺序

  1. 数据传送
    • mov
  2. 算术运算
    • add, sub, mul, div
  3. 栈操作
    • push, pop, call, ret
  4. 控制流
    • jmp, je, jne, cmp
  5. 函数调用约定(x86_64)
    • rdi, rsi, rdx, rcx, r8, r9
    • 返回值在 rax

七、理解调用栈(非常关键)

push rbp
mov rbp, rsp
sub rsp, 16

你要能看懂:

  • 函数怎么进入
  • 局部变量在哪
  • 参数怎么传
  • 返回值怎么回来

八、推荐学习资料

书

  • 《汇编语言》(王爽,入门神书)
  • 《Computer Systems: A Programmer’s Perspective》(CSAPP)

网站

  • https://godbolt.org (C → 汇编在线看)
  • https://www.felixcloutier.com/x86/

视频

  • B 站搜:x86 汇编 Linux
  • CSAPP 公开课(强烈推荐)

九、进阶工具

  • radare2 / rizin:逆向分析
  • IDA Free:图形化反汇编
  • strace / ltrace:系统调用观察

十、学习建议(很重要)

✅ 先学 C + 汇编对照
✅ 先看 编译器生成的汇编,不要手写
✅ 多 gdb 单步
❌ 不要一上来就学 shellcode / 逆向破解


如果你愿意,我可以:

  • 帮你 逐行讲一段反汇编代码
  • 按 零基础 / 安全方向 / 底层开发 给你定制路线
  • 用 具体例子 教你读汇编

你现在是出于什么目的学?(兴趣 / 安全 / 面试 / 开发)

0 踩