1. 程式人生 > >匯編中EBP寄存器和ESP寄存器的區別

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

其中 棧幀 ack 基址 技術 編譯 概念 poi 系統

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

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

閑話不表,言歸正傳。

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

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

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

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

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

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