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

mac2024-10-16  2

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 类成员方法的标准调用约定

最新回复(0)