C++开栈、清栈、调用约定

1.开栈:

1.压入实参(给形参做初始化,自右向左入栈);
2.压入下一行指令地址(回退后能沿着调用点继续执行);
3.(push ebp)压入调用方栈底地址(能回退到调用方栈帧);
4.被调用方开辟内存并做cccccccc初始化;

2.清栈:

1.被调用方预留的栈帧清理;
2.pop ebp (栈帧回退到调用方);
3.pop pc(代码沿着调用方接着执行);
4.清理形参; 形参由调用方开辟内存,调用方清理。
小于等于四个字节都由一个寄存器带出(eax)
大于四个且小于八个字节由两个寄存器带出(eax+edx)
大于八个字节由临时量tmp带出(在调用方栈帧);

3.调用约定:

_cdcall
C标准调用约定
_stdcall
windows标准调用约定
_fastcall
快速调用约定
_thiscall
类成员方法的标准调用约定

在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Gunanhuai/article/details/102846263
今日推荐