函數調用約定
函數調用約定:是對函數調用時如何傳遞參數的一種約定。
- 函數執行完成後,棧中的參數如何處理?——不用管
- 函數執行完畢後,ESP值如何變化?——ESP要恢復到函數調用之前,使得可引用的棧大小不會縮減;
cdecl
- 主要在C語言中使用
- 調用方負責處理棧
- 可以向被調用函數傳遞長度可變的參數
#include "stdio.h"
int add(int a, int b){
return(a+b);
}
int main(int argc, char* argv[]){
return add(1,2);
}
stdcall
- 常用於Win32 API
- 由被調用者處理棧
#include "stdio.h"
int _stdcall add(int a, int b){
return(a+b);
}
int main(int argc, char* argv[]){
return add(1,2);
}
fastcall
- 與stdcall類似
- 通常使用寄存器(非棧內存)傳遞部分參數(前兩個)【ECX、EDX】
參考文獻
《逆行工程核心原理》