说到EBP就不能忽略了ESP。ESP是一个指针,始终执行堆栈的栈顶。而EBP就是那个所谓的堆栈了。

先看几个例子吧。

push ebp        ; 把ebp,堆栈的0地址压入堆栈
mov  ebp,esp      ; 把栈顶指针存入当前堆栈esp,也就是堆栈的esp位置。
push ecx        ; 存入 ecx 参数
push 00000002     ; 存入 2 参数
push 00000001      ; 存入 1 参数局
lea  ecx,[ebp-04]   ;  把堆栈借(用负数)一个位置,4字节长。赋值给ecx,这个值是多半是上层传递下来的。
call 00401020      ; 调用指定地址的函数。
mov  esp,ebp
pop  ebp
ret
....00401020处代码(理解成一个函数):
push ebp        ; 进入函数代码了,然后把存入进来的0地址ebp,保存到堆栈。
mov  ebp,esp      ; esp保存到ebp里面,保存到
push ecx        ; 存入 ecx到堆栈中。
mov  [ebp-04],ecx   ; 堆栈中借一个位置来存放ecx.
mov  eax,[ebp+08]   ; 从堆栈中取值, 上面一个函数,存入的参数参数2
add  eax,[ebp+0C]     ; 从堆栈中取值,上面一个函数存入的参数1
mov  esp,ebp          ; 把 ebp首地址的值写回到 esp中。
pop  ebp        ; 释放 ebp中的0地址到ebp中。
ret  0008         ; 释放掉 可能是释放掉一个call地址和其中在本次函数中push的一个值。这样解释比较合理。(就是使用ebp开辟的一个空间值)

  上面代码主要就是一个,传入参数调用函数进行一个1+2的计算。

先解释一下上面代码:

可以通过这个认识到几点。

1、如果使用了push ebp    mov  ebp,esp 操作进行初始化。

  那么从堆栈中取值都是ebp+XXX值。。

  而往堆栈里面,放入值都是[EBP-XXX],寄存器。这样的操作。

2、ebp应该就是针对当前函数,作用域独立存在的一个堆栈的首地址了。

  而ESP就是,执行当前栈顶的一个指针,这个作用域是跨越了所有函数调用的。

。。。。个人理解,没有配图,请大家参考其他文章相应理解,我仅仅作为个人理解记录。

想再想想,大学时候,鄙视别人看的书,现在自己也拾起来看了。唉

转载于:https://www.cnblogs.com/Supperlitt/p/6394532.html

汇编之EBP的认识。相关推荐

  1. 逆向之汇编(EBP寻址)

    1.寄存器传参和堆栈传参 (1)寄存器 (2)堆栈传参 ESP寻址 2.ESP寻址的缺点 (前提:用堆栈传参) 在堆栈中存些值,ESP(栈顶指针)就会发生变化,于是下面的esp寻址就要更新. 举例: ...

  2. 32位汇编ebp、ebp-4、ebp+4、ebp+8等含义

    我们知道,当调用了一个函数后,底层汇编大多数会使用ebp寻址的方式去查找参数,关于ebp与esp寻址可以看我这篇文章<ebp寻址>. 下面简单说总结一下ebp几个偏移的含义: ebp:  ...

  3. 如何在内存中执行二进制代码之win平台

    大家可能会很好奇,我们的任意exe程序,不就是在内存中执行的二进制机器码吗? 不,今天我要说的是,我们如何把实现指定功能的一段二进制机器码,放到我们的程序中,然后在需要的时候,直接调用它. 当然,这段 ...

  4. 汇编码和机器码相互转化

    由于要在PE文件中修改代码,本质上是在改十六进制的机器码(shellcode为经过处理的机器码),而我们阅读的是汇编码,汇编码和机器码相互转化可以更好的修改程序.本来想用pwn tool或OllyDb ...

  5. C++ 反汇编/栈帧

    文章目录 查看 C++ ASM 在线 C++ 反汇编 g++ -S VS 调试时断点查看反汇编信息 VS 在项目属性的文件输出源码+汇编 Debug 下的:[ProjectName].asm Rele ...

  6. 通过一段汇编,加深对寄存器ESP和EBP的理解

    一直对寄存器ESP和EBP的概念总是有些混淆,查看定义ESP是栈顶指针,EBP是存取堆栈指针.还是不能很透彻理解.之后借于一段汇编代码,总算是对两者有个比较清晰的理解. 下面是按调用约定__stdca ...

  7. 汇编-栈帧-寄存器esp, ebp

    转载 原文地址 栈帧%ebp,%esp详解 分类专栏: 汇编 首先应该明白,栈是从高地址向低地址延伸的.每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息.寄存器ebp指向 ...

  8. C和汇编混合编程--------函数调用后ebp、esp值问题

    今天老师又给了一个程序,让我们分析,记录一下分析过程 程序: #include "stdio.h" #include "string.h"char *shell ...

  9. x86汇编指令:EIP、ESP、EBP

    堆栈是一种简单的数据结构,是一种只允许在其一端进行插入或删除的线性表. 允许插入或删除操作的一端称为栈顶,另一端称为栈底,对堆栈的插入和删除操作被称入栈和出栈. 有一组CPU指令可以实现对进程的内存实 ...

最新文章

  1. wcf 返回图片_WCF实现上传图片功能
  2. shell__常用命令__awk
  3. C++ | C++实现高精度加法——数组加法(附源代码)
  4. 数据可视化--pyecharts绘图
  5. Android NDK开发之 与NEON相关的库
  6. MyEclipse 8.5配置Tomcat 7.0
  7. Atitit 为什么oracle这类大型数据库比mysql的性能机制目录1. 分区机制差别 11.1. Join算
  8. 如何验证扇形面积公式?
  9. Android调用QQ加群代码
  10. github出现HTTP request failed
  11. ECharts-中国省市地图
  12. 【分享一个动漫拼图项目】
  13. python从零开始到精通_「Python 入门学习指南」0基础小白助你从入门到精通!
  14. sql语句,sql文件加注释
  15. php中关于文件操作的面试题,php面试题及答案
  16. 八种必备户外装备包你踏遍地球
  17. #常用传感器讲解十二--倾斜开关传感器(KY-020)
  18. 支付路由技术概述以及简单的建设说明
  19. JavaScript向页面输出内容的四种方法
  20. 用计算机写请柬,结婚请柬怎么写

热门文章

  1. 蓝桥寒假训练1-2013年第四届蓝桥杯省赛
  2. java毕业设计高校学习社区mybatis+源码+调试部署+系统+数据库+lw
  3. SpringBoot+Mybatis-plus+aop实现一个类似JPA的@Audited注解(字段审计)功能
  4. 微信聊天记录没有备份可以恢复吗?吐血整理分享
  5. Clickhouse外部储存表引擎(HDFS、MySQL、JDBC、Kafka、File)
  6. 【未完成】7-12 任务调度的合理性 (25 分)
  7. 局域网访问文件提示服务器内存不足,“服务器存储空间不足”的问题
  8. 趣谈C语言(基础篇)
  9. matplotlib画图(一)——线条图
  10. Ipad恢复按键音、锁定音和截屏音