匯編中EBP寄存器和ESP寄存器的區別


炎炎夏日,在實驗室里熱成狗了,所以准備學習點匯編讓心涼一下。。。

目前看的書是劉穎東編著的《揭秘數據解密的關鍵技術》。

閑話不表,言歸正傳。

EBP和ESP都是匯編中關於指針的寄存器。但是定義不同:

(1)ESP:棧指針寄存器(extended stack pointer),其內存放着一個指針,該指針永遠指向系統棧最上面一個棧幀的棧頂。
(2)EBP:基址指針寄存器(extended base pointer),其內存放着一個指針,該指針永遠指向系統棧最上面一個棧幀的底部。

也就是說ESP是棧頂指針,EBP是取堆棧指針。

其中上面提到了一個棧幀的概念,百度百科的解釋為“過程活動記錄,是編譯器用來實現函數調用的一種數據結構”。也可以說是對一次函數調用時記錄相關信息的單元。而棧則存儲了多個棧幀,也就是說存儲了多個函數調用的記錄單元。

其中函數調用的完整過程為:函數調用前,EBP的值入棧,ESP存儲的是棧頂地址。然后ESP的值傳給EBP,函數被調用,此時ESP一直指向棧頂。函數調用結束后,EBP將值傳回ESP,ESP又指向了棧頂地址。


免責聲明!

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



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