温馨提示×

centos反汇编如何看寄存器

小樊
36
2026-09-30 07:41:24
栏目: 智能运维

在 CentOS(Linux) 下进行反汇编并查看寄存器,通常有两套常见场景:


一、静态反汇编(不运行程序,只看代码)

常用工具:objdump

1. 反汇编可执行文件

objdump -d ./a.out

或反汇编指定函数:

objdump -d -M intel ./a.out | less

(-M intel 使用 Intel 语法,比 AT&T 好读)

2. 看寄存器在反汇编里怎么表示

示例:

mov    eax, 0x1
mov    edx, [esp+0x4]
call   0x80484b6

常见寄存器:

  • 通用寄存器:eax, ebx, ecx, edx, esi, edi, ebp, esp(32位)
  • 64位:rax, rbx, rcx, rdx, rsi, rdi, rbp, rsp
  • 指令指针:eip / rip
  • 标志寄存器:eflags / rflags

⚠️ 静态反汇编只能“看到代码里用了哪些寄存器”,看不到运行时的值


二、动态调试(真正“看寄存器”的值)

常用工具:gdb

1. 用 gdb 调试程序

gdb ./a.out

2. 查看反汇编

disassemble main

或 Intel 语法:

set disassembly-flavor intel
disassemble main

3. 查看寄存器(重点)

info registers

或简写:

i r

只看某一个:

i r eax
i r rip

4. 单步执行并看寄存器变化

break main
run
stepi      # 单步一条汇编
i r        # 看寄存器

5. 查看内存中的寄存器相关值

x/4xw $esp     # 看栈顶 4 个 32 位值
x/2xg $rsp     # 64 位

三、常见寄存器含义速查

x86 / x86_64

寄存器 含义
eax / rax 返回值、运算
ebx / rbx 基址
ecx / rcx 计数器
edx / rdx 数据
esp / rsp 栈指针
ebp / rbp 栈帧基址
eip / rip 当前指令地址
eflags 状态标志(ZF、CF 等)

四、实用组合示例

gdb ./a.out
(gdb) set disassembly-flavor intel
(gdb) break main
(gdb) run
(gdb) disassemble
(gdb) stepi
(gdb) info registers

如果你愿意,可以告诉我:

  • 是 32 位还是 64 位程序
  • 用的是 C / 汇编 / 病毒分析 / 漏洞利用
  • 想看的是 调用约定、栈布局还是调试技巧

我可以直接给你对应的实战示例。

0 踩