从原理层面讲,CentOS 上的“反汇编”并不是 CentOS 独有的技术,而是基于 x86/x86‑64 指令集 + ELF 可执行文件格式 + 反汇编工具共同完成的。CentOS 只是提供了一个 Linux 运行环境。
下面从 原理 → 过程 → 常见工具 → 示例 系统说明。
反汇编(Disassembly) 是把 机器码(二进制指令) 翻译成 汇编指令 的过程:
机器码(二进制) → 汇编指令(文本)
例如:
机器码:55
汇编:push rbp
⚠️ 注意:
CentOS 通常运行在 x86‑64 架构 上,CPU 使用:
反汇编器必须:
CentOS 下可执行文件通常是 ELF(Executable and Linkable Format)。
ELF 中反汇编关注的内容:
| 段名 | 作用 |
|---|---|
.text |
存放机器指令(代码段) |
.data |
已初始化全局变量 |
.rodata |
只读数据 |
.symtab |
符号表(函数名、变量名) |
.rela.* |
重定位信息 |
反汇编器:
_start).text 段的机器码反汇编器内部流程:
读取二进制 → 查指令表 → 解析 ModRM / SIB → 输出汇编
以 x86‑64 为例:
反汇编器本质是一个 指令解码器。
gcc -O0 -g test.c -o test
readelf -h test
readelf -S test
.text 段起始地址objdump -d test
✅ 原理:
示例:
objdump -d ./test
✅ 原理:
gdb ./test
(gdb) disassemble main
✅ 原理:
r2 ./test
pdf @ main
a = a + 1;
可能被优化成:
inc eax
int main() {
return 0;
}
0000000000401106 <main>:
401106: 55 push rbp
401107: 48 89 e5 mov rbp,rsp
40110a: b8 00 00 00 00 mov eax,0x0
40110f: 5d pop rbp
401110: c3 ret
CentOS 上的反汇编原理是:解析 ELF 可执行文件 → 定位代码段 → 根据 x86/x86‑64 指令集规范对机器码进行解码 → 输出汇编指令。
如果你愿意,我可以: