EBP寄存器

在长期的编程和使用中,在程序员习惯中已经默认的给每个寄存器赋上了特殊的含义,比如:EAX一般用来做返回值,ECX用于记数等等。在win32的环境下EBP寄存器用与存放在进入call以后的ESP的值,便于退出的时候回复ESP的值,达到堆栈平衡的目的。 (ESP用于访问栈顶)

应用以前说过的一段话:

原程序的OEP,通常是一开始以 Push EBP 和MOV Ebp,Esp这两句开始的,不用我多说大家也知道这两句的意思是以EBP代替ESP,作为访问堆栈的指针。

为什么要这样呢?为什么几乎每个程序都是的开头能?因为如果我们写过C等函数的时候就应该清楚,程序的开始是以一个主函数main()为开始的,而函数在访问的过程中最重要的事情就是要确保堆栈的平衡,而在win32的环境下保持平衡的办法是这样的:

1. 让EBP保存ESP的值;

PUSH   EBP

MOV   EBP,   ESP

2. 在结束的时候调用

mov  esp,  ebp

pop   ebp

retn

或者是

leave

retn

两个形式是一个意思。 这样做的好处是不用考虑ESP等于多少,PUSH了多少次,要POP多少次了,因为我们知道EBP里面放的是开始时候的ESP值。

http://blog.csdn.net/lijie_sh/archive/2009/09/07/4527605.aspx

32位CPU有2个32位通用寄存器EBP和ESP。其低16位对应先前CPU中的SBP和SP,对低16位数据的存取,不影响高16位的数据。

寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。 指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。

它们主要用于访问堆栈内的存储单元,并且规定:

BP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据;

SP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。

只要在[…]中使用寄存器BP,而指令中没有显性地给出段地址,段地址就默认在SS中,比如:

MOV      AX ,       [B]  含义 AX = (SS) * 16 + BP;

BP: 是和堆栈指针SP联合使用的,作为SP校准使用的,只有在寻找堆栈里的数据和使用个别的寻址方式时候才能用到比如说,堆栈中压入了很多数据或者地址,你肯定想通过SP来访问这些数据或者地址,但SP是要指向栈顶的,是不能随便乱改的,这时候你就需要使用BP,把SP的值传递给BP,通过BP来寻找堆栈里数据或者地址.

了解寄存器: EBP寄存器相关推荐

  1. esp寄存器与ebp寄存器介绍

    esp寄存器与ebp寄存器介绍 2013年09月21日 03:04:15 伤心小鸵鸟 阅读数:974 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/ ...

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

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

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

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

  4. 【Android 逆向】代码调试器开发 ( ptrace 函数 | 读寄存器 | 写寄存器 )

    文章目录 一.读寄存器 二.写寄存器 一.读寄存器 调用 ptrace(PTRACE_GETREGS, m_nPid, NULL, regs) 读取进程运行时的寄存器 ; 读取寄存器时 , 进程必须处 ...

  5. 反汇编最基础知识(段寄存器和寄存器的说明)

    段寄存器 CS(Code Segment):代码段寄存器 DS(Data Segment):数据段寄存器 SS(Stack Segment):堆栈段寄存器 ES(Extra Segment):附加段寄 ...

  6. 时序分析寄存器到寄存器

    对于FPGA的时序分析主要包括管脚和内部寄存器的时序分析,目前这边刚看了一点时序分析的资料,总结在这里,希望能够对大家也带来帮助. 时序分析目前主要针对同步时序逻辑的静态时序分析(STA),主要涉及的 ...

  7. 【嵌入式开发】ARM 关闭中断 ( CPRS 中断控制位 | 中断使能寄存器 | 中断屏蔽寄存器 | 关闭中断 | 汇编代码编写 )

    一. 中断控制 ( 基于 S3C6410 开发板 ) 1. 关闭中断的两个步骤 (1) 关闭中断步骤 2. CPRS 寄存器中的中断控制位 (1) CPRS 寄存器简介 (2) CPRS 寄存器 中断 ...

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

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

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

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

最新文章

  1. SpringCloud Alibaba微服务实战(六) - 路由网关(Gateway)
  2. mongodb之备份
  3. 深信服上网行为-域新组建模式单点登录不成功排错
  4. 解决 WIn7 启动时“你有等待写入光盘的文件”
  5. Java必须了解的“递归”与“IO流”!!!
  6. win2003服务器通过ipsec做防火墙的配置方法
  7. SpringBoot_web开发-thymeleaf语法
  8. 2021年中国K12在线辅导行业总结和趋势洞察
  9. 前端:后端,我要分手,你不适合我
  10. Servlet ---- cookie session
  11. 移动通信matlab实现,现代移动通信中的调制技术研究及Matlab实现
  12. SQL优化面试题及答案
  13. Apache Tomcat 安装配置图文详细教程
  14. 数学笔记——导数5(指数函数和对数函数的导数)
  15. 不定式和动名词复合结构是什么
  16. 大学计算机基础网络配置实验报告答案,2008大学计算机基础实验报告参考答案...
  17. 请19级的童鞋们接收一下
  18. ArcGIS制作经纬格网地图
  19. Gearman的安装和使用
  20. 7 款国产开源项目带你理解神秘的中间件

热门文章

  1. mne-python 安装大法
  2. 经典组合 堡垒主机构建防火墙系统
  3. 等级保护与解读《网络安全法》
  4. 绑定校园卡服务器没有响应,校园卡服务部服务器暂行管理规定
  5. 代码文档生成工具Doxygen教程及实例
  6. 使用if/else方式的三个数找最大
  7. 四足鼎立,快递业的变局前夜
  8. 来自CCNet的一种创新:语义分割中的十字交叉视觉注意力
  9. 两台设备连接在同一Wi-Fi不能通信问题解决
  10. 电信重组能给我们老百姓带来什么好处?