C ++内联函数抛出异常:运行时检查失败#0 - ESP的值不正确

时间:2011-11-13 22:56:02

标签: c++ visual-studio-2010 inline inline-assembly

我正在编写一些内联函数以获得乐趣,它会抛出我以前从未遇到过的异常。有趣的是,如果我继续,在异常刚刚停止执行我的程序之后,它将返回两个整数的总和。

__declspec(dllexport) int addintegers(int one, int two)
{
    int answer = 0;
    __asm
    {
        mov eax, 0
        push two
        push one
        call add
        mov answer, eax
    }
    return answer;

} // Debugger stops here with exception message

异常消息:

运行时检查失败#0 - ESP的值未在函数调用中正确保存。这通常是调用使用一个调用约定声明的函数的结果,函数指针使用不同的调用约定声明。

// add function definition

int add(int one, int two)
{
    return one + two;
}

1 个答案:

答案 0 :(得分:4)

我对汇编程序了解不多,而且你没有向我们展示add()的声明,但是如果它遵守C&C的调用约定,你必须弹出参数调用返回给调用者后从堆栈中。

要求调用者清理堆栈而不是被调用者,这是允许C具有可变数量的参数的函数,例如printf()