0
我有問題從內聯彙編調用C++函數。我需要在堆棧上推送所需的參數,但出現問題。例如,如果我推3
,然後一切正常,但如果我嘗試推送變量(來自函數)或[ebp+8]
(同一事物)的值,則被調用函數將錯誤地接收爲1
,而不管實際價值。內聯asm:推函數參數
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寄存器。 – 2012-07-08 23:03:48