进入函数
按调用约定传递参数
- 调用约定
- 约定传参方向
- 约定传参介质
- 约定参数销毁的负责方
- 约定返回值位置
- 调用约定
- _cdecl c约定
- 从右往左传参
- 使用栈空间保存参数
- 由调用方负责销毁参数
- 返回值通常在处理器中
- _stdcall 跨平台约定
- 从右往左传参,左数前两个参数使用处理器传递,其他由
- 使用栈空间保存参数
- 由调用方负责销毁参数
- 返回值通常在处理器中
- _fastcall 快速约定
- 从右往左传参
- 使用栈空间保存参数
- 由被调方负责销毁参数
- 返回值通常在处理器中
- ?_call C++特有约定
- _cdecl c约定
- 保存函数返回的地址
- 流程转移到被调方的函数首地址
- 保存调用方的栈底
- 以当前栈顶做为被调方的栈顶
- 为局部变量分配空间(抬高栈顶)进栈低地址,出栈高地址
- 保留处理存器环境
- 局部变量初始为0xcc(调试版/ZI/Od)
- 执行被调方的函数体
出函数
- 恢复处理器环境
- 释放局部变量
- 恢复调用方的栈底
- 弹出当前栈顶的值作为返回的代码流程地址
- _stdcall 约定的时候,这个时候同时也销毁掉参数所占用的空间
- _cdecl 约定会在这个时候销毁掉参数所占的空间