热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

堆栈平衡

本文主要介绍关于堆栈的知识点,对【堆栈平衡】和【堆栈平衡模式】有兴趣的朋友可以看下由【Sculptor-L】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的【】相关技术问题。堆栈平衡模式含义

本文主要介绍关于堆栈的知识点,对【堆栈平衡】和【堆栈平衡模式】有兴趣的朋友可以看下由【Sculptor-L】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的【】相关技术问题。

堆栈平衡模式

含义 如果要返回父程序,则当我们在堆栈中进行操作时,一定要保证在RET这条指令执行之前,ESP指向的是我们压入堆栈的地址,也就是堆栈压入的值中途 可能发生变化,但是在函数执行完得和刚开始的保持一致。如果通过堆栈传入参数了,那么在函数执行完毕后,要平衡参数导致的堆栈变化。 外平栈与内平栈

外平栈:call 指令后add esp,8
内平栈:调用的函数最后ret 8

ESP(栈顶)寻址 EBP(栈底)寻址

EBP的地址相对固定,不会随着函数执行时对堆栈的操作而改变,可以通过EBP加一个值或减一个值来,ESP的值时不会改变

堆栈平衡

在push ebp的时候这时的堆栈断点位置就是ESP里的地址,堆栈断点在什么地址,ESP的值就为什么地址

ESP的值时不会改变,所以有了mov ebp,esp这一步为了把esp的地址存放起来,中途调用函数的时候esp的值会发生改变,为了堆栈平衡,所以最后要把esp地址放回去,让调用函数前esp和ebp的值保持一致。

本文《堆栈平衡》版权归Sculptor-L所有,引用堆栈平衡需遵循CC 4.0 BY-SA版权协议。


推荐阅读
author-avatar
jfgkj6454_478
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有