0

我在从内联汇编调用 C++ 函数时遇到问题。我需要将所需的参数压入堆栈,但出了点问题。例如,如果我 push 3,那么一切正常,但是如果我尝试(从函数)或[ebp+8](相同的东西)推送变量的值,则1无论实际值如何,它都会被调用函数错误地接收。

int i;

DWORD nietgebruikt(DWORD x)
{
    // x is always 1
    x += 40;
    return x;
}

_declspec(naked) void asmfunc(DWORD x)
{
    _asm
    {
        push    x; // or [ebp+8]
        call    nietgebruikt
        pop x // or [ebp+8]

        add i,  eax
        ret
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    i = 1;

    asmfunc(3);

    cout << i << endl;
    system("pause");

    return 0;
}
4

1 回答 1

0

您是否尝试过在调试器下单步执行您的代码,以可视化和理解其执行?从长远来看,您可能会发现这非常有用。

更具体地说,您的_tmain函数将值传递给3value asmfunc 而不是by reference。换句话说,asmfunc调用函数不会看到对其本地整数“副本”所做的任何更新。

您可能会考虑asmfunc尝试返回更新后的值,然后将该值显示在_tmain.

于 2012-07-08T22:02:00.287 回答