【发布时间】:2012-07-08 20:29:35
【问题描述】:
我在从内联汇编调用 C++ 函数时遇到问题。我需要将所需的参数压入堆栈,但出了点问题。例如,如果我推送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;
}
【问题讨论】:
-
如果你把函数声明为裸函数,那么你负责设置ebp寄存器。
标签: c++ assembly parameters inline-assembly