温馨提示×

linux反汇编如何看汇编

小樊
36
2026-10-12 06:21:26
栏目: 智能运维

在 Linux 下进行反汇编并看懂汇编代码,通常分为三步:拿到二进制 → 反汇编 → 读汇编。下面用实用角度讲清楚。


一、常用反汇编工具

1️⃣ objdump(最常用)

objdump -d ./a.out

常用参数:

objdump -d -M intel ./a.out   # Intel 语法(推荐)
objdump -S ./a.out            # 汇编 + 源码对照
objdump -d -M intel -l ./a.out

2️⃣ gdb(动态调试看汇编)

gdb ./a.out
(gdb) disassemble main
(gdb) set disassembly-flavor intel
(gdb) layout asm

3️⃣ radare2 / Ghidra(逆向更强大)

r2 -d ./a.out
pdf @ main

二、如何看汇编(以 x86-64 为例)

1️⃣ 函数开头(栈帧)

push   rbp
mov    rbp, rsp
sub    rsp, 0x10

含义:

  • 保存调用者栈基址
  • 建立新栈帧
  • 分配局部变量空间

2️⃣ 参数传递(System V ABI)

参数 寄存器
第1个 rdi
第2个 rsi
第3个 rdx
第4个 rcx

示例:

foo(1, 2);
mov edi, 1
mov esi, 2
call foo

3️⃣ 局部变量

mov DWORD PTR [rbp-4], 10

表示:

int a = 10;

4️⃣ 条件判断

cmp eax, 0
je  .L1

对应:

if (x == 0) goto L1;

常见:

  • je = ==
  • jne = !=
  • jg / jl = > / <

5️⃣ 循环

.Loop:
  ...
  cmp ecx, 10
  jl .Loop

对应:

for (i = 0; i < 10; i++)

6️⃣ 函数返回

leave
ret

等价于:

return;

三、快速理解汇编的技巧

✅ 先对照 C 源码

gcc -g -O0 -o test test.c
objdump -S test

✅ 从 main 开始看

  • 不要一行行死抠
  • 先看:
    • call 了哪些函数
    • 条件跳转在哪里
    • 返回值怎么用

✅ 关注寄存器

  • rax:返回值
  • rsp/rbp:栈
  • rdi/rsi/rdx:参数

四、示例(C → 汇编)

C 代码:

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

汇编:

add:
    mov eax, edi
    add eax, esi
    ret

五、推荐学习路径

  1. 会 C
  2. 懂 x86-64 寄存器
  3. 用 objdump -S
  4. 用 gdb 单步
  5. 逆向小函数

如果你愿意,可以:

  • 贴一段 汇编代码
  • 或说你是 看漏洞 / 逆向 / 学原理

我可以直接帮你“翻译 + 解释”。

0 踩