首页 > 其他分享 >堆栈图

堆栈图

时间:2024-11-17 20:29:02浏览次数:1  
标签:10 16 EDI 栈顶 40 ESP 堆栈

一、

1、找到画堆栈图从401168开始画,ctrl+g出来一个弹窗,在弹窗上输入要找到哪一行输入0x401168,他会直接跳转

2、在那一行f2下断点点开始运行让cpu运行到该行停止(画堆栈图要关注栈底EBP,栈顶ESP两个寄存器)

(1)调用前

(2)push2:栈顶减4,2被压入,为压栈

push2之后栈顶减了4,2被压入,为压栈

(3)push1

(4)call 0x0040100A,到相应位置,ESP减4,EIP变成跳转后的地址(这行指令相当于mov EIP,0x0040100A),而call指令的下一行地址(0040116C加上E8、99、FE、FF、FF五个字节变成00401171)被压入栈顶

!!call这里不能用f8来运行,只能用f7!!

 

按一下enter,回到要画堆栈图的那段程序

 

(5)push EBP:ESP减4,eip为运行到的地址,EBP的值被压到栈顶

 (6)mov ebp,esp:把ESP的值赋给ebp,只有ebp和eip变了

 

(7)sub ESP,40:ESP减了40(16进制),eip改变

 

减40(16进制)一个框为四个字节,40/4=10(16进制)转换为10进制的为16,所以往上数16格

 

(8)push EBX:ESP和栈顶减4,EBX中的值push到内存栈顶中

(9)push ESI

        push EDI

 

(10)LEA EDI,DWORD PTR SS:[ESP-40]:堆栈没有变化,将ESP-40后的值放到EDI中

 

 

(11)MOV ECX,10

          MOV EAX,CCCCCCCC

         REP STOS DWORD PTR ES:[EDI]

STOS是看D位为0加4为1减4,将CCCCCCCC赋给EAX在把他放到EDI指向的内存里然后加4(此处D位为0),再把CCCCCCCC赋给EAX再放到EDI加4后的地址中再加4,REP重复16次(10为16进制换为10进制为16次)

FEE4到FF24全部变成cc

 

 

标签:10,16,EDI,栈顶,40,ESP,堆栈
From: https://www.cnblogs.com/Lyjia-n/p/18500433

相关文章

  • 内存为什么要划分堆区、栈区?除了堆栈之外内存还有什么分区?
    最近在学习计算机底层相关的知识,看到内存这块内容时有个疑问,为什么要提出堆、栈的概念?当初是为了解决什么问题呢?除了堆栈外内存还存在其他分区吗?大学里学过微机原理涉及到一些相关内容但是到如今已经忘得差不多了。还是重新找资料记录一下学习过程吧!堆、栈的提出计算机在最开......
  • STM32,堆栈,RAM,FLASH
    收藏评论0刚拿到STM32时,你只编写一个死循环编译后,就会发现这么个程序已用了1600多的RAM,这要是在51单片机上,会心疼死了,这1600多的RAM跑哪儿去了,分析.map文件,你会发现是堆和栈占用的在startup_stm32f10x_md.s文件中,它的前面几行就有以下定义:这下明白了吧,STM32在启动......
  • 堆栈!言简意赅理解!
    前言        在我们的生活中,常常会遇到需要整理和管理物品的情况,比如在玩具箱中放置玩具。我们可以把最后放进箱子的玩具放在最上面,这样我们每次玩耍时,只需从最上面拿出玩具即可。这种管理方式称为“堆栈”。在计算机科学中,堆栈是一种重要的数据结构,能够以“后进先出......
  • 平衡堆栈
    理解并观测函数调用母函数做什么,子函数做什么cdecl调用约定#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>int__cdeclmethod(intx,inty){returnx+y;}intmain(){__asmmoveax,eax;//此处设置断点method(1,2);return0;}可以看出__cdecl就是C......
  • C语言中以下概念,以及这些概念之间的关系: 1.代码段 2.数据段 3.堆栈 4.全局变量 5.局部
    在C语言程序中,内存布局通常被分为几个主要的区域,每个区域都有不同的用途。以下是关于代码段、数据段、堆栈、全局变量、局部变量和函数的详细描述,以及它们之间的关系。1.代码段(TextSegment)代码段(也称为textsegment)是程序的只读部分,存储的是程序的指令(即代码)。这是可执行文......
  • 堆栈实现
    1、用数组实现堆栈#include<stdio.h>#include<stdlib.h>#defineMAXSTACK100/*定义堆栈的最大容量*/intstack[MAXSTACK];/*堆栈的数组说明*/inttop=-1;/*堆栈的顶端*//*判断是否为空堆栈*/intisEmpty(){if(top==-1)return1;elsereturn0;}/*将指......
  • STM32出现HardFault_Handler故障的原因1. **内存溢出或访问越界** 2. **堆栈溢出**
    STM32出现HardFault_Handler故障的原因STM32系统中,HardFault_Handler故障主要有两个方面的原因:内存溢出或访问越界堆栈溢出最近我遇到的问题是栈溢出,情况如下:staticchardata[10000];voidfun1(unsignedchar*buf){inti=0;for(i=0;i<5000;i++)......
  • 从汇编视角解析函数调用中的堆栈运作
    引言汇编语言是计算机硬件操作的最直接表达方式,通过汇编代码可以深入理解计算机底层的工作机制。本文将以一个简单的C语言代码为例,深入分析其对应的汇编代码中的堆栈变化,探讨计算机在执行过程中如何通过堆栈来进行函数调用、参数传递和结果返回。C语言代码与汇编代码概述我们......
  • 执行上下文和调用堆栈
    为顶级代码创建全局执行上下文,即不在任何fn内的代码。因此,首先执行fn之外的代码。fn-decln/exprsn的fn主体内的代码仅在调用时执行。执行上下文(ec)一段js执行的环境。存储一些要执行的代码的所有必要信息,例如局部变量、传递给fn的args。js代码始终在ec内运行......
  • 开源!Pod高负载自动打印JAVA线程堆栈
    开源!Pod高负载自动打印JAVA线程堆栈运维技术探讨  2024年08月29日17:39 广东 以下文章来源于SRE运维手记 ,作者亦零一SRE运维手记.一个在房地产、家居科技、游戏和电商行业摸爬滚打的运维老司机#sre#k8s#kubernetes#prometheus#devops01背景     在......