堆栈图

CALL和JMP的区别

CALL会把调用处的下一个指令的地址压栈,而JMP不会

函数的调用过程

//funciton add(a,b){return a+b}?push第一个参数入栈push第二个参数入栈?call调用的返回地址压栈?跳转准备?push ebp  //保存当前栈底?mov ebp,esp //提升栈底,此时ebp所在的内存单元保存了原来的栈底地址?sub esp,40h //建立缓冲区?push ebx //保存当前执行环境?push esi //保存当前执行环境?push edi //保存当前执行环境???//填充缓冲区,cc 表示int3中断,当程序访问缓冲区的时候就会停下?lea edi,dword ptr ss:[ebp-40h] //区ebp-40的地址保存到edi?mov ecx,10h?mov eax,cccccccch?rep stos dword ptr es:[edi] //把eax的值循环复制到edi指向的内存地址,执行10h次,每次执行后根据flag寄存器的D位来进行+4/-4???//程序功能mov eax,dword ptr ss:[ebp+8] //把函数调用的最后一个参数保存到eaxadd eax,dword ptr ss:[ebp+c] //把第一个参数累加到eax??//恢复现场pop edipop esipop ebxmov esp,ebppop ebp?retn //相当于pop eip?//此时栈里还有 第一个参数和第二个参数在栈顶,需要把它们干掉,以保证调用前和调用后的栈顶指针一致。add esp,8 //外平栈???

原文地址:https://www.cnblogs.com/toolmanc/p/12199289.html

时间: 2024-11-08 21:17:32

堆栈图的相关文章

Echarts-echart和springMVC实现堆栈图

效果图: 通过工具栏切换成折线图: 1.部署好springMVCproject 2.*****在lib中增加ECharts-2.2.4.jar   下载地址:http://git.oschina.net/free/ECharts 3.由于要用到fastJson所以还要导入其所需的jar包fastjson-1.2.5-sources.jar 和fastjson-1.2.5.jar 4.springMVC的服务层的代码:EchartsT.java package com.service; impor

【 D3.js 高级系列 — 3.0 】 堆栈图

堆栈图布局(Stack Layout)能够计算二维数组每一数据层的基线,以方便将各数据层叠加起来.本文讲解堆栈图的制作方法. 先说说什么是堆栈图. 例如,有如下情况: 某公司,销售三种产品:个人电脑.智能手机.软件. 2005年,三种产品的利润分别为3000.2000.1100万. 2006年,三种产品的利润分别为1300.4000.1700万. 计算可得,2005年总利润为6100万,2006年为7000万. 如果要将2005年的利润用柱形表示,那么应该画三个矩形,三个矩形堆叠在一起.这时候就

Echarts-echart和springMVC实现堆栈图(读取JSON文件数据)

这篇echarts的堆栈图主要是根据这篇D3.js堆栈图(http://blog.csdn.net/u013147600/article/details/46770415 )实现的. 效果图: 1.JSON文件数据: { "name":"某市2005-1010年利润情况", "product": [ { "name": "PC" , "sales": [ { "year&quo

【逆向知识】堆栈图-汇编中的函数

push ebp ; 提升堆栈 mov ebp,esp sub esp,0CCh ------------------------------------------ push ebx ; 保留现场,函数在执行的时候会用到一些寄存器,但这些寄存器中 push esi ; 值很可能会被程序用到,所以要先存储到内存中 push edi push ecx ------------------------------------------ lea edi,[ebp-0CCh] ; 向分配的空间填充数据

C/C++堆栈指引

[转载]C/C++堆栈指引 转载:http://www.cnblogs.com/Binhua-Liu/archive/2010/08/24/1803095.html 前言 我们经常会讨论这样的问题:什么时候数据存储在堆栈(Stack)中,什么时候数据存储在堆(Heap)中.我们知道,局部变量是存储在堆栈中的:debug时,查看堆栈可以知道函数的调用顺序:函数调用时传递参数,事实上是把参数压入堆栈,听起来,堆栈象一个大杂烩.那么,堆栈(Stack)到底是如何工作的呢? 本文将详解C/C++堆栈的工

VS2015--在 Visual Studio 中调试时映射调用堆栈上的方法

https://msdn.microsoft.com/zh-cn/library/dn194476.aspx 在 Visual Studio 中调试时映射调用堆栈上的方法 创建代码图,以便在调试时对调用堆栈进行可视化跟踪.你可以在图中进行标注以跟踪代码执行的操作,以便专注于查找 Bug. 生成调用堆栈图 1 开始调试.(键盘:"F5") 2 在你的应用进入中断模式或你单步执行某一函数之后,请选择"代码图".(键盘:Ctrl + Shift + `) 当前的调用堆栈在

java中的堆栈

数据存放在哪里? 栈中存放的数据:基本类型数据.对象引用的句柄(指向对象的地址) 堆中存放的数据:创建的对象 静态方法区存放的数据:字面量 例如: String str = new String( "hello" ); 上面的语句中变量str放在栈上,用new创建出来的字符串对象放在堆上,而"hello"这个字面量放在静态区. 数据类型的分类 基本类型 基本类型是比对象更小的单位,不是new出来的,有byte .chart .short .int .long .fl

AndroidManifest详解之Application(有图更好懂)

能够包含的标签: <activity> <activity-alias> <service> <receiver> <provider> <uses-library> 常用的属性: android:process 默认情况下,Android为每个应用程序创建一个单独的进程,所有组件运行在该进程中,这个默认进程的名字通常与该应用程序的包名相同.比如 <manifest xmlns:android="http://sche

浅谈C/C++堆栈指引——C/C++堆栈

C/C++堆栈指引 Binhua Liu 前言 我们经常会讨论这样的问题:什么时候数据存储在飞鸽传书堆栈(Stack)中,什么时候数据存储在堆(Heap)中.我们知道,局部变量是存储在堆栈中的:debug时,查看堆栈可以知道函数的调用顺序:函数调用时传递参数,事实上是把参数压入堆栈,听起来,堆栈象一个大杂烩.那么,堆栈(Stack)到底是如何工作的呢? 本文将详解C/C++堆栈的工作机制.阅读时请注意以下几点: 1)本文讨论的语言是 Visual C/C++,由于高级语言的堆栈工作机制大致相同,