在 Linux 下,“反汇编指令”通常指的是把二进制(可执行文件、目标文件、内存等)转换成汇编代码的工具和命令。常见有 objdump、gdb、ndisasm、objconv 等。下面重点对比最常用、最容易混淆的几个。
作用:反汇编 ELF / 可执行文件 / .o 文件
objdump -d test
常见选项:
-d:反汇编可执行代码段-D:反汇编所有段-S:源码 + 汇编混合(需 -g 编译)-M intel:使用 Intel 语法(默认 AT&T)✅ 特点:
❌ 不适合:
作用:在程序运行中反汇编内存
gdb ./test
(gdb) disassemble main
或 Intel 语法:
set disassembly-flavor intel
disassemble
✅ 特点:
❌ 不适合:
作用:反汇编无格式的 raw binary
ndisasm -b 64 boot.bin
✅ 特点:
❌ 缺点:
作用:格式转换 + 反汇编
objconv -d test test.asm
✅ 特点:
❌ 不常用(需额外安装)
Linux 默认 AT&T 语法:
mov %rax, %rbx
加 -M intel 后:
mov rbx, rax
| 工具 | 场景 | 是否需 ELF | 是否动态 |
|---|---|---|---|
| objdump | 静态分析 | ✅ | ❌ |
| gdb | 调试 | ✅ | ✅ |
| ndisasm | 裸二进制 | ❌ | ❌ |
| objconv | 格式转换 | ✅ | ❌ |
如果你愿意,我可以:
你更想了解哪一块?