嗨,这是我的第一个问题,所以请温柔对待我。我正在绕行一个 exe,使用 MS detours 和 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;
}
这有效,没有例外,我的日志文件充满了“它的工作”,但是,我需要在我的 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
我不认为它返回一个值?