【发布时间】:2012-08-06 18:34:32
【问题描述】:
在我看来,MSVS 忽略了我函数上的 __stdcall 指令。我正在手动清理堆栈,但编译器仍会在每个 CALL 之后附加 ADD ESP 指令。
这是我声明函数的方式:
extern "C" void * __stdcall core_call(int addr, ...);
#define function(...) (DWORD WINAPI) core_call(12345, __VA_ARGS__)
return function("Hello", 789);
这是输出的样子:
(来源:server4u.cz)
我用箭头标记了多余的 ADD 指令,MSVS 会在每次调用后自动附加,尽管事实上清理堆栈是被调用者的责任(参考:http://en.wikipedia.org/wiki/X86_calling_conventions#List_of_x86_calling_conventions),这会导致我的程序崩溃.如果我用NOPs 手动替换ADD 指令,程序将按预期工作。所以,我的问题是......有没有办法强制编译器停止添加这些指令?
谢谢。
【问题讨论】:
标签: c++ visual-c++ calling-convention