PWN入门之三:寄存器

PWN入门之三:寄存器

参考文章:
https://www.cnblogs.com/xuanyuan/p/13850548.html

0x00 前言

本篇文章实际上为PWN入门之四:C语言调用栈的前置,旨在介绍x86架构下的击中常见的寄存器,方便后续理解后续出现的汇编代码。

0x01 什么是寄存器?

简单来说,寄存器就是CPU内部的一些小型储存区域,用来暂时存放一些需要计算的数据以及运算出的结果和一些CPU运行需要的信息,比如下面这些:

  1. 可将其内的数据执行算数和逻辑运算
  2. 储存在其内的地址可以用来指向内存的某个地址,即寻址
  3. 可以用来读写数据到电脑周边的数据

0x02 通用寄存器

通用寄存器,看名字也知道,这也是我们最常见的寄存器,电脑运行程序是,大部分的操作都是在这些寄存器中完成的,但是,虽然名字里面有“通用”,但是并不是真正的通用,这几个寄存器在实际使用中还有一些自己的潜规则。

寄存器(64位/32位) 作用
RAX/EAX 通常用来执行加法,函数调用的返回值一般也放在这里面
RBX/EBX 数据存取
RCX/ECX 通常用来作为计数器,比如for循环
RDX/EDX 读写I/O端口时,edx用来存放端口号
RSP/ESP 栈顶指针,指向栈的顶部
RBP/EBP 栈底指针,指向栈的底部,通常用ebp+偏移量的形式来定位函数存放在栈中的局部变量
RSI/ESI 字符串操作时,用于存放数据源的地址
RDI/EDI 字符串操作时,用于存放目的地址的,和esi两个经常搭配一起使用,执行字符串的复制等操作
R8~R15(64位独有)

0x03 指令寄存器

RIP/EIP指令寄存器可以说是CPU中最最重要的寄存器了,它指向了下一条要执行的指令所存放的地址,CPU的工作其实就是不断取出它指向的指令,然后执行这条指令,同时指令寄存器继续指向下面一条指令,如此不断重复,这就是CPU工作的基本日常。而在漏洞攻击中,黑客想尽办法费尽心机都想要修改指令寄存器的地址,从而能够执行恶意代码。


PWN入门之三:寄存器
https://www.xuanyuan-blog.top/2025/07/10/PWN入门之三:寄存器/
作者
玄渊
发布于
2025年7月10日
许可协议