函数入栈顺序

约定 入栈顺序 函数类型
_cdecl 右→左 母函数
_fastcall 右→左 子函数
_stdcall 右→左 子函数

如果不指定调用约定的话,默认为_stdcall函数调用函数顺序

  1. 参数从右到左依次入栈。
  2. 返回地址入栈:将当前代码下一条指令入栈,以确保返回后能够继续执行余下指令。
  3. 代码区跳转:CPU将当前代码跳转到函数区域。
  4. 栈帧调整。

如:

push3;函数参数从右到左依次入栈push2
push  1
call  函数地址;
向当前栈压入当前所在地址;跳转
push  ebp;保存旧栈底部
movebp,esp;设置新栈底部
sub  ebp,XXX;设置栈顶