一直對暫存器esp和ebp的概念總是有些混淆,檢視定義
esp是棧頂指標,
ebp是訪問堆疊指標。還是不能很透徹理解。之後借於一段彙編**,總算是對兩者有個比較清晰的理解。
下面是按呼叫約定__stdcall 呼叫函式test(int p1,int p2)的彙編**
假設執行函式前堆疊指標esp為nn
push p2 ;引數2入棧, esp -= 4h , esp = nn - 4h
push p1 ;引數1入棧, esp -= 4h , esp = nn - 8h
call test ;壓入返回位址 esp -= 4h, esp = nn - 0ch
;//進入函式內
看完彙編後,再看ebp和esp的定義,哦,豁然開朗, 原來
esp就是一直指向棧頂的指標,而
ebp只是訪問某時刻的棧頂指標,以方便對棧的操作,如獲取函式引數、區域性變數等。
對暫存器ESP和EBP的一些理解
ps ebp是當前函式的訪問指標,即儲存或者讀取數時的指標基位址 esp就是當前函式的棧頂指標。每一次發生函式的呼叫 主函式呼叫子函式 時,在被呼叫函式初始時,都會把當前函式 主函式 的ebp壓棧,以便從子函式返回到主函式時可以獲取ebp。下面是按呼叫約定 stdcall 呼叫函式test int ...
對暫存器ESP和EBP的一些理解
ebp是當前函式的訪問指標,即儲存或者讀取數時的指標基位址 esp就是當前函式的棧頂指標。每一次發生函式的呼叫 主函式呼叫子函式 時,在被呼叫函式初始時,都會把當前函式 主函式 的ebp壓棧,以便從子函式返回到主函式時可以獲取ebp。下面是按呼叫約定 stdcall 呼叫函式test int p1,...
對暫存器ESP和EBP的一些理解
前言 對於經常接觸逆向或者彙編的肯定都對push ebp,mov ebp,esp這兩句印象深刻,由於他們經常出現在過程的開頭,這也是找段首的乙個依據,但是,過程為啥總要以這兩句開頭,這其中又有什麼道理呢?參考自 以下是按呼叫約定 stdcall 呼叫函式test int p1,int p2 的彙編 ...