首页 > 其他分享 >关于栈

关于栈

时间:2024-10-26 18:44:13浏览次数:4  
标签:第一种 函数 ret 指令 关于 堆栈 执行

栈的图

img

一.什么是堆栈平衡(比较抽象)

img

含义就是 当函数在一步步执行的时候 一直到ret执行之前,堆栈栈顶的地址 一定要是call指令的下一个地址。

也就是说函数执行前一直到函数执行结束,函数里面的堆栈是要保持不变的。

如果堆栈变化了,那么,要在ret执行前将堆栈恢复成原来的样子。

第一种情况:push影响堆栈

比如 call ...

函数:mov ... (不影响堆栈平衡)

push..... (影响堆栈平衡)

ret.....

第二种情况:堆栈传递参数

img

......

img

堆栈如下:

img

因为PUSH 1 PUSH 2 是为了函数传参而准备的 ,当函数执行完成后 ,push1,push2 就都没用了,所以要把堆栈恢复到执行前的位置

两种解决办法 :函数外部处理和内部处理

第一种 :在函数外部添加ADD处理

img

第二种:在函数内部添加

img

ret 8 是把 ret 和第一种情况的add 两条指令整合成一条指令,在函数内部完成堆栈平衡

标签:第一种,函数,ret,指令,关于,堆栈,执行
From: https://www.cnblogs.com/r0xy/p/18504333

相关文章

  • mysql最基本使用命令(关于表)
    1.创建表createtableinfo(idintauto_increment,namechar(32)notnull,ageintnotnull,registerdatedatenotnull,primarykey(id));解析:auto_increment 属性用于创建自增字段notnull设置字段不能为空registerdate默认会记录创建记录时的当前日期和时间p......
  • 关于权限系统的一些思考
    开始权限系统无非是解决两个问题,Authentication(认证-你是谁)和Authorization(授权-你能干什么)。Authentication认证的问题,很好理解,就是根据用户的身份凭据,计算出这个用户的身份信息。而身份凭据,常见有Token和Session,还有PermanentToken(永久令牌)、Applicationpassword(应用......
  • 关于node中cookie的相关研究
    在请求头中加入set-cookie字段,客户端收到这个Set-Cookie的ֽ应后,在之后的请求时会在Cookie中上这个值。一般格式可以参考如下Set-Cookie:token=dywuh1g87;Expires=Wed,11Aug202407:28:00GMT;Secure;HttpOnly了解一下cookie解释一下常用的几个属性Expires这......
  • 关于期望dp的一些个人理解
    本人概率期望菜的一批,写一下博客来加深印象期望的基本定义首先期望本身是一个加权平均值,表示把每种情况按照概率发生后总和除以总的发生次数,这是定义法,然后合并一下就是:\[E=\sum_ip_i\timesval_i\]其中\(p_i\)表示事件\(i\)发生的概率,满足\(\sump_i=1\)关于期望......
  • 关于组合数学
    排列组合的一些公式及推导(非常详细易懂)错排公式\[D_1=0,D_2=1,D_n=(n-1)(D_{n-2}+D_{n-1})\]特殊性质:\[C^0_n=1\]\[C^m_n=C^{n-m}_n\]\[C^m_n=C^{m-1}_{n-1}+C^{m}_{n-1}\]其中第三个还和杨辉三角有关。另外,还有一些公式:从\(n\)个不同的元素取\(m\)个元素(可以......
  • 关于手动关闭多个el-popover的方法且不使用visible属性
    1.在el-popover使用ref<el-popoverref="motifyPopover":width="260"trigger="click"popper-class="modify-popover"/>2.声明motifyPopoverconstmotifyPopover=ref<InstanceType<typeofElPopover>>()......
  • 关于ubuntu系统升级遇到的问题:upgrades to the development release are only.......
    主要问题在于使用的是命令:sudodo-release-upgrade-d这将会寻找最新的版本进行安装,但是如果最新版本不稳定的话请求会受到拒绝,导致更新无法进行。具体区别如下:do-release-upgrade是Ubuntu系统用于升级到新版本的命令。当你运行这个命令时,系统会检查是否有新版本可用,并且会自......
  • 关于决策树的理解
    近期在项目中使用了规则树这一设计模式,感觉和决策链来说是有些区别的1.决策链是链型的,走的是链,流程都要完整的走一遍2.决策链用的一种嵌套,基于函数结尾重新调用next的函数直至结束但是规则树不一样规则树是基于类似二叉树的结构,有的通过有的不通过,并且它每层都用List<M......
  • 关于C语言指针类型的总结
    前言我个人将目前在C语言中所遇到的指针归类为8种,至于为何写第九点,是因为我个人认为第九点极容易与第五点混淆,故总结如下:1.普通指针普通指针即最常见的如:int*、char*等甚至于也可将一个数组如arr[5]的数组名arr看作是指针类型(因为指针本质上就是地址,而arr是该数......
  • 关于python代码PyInstaller介绍
    PyInstaller打包PyInstaller是一个用于将Python程序打包成独立可执行文件的工具,它使得用户无需安装Python环境即可运行你的程序。一、安装PyInstaller使用以下命令安装PyInstaller:pipinstallpyinstaller二、基本使用方法1.打包简单脚本假设我们有一个简单的......