假設有這樣一段**
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為調整堆疊的位元組數...