呼叫規則主要是指函式被呼叫的方式,常見的有_stdcall,_fastcall,_pascal等規則。不同的規則在引數壓入堆疊的順序是不同的,同時在有呼叫者清理壓入堆疊的引數還是由被呼叫者清理壓入堆疊的引數上也是不同的。一般來說,如果你沒有顯式的說明呼叫規則的話,編譯器會統一按照_cdecl來處理(
windows)。
引數傳遞方式
清棧方式
注意事項
應用場合
__stdcall
通過堆疊傳遞(由左至右)
由被呼叫者清棧(在函式返回之前清棧)
變參函式無法使用這種方式,由於引數不定,無法在編譯時確定
ret清棧的大小
windows api
__cdecl
通過堆疊傳遞(由左至右)
由呼叫者清棧(在函式返回之後清棧)
在windows
大多預設呼叫
__cdcel
__fastcall
前兩個引數由暫存器
ecx和edx來傳遞傳遞,其餘引數還是通過堆疊傳遞(從右到左
被呼叫者清理棧
1.不同編譯器編譯的程式規定的暫存器不同。在
intel 386平台上,使用ecx和edx暫存器。
2.使用
__fastcall方式無法用作跨編譯器的介面
由於使用了暫存器傳值,這種呼叫方式很快
函式呼叫規則
2018年4月12日星期四 函式呼叫規則 函式呼叫過程 可在vc上逐步除錯檢視暫存器,記憶體的變化情況 1.一些暫存器的用法 ebp eip esi push pop 影響esp的值 eip 1.放的是當前執行 當前指令 的位址 2.call,ret 從當前函式返回 這倆指令將會影響eip的值 br...
c基礎 函式呼叫規則詳解
在引數傳遞中,有兩個重要的問題必須要明確說明 1.當引數個數多於乙個時,按照什麼順序把引數壓入堆疊 2.函式呼叫後,由誰來把堆疊恢復原狀。在高階語言中,就是通過函式的呼叫方式來說明這兩個問題的。常見的呼叫方式有 stdcall cdecl fastcall thiscall thiscall nak...
C,C ,VC 函式呼叫規則
以下內容 於網路 1 stdcall是pascal程式的預設呼叫方式,通常用於win32 api中,函式採用從右到左的壓棧方式,自己在退出時清空堆疊。vc將函式編譯後會在函式名前面加上下劃線字首,在函式名後加上 和引數的位元組數。2 c呼叫約定 即用 cdecl關鍵字說明 按從右至左的順序壓引數入棧...