堆栈平衡
一.什么是堆栈平衡
含义就是 当函数在一步步执行的时候 一直到ret执行之前,堆栈栈顶的地址 一定要是call指令的下一个地址。
也就是说函数执行前一直到函数执行结束,函数里面的堆栈是要保持不变的。
如果堆栈变化了,那么,要在ret执行前将堆栈恢复成原来的样子。
第一种情况:push影响堆栈
比如 call ...
函数:mov ... (不影响堆栈平衡)
push..... (影响堆栈平衡)
ret.....
第二种情况:堆栈传递参数
......
堆栈如下:
因为PUSH 1 PUSH 2 是为了函数传参而准备的 ,当函数执行完成后 ,push1,push2 就都没用了,所以要把堆栈恢复到执行前的位置
两种解决办法 :函数外部处理和内部处理
第一种 :在函数外部添加ADD处理
第二种:在函数内部添加
ret 8 是把 ret 和第一种情况的add 两条指令整合成一条指令,在函数内部完成堆栈平衡。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?