温馨提示×

怎么操作Linux反汇编

小樊
40
2026-08-05 05:29:45
栏目: 智能运维

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


一、常用反汇编工具

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

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

objdump -d a.out

常用选项:

  • -d:反汇编可执行段
  • -D:反汇编所有段
  • -M intel:使用 Intel 语法(默认 AT&T)
  • -S:源码+汇编混合(需要 -g 编译)
  • -b binary:分析裸二进制文件

示例:

objdump -M intel -d ./test

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

GDB 可以边调试边看汇编。

gdb ./a.out

常用命令:

disas main
disas 0x401000
info registers
x/10i $rip
stepi

设置 Intel 语法:

set disassembly-flavor intel

3️⃣ radare2 / r2(专业逆向工具)

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

r2 ./a.out

常用命令:

aaa        # 自动分析
pd 20      # 反汇编 20 条
pdf        # 反汇编当前函数
s main     # 定位 main

4️⃣ Ghidra / IDA(图形化,非必须)

  • Ghidra:NSA 开源,免费,支持 Linux
  • IDA:商业,功能最强

适合复杂程序分析。


二、基本操作流程(以 objdump 为例)

1️⃣ 编译一个测试程序

gcc -m32 -no-pie -fno-stack-protector -z execstack -g test.c -o test

示例 test.c

#include <stdio.h>

int main() {
    int a = 1;
    int b = 2;
    return a + b;
}

2️⃣ 反汇编 main 函数

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

3️⃣ 查看符号表

nm test
readelf -s test

4️⃣ 查看段信息

readelf -S test

三、AT&T vs Intel 语法对比

项目 AT&T Intel
操作数顺序 src, dst dst, src
寄存器 %eax eax
立即数 $5 5
内存 (%eax) [eax]

推荐:

objdump -M intel

四、反汇编裸二进制文件

objdump -b binary -m i386 -M intel -D shellcode.bin

或:

ndisasm -b 32 shellcode.bin

五、动态反汇编(调试时)

gdb ./test
(gdb) set disassembly-flavor intel
(gdb) break main
(gdb) run
(gdb) disas

六、常见用途

  • ✅ 分析程序逻辑
  • ✅ 漏洞分析(栈溢出、ROP)
  • ✅ 恶意代码分析
  • ✅ 理解编译器优化
  • ✅ CTF 逆向题

七、学习建议

  • 先学 x86/x64 汇编基础
  • 熟悉 ELF 文件结构
  • objdump + gdb 开始
  • 再学 radare2 / Ghidra

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

  • ✅ 你是 初学者 / CTF / 安全研究
  • ✅ 分析的是 什么架构(x86 / ARM / MIPS)
  • ✅ 是否是 裸二进制 / ELF / 固件

我可以直接给你针对性的实战示例

0