Привет, это мой первый вопрос, поэтому, пожалуйста, относитесь ко мне осторожно. Я в обход exe, использую обходы MS и Visual Studio 2005, моя 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;
}
Это работает без каких-либо исключений, и мой файл журнала заполняется "его работой", однако мне нужно перехватить EAX после моего вызова Real_GenterateStrings (), так как он содержит указатель на строку 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
Не думаю, что он возвращает значение?