int __stdcall stdfunc(int n,int b)
{
return n;
}typedef int (__stdcall *STD_FUNCTION)(...);STD_FUNCTION stdpf = (STD_FUNCTION)stdfunc;stdpf(10);以上代码在VS05和VS08中执行后堆栈崩溃,看了汇编,发现ESP错了以下是调用函数的汇编代码:010E1A9F mov esi,esp
010E1AA1 push 0Ah
010E1AA3 call dword ptr [stdpf]
010E1AA6 add esp,4 ;为什么会出现这一句?既然是stdcall,目标函数的最后一句是ret 4,那么call完出现的add esp,4就破坏了堆栈再做以下实验:typedef int (__stdcall *INT_FUNCTION)(int);INT_FUNCTION stdpf = (INT_FUNCTION)stdfunc;stdpf(10);
此时可以正常调用何解??????????????????????难道不定参数的函数指针强制使用__cdecl调用????
gcc下又是什么情况?
{
return n;
}typedef int (__stdcall *STD_FUNCTION)(...);STD_FUNCTION stdpf = (STD_FUNCTION)stdfunc;stdpf(10);以上代码在VS05和VS08中执行后堆栈崩溃,看了汇编,发现ESP错了以下是调用函数的汇编代码:010E1A9F mov esi,esp
010E1AA1 push 0Ah
010E1AA3 call dword ptr [stdpf]
010E1AA6 add esp,4 ;为什么会出现这一句?既然是stdcall,目标函数的最后一句是ret 4,那么call完出现的add esp,4就破坏了堆栈再做以下实验:typedef int (__stdcall *INT_FUNCTION)(int);INT_FUNCTION stdpf = (INT_FUNCTION)stdfunc;stdpf(10);
此时可以正常调用何解??????????????????????难道不定参数的函数指针强制使用__cdecl调用????
gcc下又是什么情况?
其次STD_FUNCTION stdpf = (STD_FUNCTION)stdfunc;,似乎stdfunc和STD_FUNCTION不兼容