最近在分析一个进程崩溃的严重问题,其中有些过程分析需要对ebp, esp 有清晰的理解,对于ebp 和esp 相信大家都很熟悉了,但是为了使本文自成体系,我还是解释一下。

ebp--栈底指针

esp--栈顶指针

如图所示,简化后的代码调用过程如下:

void Layer02()

{

int b = 2;

}

void Layer01()

{

int a = 1;

Layer02();

}

那么函数执行过程中ebp和esp是如何变化的呢?如下是反汇编后的代码:

void Layer02()

{

00413700 push        ebp

00413701 mov         ebp,esp

00413703 sub         esp,0CCh

00413709 push        ebx

0041370A push        esi

0041370B push        edi

0041370C lea         edi,[ebp-0CCh]

00413712 mov         ecx,33h

00413717 mov         eax,0CCCCCCCCh

0041371C rep stos    dword ptr es:[edi]

int b = 2;

0041371E mov         dword ptr [b],2

}

00413725 pop         edi

00413726 pop         esi

00413727 pop         ebx

00413728 mov         esp,ebp

0041372A pop         ebp

0041372B ret

我们看到函数调用开始执行如下的两行代码:

00413700 push        ebp

00413701 mov         ebp,esp

返回前执行如下代码:

00413728 mov         esp,ebp

0041372A pop         ebp

0041372B ret

那么这几行代码到底是什么意思呢?首先,如图上所示:

开始两行代码的意思是先将ebp1压栈,然后将现在的栈顶esp1作为函数调用时的栈底,所以会执行如下语句:

00413701 mov         ebp,esp

那么,返回前的几条语句又是什么意思呢?

我想大家已经猜到了,当函数调用执行结束,我们要执行相反的过程:

00413728 mov         esp,ebp

还原栈顶指针

0041372A pop         ebp

还原栈底指针

0041372B ret

返回到函数调用前的指令继续执行。待续…

详解C++代码反汇编后的堆栈寄存器EBP和ESP相关推荐

  1. C代码反汇编后的堆栈寄存器EBP和ESP

    最近在分析一个进程崩溃的严重问题,其中有些过程分析需要对ebp, esp 有清晰的理解,对于ebp 和esp 相信大家都很熟悉了,但是为了使本文自成体系,我还是解释一下. ebp--栈底指针 esp- ...

  2. java集合框架的结构_集合框架(Collections Framework)详解及代码示例

    简介 集合和数组的区别: 数组存储基础数据类型,且每一个数组都只能存储一种数据类型的数据,空间不可变. 集合存储对象,一个集合中可以存储多种类型的对象.空间可变. 严格地说,集合是存储对象的引用,每个 ...

  3. 图像质量损失函数SSIM Loss的原理详解和代码具体实现

    本文转自微信公众号SIGAI 文章PDF见: http://www.tensorinfinity.com/paper_164.html http://www.360doc.com/content/19 ...

  4. 数学建模——支持向量机模型详解Python代码

    数学建模--支持向量机模型详解Python代码 from numpy import * import random import matplotlib.pyplot as plt import num ...

  5. 数学建模_随机森林分类模型详解Python代码

    数学建模_随机森林分类模型详解Python代码 随机森林需要调整的参数有: (1) 决策树的个数 (2) 特征属性的个数 (3) 递归次数(即决策树的深度)''' from numpy import ...

  6. TOPSIS(逼近理想解)算法原理详解与代码实现

    写在前面: 个人理解:针对存在多项指标,多个方案的方案评价分析方法,也就是根据已存在的一份数据,判断数据中各个方案的优劣.中心思想是首先确定各项指标的最优理想值(正理想值)和最劣理想值(负理想解),所 ...

  7. 逆透视变换详解 及 代码实现(二)

    根据 逆透视变换详解 及 代码实现(一)的原理 下面我用车上拍摄的车道图像,采用逆透视变换得到的图像,给出代码前我们先看下处理结果. 首先是原始图像: 下图为逆透视变换图像: 下面说具体的实现吧!! ...

  8. 逆透视变换详解 及 代码实现(一)

    逆透视变换详解 及 代码实现(一) 中主要是原理的说明: 一.世界坐标轴和摄像机坐标轴 从下图中可以看到,世界坐标为(X,Y,Z)  相机坐标为(Xc,Yc,Zc) 而世界坐标变换到相机坐标存在一个旋 ...

  9. C++ - 类模板(class template) 详解 及 代码

    类模板(class template) 详解 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/16906827 类模板(c ...

最新文章

  1. 怎样获取网站的域名_搭建一个网站,通常的6大步骤你知道吗?
  2. python学习第三天-Linux入门之二
  3. Matlab传递函数的几种生成方式
  4. 使用SQL语句获取SQL Server数据库登录用户权限
  5. Alain 菜单权限控制
  6. vivo6.0系统怎么样不用root激活XPOSED框架的方法
  7. linux shell中怎样批量修改文件名为 文件夹_文件名
  8. new运算符做了什么
  9. zabbix监控之概念和安装
  10. nodejs gm 中文 linux,nodejs gm drawText使用(中文、字体、大小及颜色)
  11. win7用计算机名无法访问局域网,Win7局域网不能访问的解决方法
  12. Windows系统重装Linux系统
  13. gmap 支持python吗_在gmap中使用bokeh的python为for circle添加工具提示
  14. 关于readyState
  15. 分享一款开源堡垒机-jumpserver
  16. 谢烟客---------Linux之Aho Weinberger Kernighan
  17. 【XSS跨站脚本】反射型xss(非持久型)
  18. 动态图册用HTML怎么制作,imgplay gif动图制作如何使用?imgplay图文使用教程
  19. Base64 SHA1 MD5
  20. PPT的一些技巧和工具

热门文章

  1. 收藏一下mybatis全局参数配置
  2. Microsoft Accelerator for Windows Azure给我们的启示,由 TechStars 撰写
  3. [导入] 堆和栈的区别
  4. 使用Java程序输出1~100之间 7的倍数的个数及总和,并打印输出
  5. 【数据结构与算法】之深入解析“序列化和反序列化二叉搜索树”的求解思路与算法示例
  6. LeetCode Algorithm 507. 完美数
  7. Vue+G2:Please specify the container for the chart! + Cannot read property ‘appendChild‘ of null
  8. Django 模型 —— 模型介绍
  9. HTML5拖放API
  10. 13.2.6 会话跟踪技术