温馨提示×

如何反汇编Linux程序

小樊
33
2026-08-05 04:00:36
栏目: 智能运维

在 Linux 下反汇编(disassembly)程序,通常是为了分析二进制文件(如 ELF 可执行文件、共享库、内核模块等)的汇编代码。下面按常用工具 → 常见用法 → 实战示例 → 进阶技巧来说明。


一、常用反汇编工具

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

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

objdump -d ./program

常用选项:

objdump -M intel -d ./program   # Intel 语法(默认是 AT&T)
objdump -s -j .text ./program  # 同时显示 hex + 反汇编
objdump -t ./program           # 查看符号表
objdump -h ./program           # 查看段信息

✅ 适合快速查看 .text
❌ 不适合复杂控制流分析


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

调试器中可直接反汇编。

gdb ./program

GDB 常用命令:

disassemble main
disassemble 0x401000
disassemble /r main        # 显示机器码
info functions

使用 Intel 语法:

set disassembly-flavor intel

✅ 可结合运行态分析
✅ 支持断点、寄存器查看


3️⃣ radare2(进阶逆向神器)

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

r2 ./program

常用命令:

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

输出可读性高,支持流程图(Vim 模式或 V)。


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

✅ 带反编译(C 伪代码)
❌ 学习成本高 / 商业工具

  • Ghidra:NSA 开源,免费
  • IDA Pro:行业标准(昂贵)

5️⃣ capstone / llvm-objdump

高级用户:

llvm-objdump -d ./program

二、基本反汇编示例

示例程序(hello.c)

#include <stdio.h>

int main() {
    printf("Hello\n");
    return 0;
}

编译(关闭优化,保留符号):

gcc -g -O0 -no-pie hello.c -o hello

反汇编 main:

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

三、只反汇编某一段

1️⃣ 只反汇编 .text

objdump -d -j .text ./program

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

objdump -d --start-address=0x401000 --stop-address=0x401050 ./program

四、带符号 vs 无符号

情况 说明
有符号 函数名清晰
stripped main 消失,需手动分析入口点

查看是否 stripped:

file ./program

手动找入口:

readelf -h ./program

五、配合其他工具分析

1️⃣ 查看 ELF 信息

readelf -h ./program
readelf -S ./program

2️⃣ 查看字符串

strings ./program

3️⃣ 反编译(伪 C)

objdump -d ./program        # 汇编
# 或
r2 -> pdg                 # Ghidra/IDA 更适合

六、常见调试组合

gcc -g -O0 -no-pie -fno-stack-protector program.c -o program
gdb ./program

推荐编译选项(方便反汇编):

  • -O0:不做优化
  • -no-pie:地址固定
  • -g:调试信息

七、简单对比总结

工具 用途
objdump 静态反汇编
gdb 动态分析
radare2 逆向分析
Ghidra 逆向 + 反编译
IDA 专业逆向

八、你可以继续问的方向

  • ✅ 如何反汇编 stripped 程序
  • ✅ 如何分析 恶意 ELF
  • ✅ 如何还原 函数调用关系
  • ✅ 如何反汇编 内核模块
  • ✅ 如何分析 加壳程序

告诉我你的具体场景(CTF / 安全研究 / 漏洞分析 / 学习汇编),我可以给你更针对性的方案。

0