所謂的呼叫方式是指:
在呼叫乙個函式時,約定的傳遞引數方式和平衡堆疊方式,例如:
有乙個函式,它有兩個引數
xyz(first,second)
當我們使用stdcall呼叫方式時,也就是windows呼叫api的常見方式(又幾個函式例外),它的呼叫方式如下:
******x1 push second
******x2 push first
******x3 call xyz
引數傳遞從右到左
堆疊的平衡也是有被呼叫函式負責,
如果是c呼叫方式如下:
******x1 push second
******x2 push first
******x3 call xyz
******x4 add esp 08
引數傳遞從右到左
堆疊的平衡要有呼叫函式負責,
如果是pascal呼叫方式如下:
******x1 push first
******x2 push second
******x3 call xyz
引數傳遞從左到右
堆疊的平衡有被呼叫函式負責。
函式呼叫方式
cdecl 是c declaration的縮寫,表示c語言預設的函式呼叫方法 所有引數從右到左依次入棧,這些引數由呼叫者清除,稱為手動清棧。被呼叫函式不需要求呼叫者傳遞多少引數,呼叫者傳遞過多或者過少的引數,甚至完全不同的引數都不會產生編譯階段的錯誤。stdcall 是standard call的縮...
函式呼叫方式
現代的程式語言的函式竟然有那麼多的呼叫方式。這些東西要完全理解還得通過彙編 才好理解。他們各自有自己的特點 其實這些呼叫方式的差別在主要在一下幾個方面 1.引數處理方式 傳遞順序,訪問 利用盞還是暫存器 2.函式的結尾處理方式 善後處理 如 棧的恢復由誰恢復?函式內恢復 還是呼叫後恢復 以下是理論 ...
函式呼叫方式
在高階語言中,就是通過函式的呼叫方式來說明這兩個問題的。常見的呼叫方式有 stdcall cdecl fastcall thiscall thiscall naked call 下面就分別介紹這幾種呼叫方式 1.stdcall stdcall呼叫方式又被稱為pascal呼叫方式。在microsoft...