详解C++代码反汇编后的堆栈寄存器EBP和ESP
最近在分析一个进程崩溃的严重问题,其中有些过程分析需要对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相关推荐
- C代码反汇编后的堆栈寄存器EBP和ESP
最近在分析一个进程崩溃的严重问题,其中有些过程分析需要对ebp, esp 有清晰的理解,对于ebp 和esp 相信大家都很熟悉了,但是为了使本文自成体系,我还是解释一下. ebp--栈底指针 esp- ...
- java集合框架的结构_集合框架(Collections Framework)详解及代码示例
简介 集合和数组的区别: 数组存储基础数据类型,且每一个数组都只能存储一种数据类型的数据,空间不可变. 集合存储对象,一个集合中可以存储多种类型的对象.空间可变. 严格地说,集合是存储对象的引用,每个 ...
- 图像质量损失函数SSIM Loss的原理详解和代码具体实现
本文转自微信公众号SIGAI 文章PDF见: http://www.tensorinfinity.com/paper_164.html http://www.360doc.com/content/19 ...
- 数学建模——支持向量机模型详解Python代码
数学建模--支持向量机模型详解Python代码 from numpy import * import random import matplotlib.pyplot as plt import num ...
- 数学建模_随机森林分类模型详解Python代码
数学建模_随机森林分类模型详解Python代码 随机森林需要调整的参数有: (1) 决策树的个数 (2) 特征属性的个数 (3) 递归次数(即决策树的深度)''' from numpy import ...
- TOPSIS(逼近理想解)算法原理详解与代码实现
写在前面: 个人理解:针对存在多项指标,多个方案的方案评价分析方法,也就是根据已存在的一份数据,判断数据中各个方案的优劣.中心思想是首先确定各项指标的最优理想值(正理想值)和最劣理想值(负理想解),所 ...
- 逆透视变换详解 及 代码实现(二)
根据 逆透视变换详解 及 代码实现(一)的原理 下面我用车上拍摄的车道图像,采用逆透视变换得到的图像,给出代码前我们先看下处理结果. 首先是原始图像: 下图为逆透视变换图像: 下面说具体的实现吧!! ...
- 逆透视变换详解 及 代码实现(一)
逆透视变换详解 及 代码实现(一) 中主要是原理的说明: 一.世界坐标轴和摄像机坐标轴 从下图中可以看到,世界坐标为(X,Y,Z) 相机坐标为(Xc,Yc,Zc) 而世界坐标变换到相机坐标存在一个旋 ...
- C++ - 类模板(class template) 详解 及 代码
类模板(class template) 详解 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/16906827 类模板(c ...
最新文章
- 怎样获取网站的域名_搭建一个网站,通常的6大步骤你知道吗?
- python学习第三天-Linux入门之二
- Matlab传递函数的几种生成方式
- 使用SQL语句获取SQL Server数据库登录用户权限
- Alain 菜单权限控制
- vivo6.0系统怎么样不用root激活XPOSED框架的方法
- linux shell中怎样批量修改文件名为 文件夹_文件名
- new运算符做了什么
- zabbix监控之概念和安装
- nodejs gm 中文 linux,nodejs gm drawText使用(中文、字体、大小及颜色)
- win7用计算机名无法访问局域网,Win7局域网不能访问的解决方法
- Windows系统重装Linux系统
- gmap 支持python吗_在gmap中使用bokeh的python为for circle添加工具提示
- 关于readyState
- 分享一款开源堡垒机-jumpserver
- 谢烟客---------Linux之Aho Weinberger Kernighan
- 【XSS跨站脚本】反射型xss(非持久型)
- 动态图册用HTML怎么制作,imgplay gif动图制作如何使用?imgplay图文使用教程
- Base64 SHA1 MD5
- PPT的一些技巧和工具
热门文章
- 收藏一下mybatis全局参数配置
- Microsoft Accelerator for Windows Azure给我们的启示,由 TechStars 撰写
- [导入] 堆和栈的区别
- 使用Java程序输出1~100之间 7的倍数的个数及总和,并打印输出
- 【数据结构与算法】之深入解析“序列化和反序列化二叉搜索树”的求解思路与算法示例
- LeetCode Algorithm 507. 完美数
- Vue+G2:Please specify the container for the chart! + Cannot read property ‘appendChild‘ of null
- Django 模型 —— 模型介绍
- HTML5拖放API
- 13.2.6 会话跟踪技术