温馨提示×

Linux反汇编步骤是啥

小樊
36
2026-07-09 19:34:41
栏目: 智能运维

Linux 下做反汇编(disassembly)通常有几种常见场景,步骤大同小异。下面按从简单到进阶给你一个清晰流程,适合做逆向、漏洞分析、或学习 ELF 程序。


一、准备环境

sudo apt update
sudo apt install gdb binutils objdump radare2 ndisasm

常用工具:

  • objdump(最基础)
  • gdb(调试 + 反汇编)
  • radare2(进阶逆向)
  • ndisasm(适合裸二进制)

二、查看可执行文件信息(非常重要)

file test

输出示例:

test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked

确认:

  • 架构(x86 / x64 / ARM)
  • 是否是 ELF
  • 是否 stripped(是否去掉符号表)

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

1️⃣ 反汇编整个代码段

objdump -d test

2️⃣ 反汇编指定函数

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

3️⃣ 显示源码 + 汇编(如果有调试信息)

objdump -S test

4️⃣ 显示所有段信息

objdump -h test

四、使用 GDB 动态反汇编(强烈推荐)

1️⃣ 启动程序

gdb ./test

2️⃣ 设置反汇编格式(Intel 语法)

set disassembly-flavor intel

3️⃣ 反汇编函数

disas main

4️⃣ 运行 + 断点 + 单步

break main
run
ni        # 单步(不进入函数)
si        # 单步(进入函数)

GDB 是最适合分析程序执行流程的


五、分析二进制文件结构(ELF)

查看段信息

readelf -S test

查看符号表

readelf -s test

查看入口点

readelf -h test

六、使用 radare2(专业逆向)

r2 ./test

常用命令:

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

✅ radare2 适合复杂程序、脱壳、漏洞分析


七、裸二进制反汇编(无 ELF)

ndisasm -b 32 file.bin

objdump -b binary -m i386 -D file.bin

八、反汇编完整流程总结(推荐顺序)

  1. file 判断文件类型
  2. readelf 分析 ELF 结构
  3. objdump -d 静态反汇编
  4. gdb 动态调试 + 反汇编
  5. (进阶)radare2 深入分析

九、常见问题

Q:为什么反汇编出来是 <main+0> 而不是函数名?

✅ 程序被 strip
✅ 用 strip 过的程序没有符号表

Q:如何看系统调用?

strace ./test

Q:如何看字符串?

strings test

如果你愿意,我可以:

  • ✅ 带你 一步步反汇编一个真实 ELF
  • ✅ 分析 CTF 题目
  • ✅ 教你 ARM / MIPS 反汇编
  • ✅ 对比 Intel vs AT&T 汇编语法

你可以直接把 程序或代码片段 发我。

0