码迷,mamicode.com
首页 > 其他好文 > 详细

堆栈平衡

时间:2020-07-06 21:34:46      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:手动   定义   通过   结束   一个   过程   指令   堆栈   执行   

堆栈不平衡将导致程序非常容易出错

堆栈平衡:

(1)如果要返回父程序,则当我们在堆栈中进行堆栈操作的时候,一定要保证子啊RET这条指令之前,ESP指向的时我们压入栈中的地址。

  即:一个用CALL调用的函数在RET之前要把堆栈恢复成调用函数之前的样子。 (函数进来的时候堆栈什么样,出去的时候堆栈还是什么样子)

(2)如果通过堆栈传递参数了,那么在函数执行完毕后,要平衡参数导致的堆栈变化;

  即:当我们定义一个加法函数,使用的是堆栈传参,首先需要向堆栈中PUSH若干个参数,然后再使用CALL调用函数。当函数执行完毕时,堆栈指针指向的是PUSH最后一个参数时的地址,而已经被使用的PUSH的参数占的内存却无法被使用了,造成了浪费。

  解决方法:① CALL执行结束以后,手动将ESP的值增加;②直接再函数执行过程中将ESP增加对应的值。

 

堆栈平衡

标签:手动   定义   通过   结束   一个   过程   指令   堆栈   执行   

原文地址:https://www.cnblogs.com/codexlx/p/13257621.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!