温馨提示×

linux反汇编指令有何区别

小樊
39
2026-10-26 22:43:10
栏目: 智能运维

在 Linux 下,“反汇编指令”通常指的是把二进制(可执行文件、目标文件、内存等)转换成汇编代码的工具和命令。常见有 objdump、gdb、ndisasm、objconv 等。下面重点对比最常用、最容易混淆的几个。


1️⃣ objdump(最常用)

作用:反汇编 ELF / 可执行文件 / .o 文件

objdump -d test

常见选项:

  • -d:反汇编可执行代码段
  • -D:反汇编所有段
  • -S:源码 + 汇编混合(需 -g 编译)
  • -M intel:使用 Intel 语法(默认 AT&T)

✅ 特点:

  • 支持 ELF、Linux 原生格式
  • 能显示符号、段信息
  • 静态分析首选

❌ 不适合:

  • 实时调试
  • 裸二进制(无 ELF 头)

2️⃣ gdb(调试时反汇编)

作用:在程序运行中反汇编内存

gdb ./test
(gdb) disassemble main

或 Intel 语法:

set disassembly-flavor intel
disassemble

✅ 特点:

  • 可结合寄存器、内存
  • 适合动态调试
  • 能看运行期状态

❌ 不适合:

  • 纯静态分析(不如 objdump 清晰)

3️⃣ ndisasm(裸二进制反汇编)

作用:反汇编无格式的 raw binary

ndisasm -b 64 boot.bin

✅ 特点:

  • 适合 bootloader、shellcode
  • 不依赖 ELF

❌ 缺点:

  • 不懂符号
  • 不懂段结构

4️⃣ objconv(少但强)

作用:格式转换 + 反汇编

objconv -d test test.asm

✅ 特点:

  • 输出干净
  • 支持多种格式

❌ 不常用(需额外安装)


5️⃣ 语法区别(AT&T vs Intel)

Linux 默认 AT&T 语法:

mov %rax, %rbx

加 -M intel 后:

mov rbx, rax

总结对比表

工具 场景 是否需 ELF 是否动态
objdump 静态分析 ✅ ❌
gdb 调试 ✅ ✅
ndisasm 裸二进制 ❌ ❌
objconv 格式转换 ✅ ❌

如果你愿意,我可以:

  • 对比 Windows vs Linux 反汇编
  • 教你 如何从 C 到汇编
  • 分析 某段反汇编代码含义

你更想了解哪一块?

0 踩