下面列举了一些常见的编译器的调用约定
VC6:
调用约定 堆栈清除 参数传递
__cdecl 调用者 从右到左,通过堆栈传递
__stdcall 函数体 从右到左,通过堆栈传递
__fastcall 函数体 从右到左,优先使用寄存器(ECX,EDX),然后使用堆栈
thiscall 函数体 this指针默认通过ECX传递,其他参数从右到左入栈
正常情况下,我们看到的压栈都是从右向左,如:
void main()
{
int x = 2;
printf("%d",++x);
printf("%d",x);
}
该C语言程序反汇编后的指令:
10: int x = 2;
00401028 mov dword ptr [ebp-4],2
11: printf("%d",++x);
0040102F mo