esp寄存器与ebp寄存器介绍

    ESP

ESP(Extended stack pointer)是指针寄存器的一种(另一种为EBP)。用于堆栈指针。
ESP为栈指针,用于指向栈的栈顶(下一个压入栈的活动记录的顶部),而EBP为帧指针,指向当前活动记录的顶部。
栈指针与帧指针标识出了当前活动记录的位置。
当函数被调用的时候,执行如下操作:
⒈将帧指针压入栈中:push ebp
⒉用ebp保存当前栈指针:mov ebp,esp
⒊使得栈指针自减,自减得到的内存应当能够被用来存储被调用函数的本地状态:sub 0CCh,esp
EBP
扩展 基址 指针 寄存器 (extended base pointer)  其内存放一个指针,该指针指向系统栈最上面一个 栈帧 的底部。
每个任务(进程)有一个栈,在这个进程中每个函数被调用时分别从这个栈占用一段区域,称为帧(frame)。%esp寄存器指向当前整个栈的栈顶,% ebp指向当前帧的帧底。上一级调用者的帧底被压入当前%ebp内容所指的地址,也就是当前帧的帧底位置保存了上一级调用者的%ebp指针值(帧底),而每个%ebp的前一个单元存放的就是当前函数的返回地址(它是由调用者在call指令中入的栈),保证是在上以及帧的最后一个空间单元。这样就可以 根据当前%ebp的值回溯出整个任务的调用栈(调用过程)。    
在函数栈帧中,一般包含以下几类重要信息。 (1)局部变量:为函数局部变量开辟的内存空间。  (2)栈帧状态值:保存前栈帧的顶部和底部(实际上只保存前栈帧的底部,前栈帧的顶部可以通过栈帧平衡计  算得到),用于在本栈被弹出后恢复出上一个栈帧。  (3)函数返回地址:保存当前函数调用前的“断点”信息,也就是函数调用前的指令位置,以便在函数返回  时能够恢复到函数被调用前的代码区中继续执行指令。
  注:函数栈帧的大小并不固定,一般与其对应函数的局部变量多少有关。函数运行过程中,其栈帧大小也是 在不停变化的。  除了与栈相关的寄存器外,我们还需要记住另一个至关重要的寄存器。  EIP:指令寄存器(extended instruction pointer),其内存放着一个指针,该指针永远指向下一条等待  执行的指令地址。  可以说如果控制了EIP寄存器的内容,就控制了进程——我们让EIP指向哪里,CPU就会去执行哪里的指令。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值