温馨提示×

Linux如何做反汇编

小樊
42
2026-08-20 06:04:18
栏目: 智能运维

在 Linux 下进行反汇编,常见做法取决于你的目标(查看可执行文件、调试、逆向分析、内核代码等)。下面按使用场景工具系统介绍。


一、最常用的方法(推荐)

1️⃣ 使用 objdump(最基础、最通用)

适合:ELF 可执行文件、目标文件、共享库

反汇编整个文件

objdump -d a.out

反汇编带源码(如果有调试信息)

objdump -S a.out

只反汇编某个函数

objdump -d a.out | grep -A 20 "<main>:"

显示机器码 + 汇编

objdump -M intel -d a.out

-M intel:使用 Intel 语法(默认是 AT&T)


2️⃣ 使用 gdb(边调试边反汇编)

适合:动态调试、函数定位

gdb ./a.out

常用命令:

disassemble main
disassemble 0x401000

使用 Intel 语法:

set disassembly-flavor intel
disassemble main

3️⃣ 使用 radare2(专业逆向)

适合:逆向工程、CTF、恶意代码分析

r2 ./a.out

基本流程:

aaa        # 自动分析
pdf @ main # 反汇编 main 函数

退出:

q

4️⃣ 使用 Ghidra / IDA(GUI)

适合:复杂二进制分析

Ghidra(NSA 开源)

ghidraRun

支持:

  • 反汇编
  • 伪 C 代码
  • 多种架构(x86 / ARM / MIPS)

二、常用架构说明

架构 示例
x86 objdump -M intel -d a.out
x86_64 objdump -M intel -d a.out
ARM objdump -b elf32-littlearm -d a.out
MIPS objdump -M mips -d a.out

三、查看与反汇编的区别

工具 作用
file 查看文件类型
readelf 查看 ELF 结构
nm 查看符号表
strings 查看字符串
objdump 反汇编

示例:

file a.out
readelf -h a.out
strings a.out

四、实战示例(完整流程)

1️⃣ 编译

gcc -g -o test test.c

2️⃣ 反汇编

objdump -M intel -S test | less

3️⃣ 调试反汇编

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

五、常见问题

❓ 没有 main 函数?

objdump -d a.out | grep -E "<.*>:"

❓ 无法反汇编?

  • 文件被 strip:
file a.out
  • 使用动态分析(gdb / radare2)

六、推荐组合(新手)

初学 / 调试

objdump + gdb

逆向 / CTF

radare2 + Ghidra

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

  • 你想反汇编的是 x86 / ARM / 内核模块 / 固件
  • 调试程序 还是 逆向分析

我可以给你更精确的命令和实战示例。

0