こんにちは、これは私の最初の質問ですので、優しく扱ってください。MS迂回とVisual Studio 2005を使用して、exeを迂回していますが、dllが読み込まれ、フックが処理されますが、フックコードを拡張しようとすると、問題が発生します。すべてがクラッシュし、メッセージボックスの連絡先サポートをポップアップするexeファイルで例外が発生すると思います。
typedef void (__stdcall* GenterateStrings)(int,int,int);
GenterateStrings Real_GenterateStrings = (GenterateStrings)(0x06EDFA0);
extern "C" { static void __stdcall myGenterateStrings(int,int,int); }
void __stdcall myGenterateStrings(int a1, int a2, int a3)
{
myLogMessage(L"its working");
Real_GenterateStrings( a1, a2, a3);
return;
}
これは例外なく動作し、ログファイルは「動作中」でいっぱいになりますが、Real_GenterateStrings()呼び出しの後にEAXをキャプチャする必要があります。これには、Unicode文字列へのポインタが含まれているためです。
しかし、Real_GenterateStrings呼び出しの後にコードを配置すると、フックされるとすぐにクラッシュが発生します。ただのNOPでも
void __stdcall PokerAdvisorGenterateStrings(int a1, int a2, int a3)
{
myLogMessage(L"its working");
Real_GenterateStrings( a1, a2, a3);
__asm
{
nop
}
return;
}
何か案は?
私がフックしている機能は
mov eax, [rsp+0Ch]
mov ecx, [rsp+8]
mov edx, cs:113650Ah
push rax
mov eax, [rsp+8]
push rcx
push rdx
push 0A3CA2Ch
push rax
call near ptr unk_6AB8E0
add esp, 14h
retn
私はそれが値を返すとは思わないのですか?