Ebp-4 局部變量開(kāi)始
Ebp +0 原始ebp寄存器值
Ebp+4 返回值
Ebp+8形參1
Ebp+12 形參2
Ebp+16 形參3
局部變量1--->Ebp-4 局部變量開(kāi)始
原始ebp寄存器值--->Ebp +0 原始ebp寄存器值
返回地址-->Ebp+4 返回值
形參1-->Ebp+8
形參2-->Ebp+12 形參2
打開(kāi)棧幀:
Push Ebp;
Mov ebp,esp;
Sub esp,40(拉開(kāi)棧)
幾種尋址方式:
- 立即數(shù)尋址: mov eax,1;
- 寄存器尋址:mov eax,ebx;
- 存儲(chǔ)器尋址:mov eax,[XXX]:(分為以下幾種:)
1.寄存器直接尋址:mov eax,[1000];
2.寄存器間接尋址:mov eax,[ebx];
3.寄存器相對(duì)尋址:mov eax,[ebx+5]
4. 寄存器基址變址尋址:mov eax,[ebx+edi];
5.寄存器相對(duì)基址變址尋址:mov eax,[ebx+edi+5];
調(diào)用約定 | 關(guān)鍵字 | 參數(shù)入棧順序 | 回收堆棧 |
---|---|---|---|
C-調(diào)用約定 | __Cdecl | 從右至左 | 調(diào)用者負(fù)責(zé) |
標(biāo)準(zhǔn)調(diào)用規(guī)范 | __stdcall | 從右至左 | 被調(diào)用者負(fù)責(zé) |
快速調(diào)用規(guī)范 | __fastcall | 從右至左 (使用寄存器傳參) | 被調(diào)用者負(fù)責(zé) |
Pascal調(diào)用規(guī)范 | pascal | 從左至右 | 被調(diào)用者負(fù)責(zé) |
_cdecl:
_stdcall:
_fastcall:
_thiscall:
棧中局部變量布局:
函數(shù)舉例:bar(z,y):