PWN入门之三:寄存器
PWN入门之三:寄存器
0x00 前言
本篇文章实际上为PWN入门之四:C语言调用栈的前置,旨在介绍x86架构下的击中常见的寄存器,方便后续理解后续出现的汇编代码。
0x01 什么是寄存器?
简单来说,寄存器就是CPU内部的一些小型储存区域,用来暂时存放一些需要计算的数据以及运算出的结果和一些CPU运行需要的信息,比如下面这些:
- 可将其内的数据执行算数和逻辑运算。
- 储存在其内的地址可以用来指向内存的某个地址,即寻址。
- 可以用来读写数据到电脑周边的数据
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入门之三:寄存器/