Windows中常用的函数调用规范
參考了《匯編語言 基于x86處理器》
轉載請注明出處
如果有錯誤的地方請指正,謝謝。
Windows環境中有32位調用規范和64位調用規范。
32位調用規范
Microsoft 32位編程環境下的32位調用規范有:_fastcall、_cdecl、_stdcall。
_fastcall
_fastcall使用寄存器加上堆棧傳參,如果參數兩個或兩個以下那么使用ECX或者EDX寄存器傳遞,參數有兩個以上則放入堆棧(從右向左入棧)。調用完畢后需要手動清棧(調用者清棧)。
優點是速度快,因為使用寄存器傳參。
_cdecl
又稱為C調用規范,采用堆棧傳參,主要用于C/C++語言默認的調用規范。參數從右向左入棧,調用完畢后手動清棧(調用者清棧)。
優點是:采用_cdecl調用方式的過程(函數/方法/子程序)可以傳遞多個參數,然后根據不同的參數個數發生變化。典型的例子就是 printf("%d,%d,%d",a,b,c) 函數。
缺點是:需要調用者清棧,如果參數太多可能忘記清理從而破壞堆棧。
_stdcall
常用于Win32API,采用堆棧傳參,參數從右向左入棧,調用完畢后自動清棧(被調清棧),
優點是:因為是自動清棧,不會因為參數過多而忘記清理堆棧。
缺點是:因為自動清棧是根據參數個數來實現的,所以傳遞的參數個數是確定的,無法像_cdecl那樣靈活。
64位調用規范
Microsoft 64位編程環境下的64位調用規范簡稱x64調用規范
和32位編程環境中的調用規范不一樣,在64位編程環境中C/C++/WindowsAPI函數統一使用x64調用規范,該調用規范的如下:
總結
以上是生活随笔為你收集整理的Windows中常用的函数调用规范的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三层架构与四大天王之——查
- 下一篇: java信息管理系统总结_java实现科