函数调用约定:是对函数调用时参数如何传递的一种约定。调用函数先把参数压入栈然后再传递给函数。栈就是定义在进程中的一段内存空间。向下(低地址方向)扩展。且其大小被记录在PE头中。也就是说,进程运行时确定占内存的大小。
函数执行完成后,栈中的参数如何处理? 不处理。
函数执行完毕后,ESP值如何变化? 恢复到调用之前。
调用约定分三种 cdecl/stdcall/fastcall
cdecl:调用者负责处理栈
VS2015 C++ 控制台程序 默认是cdecl
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
DWORD Add(DWORD dwNumberFirst ,DWORD dwNumberSecond) {
return dwNumberFirst + dwNumberSecond;
}
int main(){
DWORD dwSum = Add(1 ,2);
cout&n

函数调用约定规定了参数传递方式,包括cdecl、stdcall和fastcall。在cdecl中,调用者清理栈;stdcall中,被调用者清理;fastcall则使用寄存器快速传递前两个参数,提升执行效率。Win32API使用stdcall以增强与其他语言的兼容性。
最低0.47元/天 解锁文章
235

被折叠的 条评论
为什么被折叠?



