インライン アセンブリからの 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;
}