堆棧平衡


 

一.什么是堆棧平衡

 

含義就是 當函數在一步步執行的時候 一直到ret執行之前,堆棧棧頂的地址 一定要是call指令的下一個地址。

也就是說函數執行前一直到函數執行結束,函數里面的堆棧是要保持不變的。

如果堆棧變化了,那么,要在ret執行前將堆棧恢復成原來的樣子。

第一種情況:push影響堆棧

比如 call  ...

函數:mov ...                         (不影響堆棧平衡)

     push.....                      (影響堆棧平衡)

          ret.....             

 

第二種情況:堆棧傳遞參數

 

......

 

 

 堆棧如下:

 

 因為PUSH 1 PUSH 2 是為了函數傳參而准備的 ,當函數執行完成后 ,push1,push2 就都沒用了,所以要把堆棧恢復到執行前的位置

兩種解決辦法 :函數外部處理和內部處理

第一種 :在函數外部添加ADD處理

 

       第二種:在函數內部添加

 

 ret 8 是把 ret 和第一種情況的add 兩條指令整合成一條指令,在函數內部完成堆棧平衡。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM