Function call Convention
cdecl
cdecl是C语言中使用的调用方式,调用者负责处理栈
|
在调用完add() 函数之后,使用 ADD ESP,8 命令整理栈。调用者 main() 函数直接清理其压入栈的函数参数,这样的方式叫 cdecl。
cdecl 调用的优点:可以向调用函数传递长度可变的参数,这种长度可变的参数在其他调用中很难实现。
stdcall
stdcll是 win32 API常用的调用方式,被调用者负责清理栈。
|
在调用add() 函数的最后,(40100A)的 RETN 8 命令整理栈,RETN 8 的含义为RETN+POP 8 字节,即返回后使ESP增加到知指定大小。
stdcall 调用的优点:被调用者函数内部存在着栈清理代码,代码的尺寸要小,WIN 32 使用这种方式,是为了更好的兼容性。
fastcall
fastcall 使用寄存器来传递给函数的参数。
fastcall 调用的优点:可以实现对函数的快速调用(调用前记得保存ECX和EDX中的重要数据)