温馨提示×

怎样解读centos反汇编结果

小樊
46
2026-09-21 10:56:51
栏目: 智能运维

解读 CentOS(或任何 Linux x86/x64 平台)下的反汇编结果,本质上是在“读机器指令对应的汇编语言”。下面我按从工具到语法,再到实战解读的顺序,系统性讲一下。


一、常见反汇编工具(CentOS 上常用)

1. objdump(最常用)

objdump -d test

常用参数:

  • -d:反汇编可执行代码
  • -M intel:使用 Intel 语法(默认是 AT&T)
  • -S:源代码 + 汇编混合
objdump -d -M intel test

2. gdb(动态调试)

gdb ./test
(gdb) disassemble main

或:

(gdb) disas /m main   # 带源码

3. readelf(辅助分析)

看符号、段、入口:

readelf -h test
readelf -s test

二、AT&T 语法 vs Intel 语法(重点)

CentOS 默认是 AT&T 语法,很多人不习惯。

AT&T 语法示例

mov    %rsp,%rbp
mov    0x8(%rbp),%rax

Intel 语法示例(推荐)

mov rbp, rsp
mov rax, [rbp+8]

✅ 建议始终加 -M intel


三、反汇编结果的基本结构

示例(x86-64):

0000000000400526 <main>:
  400526: 55              push   rbp
  400527: 48 89 e5        mov    rbp, rsp
  40052a: 48 83 ec 10     sub    rsp, 0x10

各部分含义

部分 含义
400526 指令虚拟地址
55 机器码
push rbp 汇编指令
<main> 函数名

四、函数开头 & 结尾(非常重要)

函数序言(prologue)

push rbp
mov rbp, rsp
sub rsp, 0x10

作用:

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

函数结尾(epilogue)

leave
ret

等价于:

mov rsp, rbp
pop rbp
ret

五、参数与返回值(x86-64 调用约定)

参数传递顺序

rdi, rsi, rdx, rcx, r8, r9

浮点:xmm0~xmm7

返回值

  • 整数:rax
  • 浮点:xmm0

示例:

mov edi, 5
call func

→ func(5)


六、常见指令解读速查

指令 含义
mov 数据传送
push/pop 栈操作
call 函数调用
ret 返回
lea 取地址(不是取值)
cmp 比较
je/jne/jg/jl 条件跳转
test 位测试(常用于 if)

七、实战示例解读

C 代码

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

反汇编(Intel)

add:
  mov eax, edi
  add eax, esi
  ret

解读:

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

八、看懂“优化后的反汇编”

编译器优化后可能:

  • 没有 push rbp
  • 没有栈帧
  • 指令重排

示例:

lea eax, [rdi+rsi]
ret

→ 直接算地址并返回


九、调试技巧(CentOS 实用)

1. 显示符号

objdump -d -M intel test | less

2. 动态看执行

gdb ./test
break main
run
stepi

3. 查看栈

(gdb) x/10x $rsp

十、总结一句话

解读 CentOS 反汇编 = 搞清楚“谁在调用谁、数据从哪来、结果去哪了”

如果你愿意,可以:

  • 贴一段 具体反汇编代码
  • 或说明你是 逆向 / 漏洞分析 / 性能优化 / 面试学习

我可以逐行帮你解读。

0 踩