stdcall调用约定

stdcall调用约定

stdcall调用约定 #

■ 在调用函数时,参数将按照从右向左的顺序依次压入栈中,例如下面的 function函数,其参数入栈顺序依次是second、first:

  int function(int first, int second)

■ 函数的栈平衡操作(参数出栈操作)是由被调用函数完成的。通过代码retn x可在函数返回时从栈中弹出x字节的数据。当CPU执行RET指令时,处理器会自动将栈指针寄存器ESP向上移动x个字节,来模拟栈的弹出操作。例如上面的function函数,当function函数返回时,它会执行该指令把参数 second和first从栈中弹出来,再到返回地址处继续执行。

■ 在函数的编译过程中,编译器会在函数名前用下划线修饰,其后用符号@修饰,并加上入栈的字节数,因此函数function最终会被编译为_function@8。

From #

一个64位操作系统的设计与实现

cdecl调用约定