主题:请高手指点:函数内HOOK
这是一个应用的代码片段:
007 mov eax, dword ptr [ebp+8]
00A call eax
00C mov dword ptr [ebp-4], eax
00F mov eax, dword ptr [edi+C]
在 00A 处的 call 执行完成后,返回值在 eax
我想在00C处拦截 eax 的值,按需要修改 eax,然后返回到 00C 处
继续执行。
我该怎么做,请高手指点,谢谢!!
先说一下我曾这样做过,但是有时程序崩溃了:
保存 00C 开始的7个字节,在00C处写入:
mov eax , ******** (*是我的函数地址)
jmp eax
下面是我的函数:
void HOOK()
{
DWORD gData=0;
WriteProcessMemory( INVALID_HANDLE_VALUE, ( void* )Hook_APIAddress, ( void* )g_dwOldBytes, 7, NULL );
_asm
{
mov gData,eax
}
if (gData>xFFFF) {
gData=0;
}
if (gData<=0xFFFF)
{
gData=0x8ae;
}
_asm
{
mov eax,gData
}
WriteProcessMemory( INVALID_HANDLE_VALUE, ( void* )Hook_APIAddress, ( void* )g_btNewBytes, 7, NULL );
return;
}
007 mov eax, dword ptr [ebp+8]
00A call eax
00C mov dword ptr [ebp-4], eax
00F mov eax, dword ptr [edi+C]
在 00A 处的 call 执行完成后,返回值在 eax
我想在00C处拦截 eax 的值,按需要修改 eax,然后返回到 00C 处
继续执行。
我该怎么做,请高手指点,谢谢!!
先说一下我曾这样做过,但是有时程序崩溃了:
保存 00C 开始的7个字节,在00C处写入:
mov eax , ******** (*是我的函数地址)
jmp eax
下面是我的函数:
void HOOK()
{
DWORD gData=0;
WriteProcessMemory( INVALID_HANDLE_VALUE, ( void* )Hook_APIAddress, ( void* )g_dwOldBytes, 7, NULL );
_asm
{
mov gData,eax
}
if (gData>xFFFF) {
gData=0;
}
if (gData<=0xFFFF)
{
gData=0x8ae;
}
_asm
{
mov eax,gData
}
WriteProcessMemory( INVALID_HANDLE_VALUE, ( void* )Hook_APIAddress, ( void* )g_btNewBytes, 7, NULL );
return;
}