個人對 stdcall和 cdcel的認識

2021-09-26 06:14:29 字數 586 閱讀 4685

假設有這樣一段**

voidf(

int x)

//...f(

5);

如果用_cdcel修飾

f:

push ebp

mov ebp,esp

;...

mov esp,ebp

pop ebp

ret;...

push 5 ;其實不是直接push 常數

call f

add esp,4

;...

如果用_stdcall修飾

f@4:

push ebp

mov ebp,esp

;...

mov esp,ebp

pop ebp

pop eax

add esp,4

push eax

ret;...

push 5 ;其實不是直接push 常數

call f

;...

當然這只是方便記憶,實際結果可能不是這樣的,但最終效果應當沒錯

我對 stdcall和 cdecl的一些了解

stdcall,被這個關鍵字修飾的函式,其引數都是從右向左通過堆疊傳遞的 fastcall的前面部分由ecx edx傳 函式呼叫在返回前要由被呼叫者清理堆疊。實質 函式呼叫約定。注 ecx是計數器,edx是用來存放整數除法產生 的餘數。cdecl是c和c 程式的預設呼叫方式,每乙個呼叫它的函式在返回...

cdecl和 stdcall的區別

1 cdecl和 stdcall的區別 1 cdecl呼叫按照從右往左的順序將引數入站,由呼叫者把引數彈出棧 stdcall呼叫按照從右往左的順序將引數入站 由被呼叫者把引數彈出棧 2 stdcall 和 cdecl對函式名最終生成符號的方式不同 stdcall呼叫約定在輸出函式名前加下劃線,後面為...

關於函式呼叫方式 stdcall和

關於函式呼叫方式 stdcall和 cdecl詳解 程式設計客棧stdcall cdecl 兩者的相同點與不同點 例項 stdcall stdcall的全稱是standard call。是c 的標準呼叫方式。函式引數的入棧順序為從右到左入棧。函式返回時使用retn x指令,其中x為調整堆疊的位元組數...