C/C++ 调用规则
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
平栈清理参数
对调用栈的操作步骤
参数传递
三种调用约定
cdecl C调用约定:
从右往左传参参数通过栈传递调用方(caller)负责平参支持类似printf的不定参
stdcall (标准调用约定其实是微软定义的调用约定)
从右往左传参参数通过栈传递被调方(callee)负责平栈不支持不定参
fastcall (只有微软自己编译器可用的调用约定
从右往左传参左边两个参数通过寄存器传递其余参数通过栈传递被调方(callee)负责平栈不支持不定参
在栈顶保存返回地址
保存调用方的栈信息栈底地址
更新栈位置到被调方的栈底处更新SIP栈寄存器的地址
在栈内开辟局部变量的空间
A. 编译选项有/Zi+/Od(debug模式时则用0xcc填充局部变量空间
保存寄存器环境
执行函数体
恢复寄存器环境
释放局部变量空间
恢复栈信息到调用方更新SIP栈寄存器的地址
取出调用方的返回地址
cdecl切换到返回地址后由调用方平栈
stdcall fastcall平栈然后切换到返回地址继续执行
内存分布图: