温馨提示×

Linux反汇编怎么操作

小樊
47
2026-07-09 18:57:48
栏目: 智能运维

在 Linux 下进行反汇编(disassembly),通常是为了分析二进制程序(如 ELF 可执行文件、共享库、Shellcode 等)。下面按从入门到进阶给你一个完整操作指南。


一、常用工具概览

工具 用途
objdump 最基本、最常用的反汇编工具
gdb 动态调试 + 反汇编
radare2 / r2 强大的逆向分析工具
IDA Pro 商业逆向神器(Linux 版)
Ghidra NSA 开源逆向工具
ndisasm 简单 x86 反汇编
capstone 反汇编库(脚本化分析)

二、使用 objdump 反汇编(最常用)

1️⃣ 反汇编整个可执行文件

objdump -d ./a.out

2️⃣ 反汇编指定段(如 .text

objdump -d -j .text ./a.out

3️⃣ 显示源码 + 汇编(需要 -g 编译)

objdump -S ./a.out

4️⃣ 显示符号表

objdump -t ./a.out

三、使用 gdb 动态反汇编

1️⃣ 启动 gdb

gdb ./a.out

2️⃣ 反汇编当前函数

disassemble

3️⃣ 反汇编指定函数

disassemble main

4️⃣ 反汇编指定地址范围

disassemble 0x401000,0x401100

5️⃣ 查看当前指令

x/10i $pc

四、使用 radare2(专业逆向)

1️⃣ 安装

sudo apt install radare2

2️⃣ 打开程序

r2 ./a.out

3️⃣ 分析

aaa

4️⃣ 查看函数列表

afl

5️⃣ 反汇编 main 函数

pdf @ main

五、使用 ndisasm(适合裸二进制)

ndisasm -b 32 shellcode.bin

或 64 位:

ndisasm -b 64 shellcode.bin

六、示例:从 C 到反汇编

1️⃣ 编写代码

// test.c
int main() {
    return 42;
}

2️⃣ 编译(保留调试信息)

gcc -g -o test test.c

3️⃣ 反汇编

objdump -d test

你可能会看到类似:

0000000000001129 <main>:
    1129: 55                      push   %rbp
    112a: 48 89 e5                mov    %rsp,%rbp
    112d: b8 2a 00 00 00          mov    $0x2a,%eax
    1132: 5d                      pop    %rbp
    1133: c3                      ret

七、常见架构参数

架构 objdump 参数
x86 默认
x86-64 默认
ARM objdump -d -M arm ./a.out
MIPS objdump -d -M mips ./a.out

八、进阶建议

✅ 学习:

  • x86 / x86-64 指令集
  • 调用约定(System V ABI)
  • ELF 文件结构

✅ 推荐书籍:

  • 《逆向工程核心原理》
  • 《Practical Reverse Engineering》

如果你愿意,我可以:

  • ✅ 给你 一步步分析一个真实程序
  • ✅ 教你 从汇编还原 C 逻辑
  • ✅ 针对 CTF / 漏洞分析 / 内核 / 驱动 场景讲反汇编

你现在用的是 Ubuntu / Kali / Arch?分析什么程序?

0