约定 入栈顺序 函数类型
_cdecl 右→左 母函数
_fastcall 右→左 子函数
_stdcall 右→左 子函数
如果不指定调用约定的话,默认为_stdcall函数调用函数顺序
①参数从右到左依次入栈。
②返回地址入栈:将当前代码下一条指令入栈,以确保返回后能够继续执行余下指令。
③代码区跳转:CPU将当前代码跳转到函数区域。
④栈帧调整。
如:push3;函数参数从右到左依次入栈push2
push 1
call 函数地址;
向当前栈压入当前所在地址;跳转
push ebp;保存旧栈底部
movebp,esp;设置新栈底部
sub ebp,XXX;设置栈顶
_cdecl 右→左 母函数
_fastcall 右→左 子函数
_stdcall 右→左 子函数
如果不指定调用约定的话,默认为_stdcall函数调用函数顺序
①参数从右到左依次入栈。
②返回地址入栈:将当前代码下一条指令入栈,以确保返回后能够继续执行余下指令。
③代码区跳转:CPU将当前代码跳转到函数区域。
④栈帧调整。
如:push3;函数参数从右到左依次入栈push2
push 1
call 函数地址;
向当前栈压入当前所在地址;跳转
push ebp;保存旧栈底部
movebp,esp;设置新栈底部
sub ebp,XXX;设置栈顶