函數調用約定

函數調用約定

函數調用約定:是對函數調用時如何傳遞參數的一種約定。

  • 函數執行完成後,棧中的參數如何處理?——不用管
  • 函數執行完畢後,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】
參考文獻

《逆行工程核心原理》

發佈了94 篇原創文章 · 獲贊 21 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章