1. 程式人生 > >new blog: www.burningcodes.net

new blog: www.burningcodes.net

下面是按呼叫約定__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 (注意CALL指令會把返回地址壓入堆疊)
;//進入函式內
{
push   ebp                                     ;保護先前EBP指標, EBP入棧, ESP-=4h, ESP = NN - 10h
mov    ebp, esp                             ;設定EBP指標指向棧頂 NN-10h
mov    eax, dword ptr  [ebp+0ch]  ;ebp+0ch為NN-4h,即引數2的位置 這裡可以看到了BP的作用了
mov    ebx, dword ptr  [ebp+08h]  ;ebp+08h為NN-8h,即引數1的位置 這裡可以看到了BP的作用了
ub    esp, 8                                  ;區域性變數所佔空間ESP-=8, ESP = NN-18h (棧底的地址大)