炎炎夏日,在實驗室里熱成狗了,所以准備學習點匯編讓心涼一下。。。
目前看的書是劉穎東編著的《揭秘數據解密的關鍵技術》。
閑話不表,言歸正傳。
EBP和ESP都是匯編中關於指針的寄存器。但是定義不同:
(1)ESP:棧指針寄存器(extended stack pointer),其內存放着一個指針,該指針永遠指向系統棧最上面一個棧幀的棧頂。
(2)EBP:基址指針寄存器(extended base pointer),其內存放着一個指針,該指針永遠指向系統棧最上面一個棧幀的底部。
也就是說ESP是棧頂指針,EBP是取堆棧指針。
其中上面提到了一個棧幀的概念,百度百科的解釋為“過程活動記錄,是編譯器用來實現函數調用的一種數據結構”。也可以說是對一次函數調用時記錄相關信息的單元。而棧則存儲了多個棧幀,也就是說存儲了多個函數調用的記錄單元。
其中函數調用的完整過程為:函數調用前,EBP的值入棧,ESP存儲的是棧頂地址。然后ESP的值傳給EBP,函數被調用,此時ESP一直指向棧頂。函數調用結束后,EBP將值傳回ESP,ESP又指向了棧頂地址。