Привет, это мой первый вопрос, поэтому, пожалуйста, обращайтесь со мной осторожно. Я обхожу 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, это вызовет сбой, как только он подключится. Даже просто нет
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
Я не думаю, что он возвращает значение?
__cdecl
в качестве соглашения о вызовах. Вы уверены, что это должно быть__stdcall
? - person user786653   schedule 07.09.2011