首页 > 其他分享 >堆栈图

堆栈图

时间:2024-06-15 15:24:19浏览次数:17  
标签:16 edi esp push 地址 ebp 堆栈

存储参数

1.push

先执行push 2,在push1。栈从上往下(1,2是参数)

call—〉返回一个地址,并将下一个指令地址存入栈中

401171—〉函数执行完的返回地址(简称返回地址)

保留栈底

2.push ebp

将ebp里的值放入了栈里面

提升栈顶

3.mov ebp,esp

将esp里的值放入ebp中

4.Sub esp,40

esp-四零,(四零是16进制,一格有四个除以四,等于一零,在换算成十进制就是16个,栈的格数就往上数16个)

esp:12fee4

保存现场

5.Push ebx

push ebx—〉将ebx里面的值存入栈中,esp+4

清除垃圾数据

6.Lea edi,Dword ptr ss:[ ebp 40]

取[ebp- 40]的地址编号放入edi里面

edi变为0012f114(栈没有发生变化

7.清数据

将eax里面的字符串放入edi指向的内存地址中,edi加(减)四。一共重复16次,每重复一次,ecx- 1

(rep重复)

计算(正式工作。。。

8.计算

[ebp+8]地址里面的值放入了eax中

栈平衡

9.恢复现场

执行后

10.

11

retn——pop eip

Eip会变成401171

12.外平栈

 

add  esp,8

 

标签:16,edi,esp,push,地址,ebp,堆栈
From: https://www.cnblogs.com/yuli10952/p/18249246

相关文章

  • 再探堆栈欺骗之动态欺骗
    本文首发先知社区:https://xz.aliyun.com/t/14542在上篇文章https://xz.aliyun.com/t/14487中,我们讨论了静态堆栈欺骗,那是关于hooksleep,在睡眠期间改变堆栈行为的欺骗,这篇文章我们来一起讨论一下主动欺骗,允许任意函数发起时的堆栈欺骗。相关的基础知识在上篇文章已经介绍,并......
  • 三探堆栈欺骗之Custom Call Stacks
    本文首发阿里云先知社区:https://xz.aliyun.com/t/14592背景知识在之前的文章中,我们介绍了静态欺骗和动态欺骗堆栈,今天我们来一起学习一下另一种技术,它被它的作者称为CustomCallStacks,即自定义堆栈调用。关于堆栈欺骗的背景我们就不再说了,这里我们补充一下回调函数和windows......
  • 初探堆栈欺骗之静态欺骗
    本文首发先知社区:https://xz.aliyun.com/t/14487首先介绍一下堆栈欺骗的场景,当我们用一个基本的shellcodeloader加载cs的shellcode,在没有对堆栈做任何事情时,我们的堆栈是不干净的,我们去看一下堆栈时会发现有很多没有被解析的地址在其中,这显然是不正常的,因此av/edr会重点......
  • c函数堆栈
    使用反汇编分析代码1.无参数无返回值voidfun1(){}intmain(intargc,char*argv[]){ fun1(); return0;}反汇编分析2.有参无返回值代码voidfun2(intx,inty){ x+y;}intmain(intargc,char*argv[]){ fun2(1,2); return0;}返汇编分析3.无参......
  • js的闭包原理——通过引擎的堆栈解析
    有段代码如下:functioncreateCounter(){leti=0;functionincrement(){i++;}functiongetValue(){returni;}return{increment,getValue}}constcounter=createCounter();在这段代码中,运用了函数的3个特点:在函......
  • 堆栈性能分析
    在Golang中,对象的分配和存储是由运行时系统进行管理的。对象可以被分配在堆上或栈上,具体取决于对象的大小和生命周期。堆上分配:对象的分配在堆上发生时,可以使用 new 或 make 关键字来创建。new 关键字用于创建各种类型的对象,并返回一个指向分配对象的指针。make 关......
  • 基于双向堆栈的二叉树双向迭代算法
    前言之前一直在研究avl树的迭代算法。我参考了C++标准库map的实现,发现他们在树节点上使用了parent指针+一个状态标志位的形式,去实现动态迭代。但是我不想用parent指针,因为觉得会增加调整指针的时间还有浪费存储空间。于是,在我的不屑努力下,终于,找到了一种基于堆栈实现的双向迭代......
  • 在Linux中,什么是LAMP和LNMP堆栈?
    LAMP和LNMP都是用于搭建动态网站的常用软件堆栈,它们分别代表不同的组件组合,旨在提供高效、稳定的Web服务环境。下面是这两个堆栈的详细介绍:1.LAMP堆栈LAMP是一个开源软件堆栈的首字母缩写,代表Linux(操作系统)、Apache(Web服务器)、MySQL(数据库管理系统)和PHP(服务器......
  • L3-002 特殊堆栈
    维护两个栈。一个正常放数据,另一个是排序好的数据。#include<bits/stdc++.h>usingnamespacestd;intmain(){ vector<int>data; vector<int>mdata; vector<int>::iteratorit; intn; cin>>n; while(n--){strings; cin>>s; if(s==......
  • dump文件分析OOM及线程堆栈
    OutOfMemoryError(OOM)如果项目报错:OutOfMemoryError:Javaheapspace,说明堆内存空间(HeapSpace)中没有足够的空间来分配对象了。一旦发生OOM,系统有可能不可用,或者频繁重启。属于非常严重的问题。OOM的解决方法一:比较简单粗暴的一种做法,是增大堆内存空间。在项目启动时,......