在 CentOS(以及其他 Linux 发行版)里,所谓“反汇编指令”通常指的是把可执行文件或二进制数据转换成汇编代码时用到的命令和工具。常见工具包括 objdump、gdb、ndisasm、objconv 等。下面从用途、来源、区别、常见场景几个角度给你梳理一下。
objdump(最常用)来源:binutils 包
特点:
常用命令:
objdump -d ./a.out # 反汇编所有可执行段
objdump -d -M intel ./a.out # Intel 语法
objdump -S ./a.out # 源码+汇编混合
✅ 适合:
gdb(调试器自带反汇编)来源:gdb 包
特点:
常用命令:
gdb ./a.out
(gdb) disassemble main
(gdb) disassemble /m main # 源码+汇编
(gdb) set disassembly-flavor intel
✅ 适合:
ndisasm(裸二进制反汇编)来源:nasm 包
特点:
示例:
ndisasm -b 32 boot.bin
✅ 适合:
objconv(较少用)来源:第三方工具
特点:
| 工具 | 是否需 ELF | 是否支持调试 | 是否适合源码对照 | 常见用途 |
|---|---|---|---|---|
| objdump | ✅ | ❌ | ✅ | 静态分析 |
| gdb | ✅ | ✅ | ✅ | 动态调试 |
| ndisasm | ❌ | ❌ | ❌ | 裸二进制 |
| objconv | ✅ | ❌ | ⚠️ | 格式转换 |
CentOS 默认多为 AT&T 语法:
movl %eax, %ebx
Intel 语法(更直观):
mov ebx, eax
切换方式:
objdump -M intelgdb 中 set disassembly-flavor intelobjdump -dgdbndisasmobjdump + ndisasm如果你愿意,我可以:
你更想了解哪一种?