温馨提示×

如何读懂centos反汇编

小樊
39
2026-10-17 19:35:41
栏目: 智能运维

读懂 CentOS(或其他 Linux 平台)下的反汇编代码,本质上就是读懂 x86 / x86‑64 汇编语言 + ELF 文件结构 + 调用约定。下面我按「从入门到能看懂」的顺序给你讲。


一、先搞清楚:你在反汇编什么?

在 CentOS 上常见反汇编对象:

  1. 可执行文件(ELF)
    file test
    # test: ELF 64-bit LSB executable, x86-64
    
  2. 动态库(.so)
  3. 内核模块(.ko)
  4. 崩溃时的汇编(core dump / panic)

二、常用反汇编工具(CentOS)

1️⃣ objdump(最基础)

objdump -d ./test

常用参数:

objdump -d -M intel ./test   # Intel 语法(推荐)
objdump -S ./test            # 汇编 + 源码对照
objdump -x ./test            # 查看 ELF 结构

CentOS 默认是 AT&T 语法,很多人不习惯
✅ 加 -M intel 更好读


2️⃣ gdb(运行级反汇编)

gdb ./test
(gdb) disassemble main
(gdb) layout asm

查看某地址:

(gdb) x/10i $rip

3️⃣ 高级工具(可选)

  • radare2 / rizin
  • IDA Pro
  • Ghidra

三、认识 x86‑64 汇编基本结构

1️⃣ 函数开头(典型)

push   rbp
mov    rbp, rsp
sub    rsp, 0x10

含义:

  • 保存旧栈帧
  • 建立新栈帧
  • 分配局部变量空间

2️⃣ 函数调用约定(System V AMD64)

参数传递顺序:

rdi, rsi, rdx, rcx, r8, r9

返回值:

rax

示例:

int foo(int a, int b)
mov edi, 1
mov esi, 2
call foo

3️⃣ 常见指令速查

指令 含义
mov 赋值
push/pop 栈操作
call 函数调用
ret 返回
cmp 比较
je/jne 条件跳转
lea 取地址
xor eax,eax 清 0

四、结合 C 代码理解(最有效)

示例 C 程序

int add(int a, int b) {
    return a + b;
}

反汇编

add:
    mov eax, edi
    add eax, esi
    ret

对应关系:

  • edi = a
  • esi = b
  • eax = 返回值

五、读懂 CentOS 特有内容

1️⃣ PLT / GOT(动态链接)

call printf@plt

说明:

  • printf 不在本程序
  • 运行时通过 GOT 跳转

2️⃣ 系统调用(syscall)

mov rax, 1     ; write
syscall

常见 syscall 号:

  • 0 = read
  • 1 = write
  • 59 = execve

六、实战技巧(很重要)

✅ 先看 main,再追函数
✅ 结合 gdb 单步看寄存器变化
✅ 不要试图“读懂每一行”,先看流程
✅ 关注:跳转、调用、返回值


七、学习路径建议

  1. 学 x86‑64 基础汇编(寄存器 / 栈)
  2. 写 C → 反汇编对比
  3. 用 gdb 单步调试
  4. 分析简单程序(hello / 计算器)
  5. 再碰 CentOS 系统组件 / 崩溃栈

如果你愿意,可以:

  • 发一段 CentOS 反汇编代码
  • 或说明你是 学安全 / 调 bug / 看崩溃 / 逆向

我可以直接帮你“逐行翻译”。

0 踩