温馨提示×

怎么用Linux反汇编指令

小樊
34
2026-08-31 05:22:34
栏目: 智能运维

在 Linux 下做反汇编(disassembly),通常取决于你分析的是二进制文件可执行程序还是正在运行的程序。下面按常见场景给你一个实用速查表。


一、常用反汇编工具

工具 说明
objdump GNU binutils 自带,最常用
ndisasm NASM 自带,适合裸二进制
gdb 动态调试 + 反汇编
radare2 / rizin 逆向工程专用
IDA Pro / Ghidra 图形化逆向(GUI)

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

1️⃣ 反汇编整个可执行文件

objdump -d a.out

常见选项:

objdump -M intel -d a.out
  • -M intel:使用 Intel 语法(默认是 AT&T)
  • -d:反汇编可执行段

2️⃣ 反汇编指定函数

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

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

objdump -M intel -S a.out

4️⃣ 反汇编指定段

objdump -M intel -j .text -d a.out

三、使用 gdb 动态反汇编

1️⃣ 启动 gdb

gdb ./a.out

2️⃣ 反汇编当前函数

disassemble

或指定函数:

disassemble main

3️⃣ Intel 语法

set disassembly-flavor intel
disassemble main

4️⃣ 反汇编指定地址

disassemble 0x4005f6

四、裸二进制文件反汇编(如 shellcode)

使用 ndisasm

ndisasm -b 64 shellcode.bin
  • -b 32 / -b 64:指定位数

五、使用 radare2(逆向利器)

r2 ./a.out

进入后:

aa        # 分析
pdf @ main  # 反汇编 main 函数

六、实战示例(C → 反汇编)

1️⃣ 编译

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

2️⃣ 反汇编

objdump -M intel -d test | less

七、常见问题

❓ 为什么看不到 main?

  • 可能被 strip:
file a.out
  • 或开启了 LTO / 优化

❓ AT&T vs Intel 语法区别

AT&T:
mov    -0x4(%rbp),%eax

Intel:
mov eax, [rbp-0x4]

八、推荐学习路线

  1. 会用 objdump -d
  2. 熟练 gdb disassemble
  3. 学习 radare2 / Ghidra
  4. 理解 x86 / ARM 汇编

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

  • ✅ 分析的是 x86 / x64 / ARM
  • ✅ 是 ELF / 裸二进制 / 固件
  • ✅ 你是 逆向 / 漏洞利用 / 学习汇编

我可以给你更针对性的命令和示例。

0