温馨提示×

如何在Linux反汇编

小樊
42
2026-07-09 18:36:40
栏目: 智能运维

在 Linux 下进行反汇编(disassembly)通常是为了分析二进制程序(如 ELF 可执行文件、动态库、shellcode 等)。下面从常用工具、基本流程、示例进阶用法几个方面系统说明。


一、常用反汇编工具

1️⃣ objdump(最基础、最常用)

GNU binutils 自带,适合静态反汇编。

objdump -d test

常用选项:

objdump -M intel -d test        # Intel 语法(默认是 AT&T)
objdump -s -j .text test       # 显示 .text 段内容
objdump -t test                # 查看符号表

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

适合边调试边反汇编。

gdb ./test

常用命令:

disassemble main
disassemble 0x401000
set disassembly-flavor intel
info functions

3️⃣ radare2(r2)【推荐】

功能强大,适合逆向工程。

r2 ./test

常用命令:

aaa            # 自动分析
pdf @ main     # 反汇编 main 函数
pd 20          # 反汇编 20 条指令
s main         # 跳转到 main

4️⃣ Ghidra / IDA Pro(图形化)

  • Ghidra:NSA 开源,免费,功能强
  • IDA Pro:商业,行业标准

适合复杂程序分析。


5️⃣ ndisasm(简单 shellcode 分析)

适合裸二进制:

ndisasm -b 32 shellcode.bin

二、基本反汇编流程(以 ELF 程序为例)

1️⃣ 查看文件类型

file test

示例:

test: ELF 64-bit LSB executable, x86-64

2️⃣ 查看程序结构

readelf -h test
readelf -S test

3️⃣ 使用 objdump 反汇编

objdump -M intel -d test > test.asm

4️⃣ 定位 main 函数

objdump -t test | grep main

或直接:

objdump -d test | grep -A 20 "<main>:"

三、常见示例

示例 1:反汇编 main 函数

objdump -M intel -d test | grep -A 30 "<main>:"

输出示例:

push   rbp
mov    rbp, rsp
mov    DWORD PTR [rbp-0x4],edi
mov    DWORD PTR [rbp-0x8],esi
pop    rbp
ret

示例 2:GDB 中动态反汇编

gdb ./test
(gdb) set disassembly-flavor intel
(gdb) disassemble main

示例 3:radare2 反汇编

r2 ./test
aaa
s main
pdf

四、反汇编技巧

✅ 使用 Intel 语法(更易读)

objdump -M intel -d test

✅ 只看代码段

objdump -d -j .text test

✅ 对比源码与汇编

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

五、常见应用场景

  • ✅ 逆向分析恶意程序
  • ✅ exploit 编写(ROP、Shellcode)
  • ✅ 理解编译器优化
  • ✅ CTF Pwn / Reverse
  • ✅ 分析函数调用与栈结构

六、学习建议

  1. 熟悉 x86 / x86-64 指令集
  2. 理解 ELF 文件结构
  3. 学会看 函数序言 / 返回 / 调用约定
  4. 常用工具组合:
    • objdump + gdb
    • radare2 + Cutter
    • Ghidra

如果你愿意,可以告诉我:

  • ✅ 你是 初学者 / CTF / 安全研究 / 驱动分析
  • ✅ 目标架构(x86 / ARM / MIPS)
  • ✅ 是否想学 动态调试 + 反汇编

我可以给你定制一套学习路线或实战示例。

0