stdcall函式呼叫約定

2022-07-30 08:39:11 字數 498 閱讀 4004

被這個關鍵字修飾的函式,其引數都是從右向左通過堆疊傳遞的(__fastcall 的前面部分由ecx,edx傳), 函式呼叫在返回前要由被呼叫者清理堆疊。

這個關鍵字主要見於microsoft visual c、c++。gnu的c、c++是另外一種修飾方式:__attribute__((stdcall))

__stdcall是函式呼叫約定的一種,函式呼叫約定主要約束了兩件事:

1.引數傳遞順序

2.呼叫堆疊由誰(呼叫函式或被呼叫函式)清理

常見的函式呼叫約定:stdcall cdecl fastcall thiscall naked call

__stdcall表示

1.引數從右向左壓入堆疊

2.函式被呼叫者修改堆疊

3.函式名(在編譯器這個層次)自動加前導的下劃線,後面緊跟乙個@符號,其後緊跟著引數的尺寸

在win32應用程式裡,巨集apientry,winapi,都表示_stdcall,非常常見。

呼叫約定 stdcall

cdecl與 stdcall這兩種呼叫約定之間的主要差別在於由誰來執行對引數的清理工作。如果是 cdecl,那麼主調函式將負責執行清理工作,如果是 stdcall那被調函式將負責執行清理。通常,我們傾向於使用 stdcall,它能夠減少生成 的規模。因為不需要每次呼叫時,都在返回後對esp進行操作,...

stdcall函式呼叫約定詳解

對 stdcall 的理解 在c語言中,假設我們有這樣的乙個函式 int function int a,int b 呼叫時只要用result function 1,2 這樣的方式就可以使用這個函式。但是,當高階語言被編譯成計算機可以識別的機器碼時,有乙個問題就凸現出來 在cpu中,計算機沒有辦法知道...

約定stdcall 函式呼叫的三種約定,你都清楚嗎

cdecl stdcall fastcall是c c 裡中經常見到的三種函式呼叫方式。其中 cdecl是c c 預設的呼叫方式,stdcall是windows api函式的呼叫方式,只不過我們在標頭檔案裡檢視這些api的宣告的時候是用了winapi的巨集進行代替了,而這個巨集其實就是 stdcall...