堆栈平衡

堆栈平衡

一.什么是堆栈平衡

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

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

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

第一种情况:push影响堆栈

比如 call ...

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

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

ret.....

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

......

堆栈如下:

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

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

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

第二种:在函数内部添加

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

相关文章

LOL情侣英雄大全, 有很多你们都不知道, 宝石那一对祝福他们吧!

bet体育365官网正规平台 01-16

渡人的心態、技巧及方法

假的365不让提款怎么办 11-11

没发票不保修?苹果售后保修详细解读

bet体育365官网正规平台 08-27

植物大战僵尸杂交版冒险模式第六十关怎么过

365体育ios 08-06