對暫存器ESP和EBP的一些理解

2021-07-04 19:16:05 字數 692 閱讀 6138

ebp是當前函式的訪問指標,即儲存或者讀取數時的指標基位址;esp就是當前函式的棧頂指標。每一次發生函式的呼叫(主函式呼叫子函式)時,在被呼叫函式初始時,都會把當前函式(主函式)的ebp壓棧,以便從子函式返回到主函式時可以獲取ebp。

下面是按呼叫約定__stdcall 呼叫函式test(int p1,int p2)的彙編**

假設執行函式前堆疊指標esp為0xaaaaaaa ;ebp為0xaaaaab0

push   p2    ;引數2入棧, esp -= 4h , esp = 0xaaaaaaa - 4h =    0xaaaaaa6

push   p1    ;引數1入棧, esp -= 4h , esp = 0xaaaaaaa - 8h =    0xaaaaaa2

call test    ;壓入返回位址 esp -= 4h, esp = 

0xaaaaaaa

- 0ch  = 

0xaaaaa9d,注意:這裡是test函式的

返回位址

,即在**段中的位址(偏移)。

;//進入函式內

看完彙編後,再看ebp和esp的定義,哦,豁然開朗,

原來esp

就是一直指向棧頂的指標,而

ebp只是訪問某時刻的棧頂指標,以方便對棧的操作,如獲取函式引數、區域性變數等。

一般情況下,ebp+x引用函式的引數,ebp-x引用區域性變數

對暫存器ESP和EBP的一些理解

ps ebp是當前函式的訪問指標,即儲存或者讀取數時的指標基位址 esp就是當前函式的棧頂指標。每一次發生函式的呼叫 主函式呼叫子函式 時,在被呼叫函式初始時,都會把當前函式 主函式 的ebp壓棧,以便從子函式返回到主函式時可以獲取ebp。下面是按呼叫約定 stdcall 呼叫函式test int ...

對暫存器ESP和EBP的一些理解

前言 對於經常接觸逆向或者彙編的肯定都對push ebp,mov ebp,esp這兩句印象深刻,由於他們經常出現在過程的開頭,這也是找段首的乙個依據,但是,過程為啥總要以這兩句開頭,這其中又有什麼道理呢?參考自 以下是按呼叫約定 stdcall 呼叫函式test int p1,int p2 的彙編 ...

關於暫存器ESP和EBP的一些理解

一直對暫存器esp和ebp的概念總是有些混淆,檢視定義 esp是棧頂指標,ebp是訪問堆疊指標。還是不能很透徹理解。之後借於一段彙編 總算是對兩者有個比較清晰的理解。下面是按呼叫約定 stdcall 呼叫函式test int p1,int p2 的彙編 假設執行函式前堆疊指標esp為nn push ...