esp寄存器与ebp寄存器介绍

2013年09月21日 03:04:15 伤心小鸵鸟 阅读数:974

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/westboy666/article/details/11858225

ESP

ESP(Extended stack pointer)是指针寄存器的一种(另一种为EBP)。用于堆栈指针。

ESP为栈指针,用于指向栈的栈顶(下一个压入栈的活动记录的顶部),而EBP为帧指针,指向当前活动记录的顶部。

栈指针与帧指针标识出了当前活动记录的位置。

当函数被调用的时候,执行如下操作:

⒈将帧指针压入栈中:push ebp

⒉用ebp保存当前栈指针:mov ebp,esp    ( 汇编代码最为常见的是ATT和intel汇编代码格式,操作数的循序相反,此处不知                                                                //是那种汇编代码格式?我经常是这样写:mov esp, ebp:它的意思是把当前的栈指针                                                               // 寄存器esp中的地址保存到帧指针寄存器ebp中。)

⒊使得栈指针自减,自减得到的内存应当能够被用来存储被调用函数的本地状态:sub 0CCh,esp

EBP

扩展基址指针寄存器(extended base pointer)  其内存放一个指针,该指针指向系统栈最上面一个栈帧的底部。

每个任务(进程)有一个栈(是不是可以这样理解一个程序中只有一个栈,每个函数对应一个栈中一段区域即帧),在这个进程中每个函数被调用时分别从这个栈占用一段区域,称为帧(frame)。%esp寄存器指向当前整个栈的栈顶,% ebp指向当前帧的帧底。上一级调用者的帧底被压入当前%ebp内容所指的地址,也就是当前帧的帧底位置保存了上一级调用者的%ebp指针值(帧底),而每个%ebp的前一个单元存放的就是当前函数的返回地址(它是由调用者在call指令中入的栈),保证是在上以及(应改为:一级)帧的最后一个空间单元(也就说“返回地址”的空间单元的位置在每个帧中都有,譬如说:main()函数的帧中也有“返回地址”空间单元,单元中的内容是call指令发生时自带的一个命令动作,这个动作就是把call指令的下一条指令的地址入栈,这个入栈动作就产生了“返回地址”空间单元,并把call指令下一条的指令地址也就立即存入了这个“返回地址”空间单元中,这个空间单元的作用是为将来main()调用另外的函数譬如:son()使用,也就是说为子函数使用。子函数如何使用呢?当son函数执行完后返回时就要返回到这个“返回地址”空间单元地址处。同样如果son函数中也有调用函数的语句,在反汇编语言中也会出现call指令,只要出现call指令就会有它的(指son()的)“返回地址”空间单元的存在)。这样就可以 根据当前%ebp的值回溯出整个任务的调用栈(调用过程)。

在函数栈帧中,一般包含以下几类重要信息。 (1)局部变量:为函数局部变量开辟的内存空间。  (2)栈帧状态值:保存前栈帧的顶部和底部(实际上只保存前栈帧的底部,前栈帧的顶部可以通过栈帧平衡计  算得到),用于在本栈被弹出后恢复出上一个栈帧。  (3)函数返回地址:保存当前函数调用前的“断点”信息,也就是函数调用前的指令位置,以便在函数返回  时能够恢复到函数被调用前的代码区中继续执行指令。

注:函数栈帧的大小并不固定,一般与其对应函数的局部变量多少有关。函数运行过程中,其栈帧大小也是 在不停变化的。  除了与栈相关的寄存器外,我们还需要记住另一个至关重要的寄存器。  EIP:指令寄存器(extended instruction pointer),其内存放着一个指针,该指针永远指向下一条等待  执行的指令地址。  可以说如果控制了EIP寄存器的内容,就控制了进程——我们让EIP指向哪里,CPU就会去执行哪里的指令。

esp寄存器与ebp寄存器介绍相关推荐

  1. 详细解析ESP寄存器与EBP寄存器

    详细解析ESP寄存器与EBP寄存器 最近在看汇编码,经常在程序的开头看到ESP和EBP寄存器的出现,由于本人基础知识的不牢靠,便上网查阅相关的资料,可惜网上的资料都不给力,都只是流于形式,没有好好的解 ...

  2. eax ...edi esp ebp寄存器简介(转)

    首先介绍我们会经常看到的一些寄存器: 4个数据寄存器(EAX.EBX.ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 4个数据寄存器(EAX.EBX.ECX ...

  3. ebp 函数堆栈esp_对于ESP、EBP寄存器的理解

    esp是栈指针,是cpu机制决定的,push.pop指令会自动调整esp的值: ebp只是存取某时刻的esp,这个时刻就是进入一个函数内后,cpu会将esp的值赋给ebp,此时就可以通过ebp对栈进行 ...

  4. 对于ESP、EBP寄存器的理解

    转载:https://mp.weixin.qq.com/s/Od9X-qnQ3WWyZiLIS4uPFg 函数调用是编程语言都有的概念,也许你听说过函数调用栈,但是大家都知道函数调用是如何完成的吗?我 ...

  5. 了解寄存器: EBP寄存器

    EBP寄存器 在长期的编程和使用中,在程序员习惯中已经默认的给每个寄存器赋上了特殊的含义,比如:EAX一般用来做返回值,ECX用于记数等等.在win32的环境下EBP寄存器用与存放在进入call以后的 ...

  6. esp寄存器 linux,Linux的中断和系统调用 esp、eip等寄存器

    一共三篇 中断一般分为三类: 1.由计算机硬件异常或故障引起的中断,称为内部异常中断: 2.由程序中执行了引起中断的指令而造成的中断,称为软中断(这也是和我们将要说明的系统调用相关的中断): 3.由外 ...

  7. 寄存器指令MIPS 寄存器介绍

    之前朋友几篇文章介绍了改寄存器指令的文章. 关联文章的地址 MIPS有32个通用寄存器($0-$31),各寄存器的功能及汇编程序中应用约定如下: 下表描述32个通用寄存器的别名和用处 REGISTER ...

  8. 51单片机特殊功能寄存器(SFR)介绍

    1.21个寄存器介绍         51系列单片机内部主要有四大功能模块,分别是I/O口模块.中断模块.定时器模块和串口通信模块(串行I/O口),如其结构和功能如下图: 图1 51单片机结构和功能图 ...

  9. 汇编中的通用寄存器、标志寄存器、段寄存器

    通用寄存器: 寄存器和变量差不多,目的都是用于保存一些即将操作的数据 EAX(accumulator) 寄存器:扩展累加寄存器(一般在乘/除中会被主动调用),也可以用于其他用途 ECX(Count) ...

最新文章

  1. matlab与excel数据连接数据库,如何实现matlab与excel数据同步 数据交互?
  2. 积分商城如何梳理思路和进行设计
  3. Android 开源库和项目 2
  4. SQL 性能优化梳理 —— 基本概念、创建时优化、查询时优化
  5. Linux gdb多进程、多线程调试
  6. 跟我一起学Redis之看完这篇比常人多会三种类型实战(又搞了几个小时)
  7. RuoYi-Vue 部署 Linux环境 若依前后端分离项目(jar包+nginx 单机版本)
  8. mysql left join 耗时_性能调优:mysql之left join
  9. 蓝桥杯省赛2013年Java组B组
  10. windows10环境下curl 安装与配置
  11. Ubuntu18.04安装GoldenDict词典【词库】
  12. 测试英语小软件,儿童学英语软件哪个好,亲测这四款很不错
  13. 使用MATLAB Mapping工具箱创建和编辑地图
  14. 计算机组成原理多级先行进位,计算机组成原理—最系统的算机基础知识.ppt
  15. 2.3 zio入门——一些常见的zio操作符
  16. ffmpeg批量m4a转mp3
  17. ccsa安学网小程序_CCSA安学网安全题库
  18. 洛谷 P3817 小A的糖果
  19. CIA3 NOI接站(tarjan缩环+Floyd传递闭包+可相交最小路径覆盖)
  20. 如何进阶Java之道?首先得知道层层递进的四种软件架构

热门文章

  1. 关于 ORA-22992
  2. 沪漂程序媛妹子的一天...
  3. 基于COLA架构创建运输微服务应用和DDD领域建模
  4. C++:实现量化Piecewise yield曲线测试实例
  5. 网络技巧|远程桌面连接不上的多种解决方案!
  6. 大数据hive篇_group seting解决业务问题
  7. 大端和小端的区别和判断
  8. 巴菲特的在University of Florida商学院的一次演讲
  9. 入门的Android架构师需要掌握哪些技能?
  10. 松鼠Ai辅助公校教育,开启智慧教育3.0