C/C++ 调用规则

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

平栈清理参数

对调用栈的操作步骤

  1. 参数传递

三种调用约定

  1. cdecl C调用约定:

从右往左传参参数通过栈传递调用方(caller)负责平参支持类似printf的不定参

  1. stdcall (标准调用约定其实是微软定义的调用约定)

从右往左传参参数通过栈传递被调方(callee)负责平栈不支持不定参

  1. fastcall (只有微软自己编译器可用的调用约定

从右往左传参左边两个参数通过寄存器传递其余参数通过栈传递被调方(callee)负责平栈不支持不定参

  1. 在栈顶保存返回地址

  1. 保存调用方的栈信息栈底地址

  1. 更新栈位置到被调方的栈底处更新SIP栈寄存器的地址

  1. 在栈内开辟局部变量的空间

A. 编译选项有/Zi+/Od(debug模式时则用0xcc填充局部变量空间

  1. 保存寄存器环境

  1. 执行函数体

  1. 恢复寄存器环境

  1. 释放局部变量空间

  1. 恢复栈信息到调用方更新SIP栈寄存器的地址

  1. 取出调用方的返回地址

  1. cdecl切换到返回地址后由调用方平栈

  1. stdcall fastcall平栈然后切换到返回地址继续执行

内存分布图:

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: c++