hook当前进程中的flash游戏偶尔会崩溃?

圆道 2013-11-20 02:47:25
用MFC内置IE,进网页游戏后,根据句柄hook了flash游戏,时间长了就会偶尔崩溃不知道为什么,请大牛帮助分析!感谢了!
hook了send recv2个

int _stdcall hook_send( SOCKET s,const char FAR *buf, int len, int flags )
{
int nRet;
//恢复API头8个字节
WriteProcessMemory( INVALID_HANDLE_VALUE, ( void* )g_pSend, ( void* )g_dwOldBytes[0], sizeof( DWORD )*2, NULL );
//一些判断
if(len>0 && 0x71 ==buf[0])
{
//...
}
nRet = send( s, buf, len, flags );
//写入跳转语句,继续Hook
WriteProcessMemory( INVALID_HANDLE_VALUE, ( void* )g_pSend,( void* )g_btNewBytes, sizeof( DWORD )*2, NULL );
//SetEvent( g_hSendEvent );
return nRet;
}


int _stdcall hook_recv( SOCKET s,char FAR *buf, int len, int flags)
{
int nRet;

//::WaitForSingleObject( g_hRecvEvent, INFINITE );
//恢复API头8个字节
::WriteProcessMemory( INVALID_HANDLE_VALUE, ( void* )g_pRecv,( void* )g_dwOldBytesRecv[0], sizeof( DWORD )*2, NULL );
//一些判断
if(len>0 && 0x71 ==buf[0])
{
//...
}
nRet = recv( s, buf, len, flags );
//写入跳转语句,继续Hook
//::WriteProcessMemory( INVALID_HANDLE_VALUE, ( void* )g_pRecv,( void* )g_btNewBytesRecv, sizeof( DWORD )*2, NULL);
return nRet;
}

仅仅是hook了send recv没做其他处理也出错,游戏中切换地图时容易出错,这要注意什么吗,用同步也有人出错。求教了!
出错调试,总是什么wininet.dll ws_32.dll中出错,但这2个是不可能出错的,求解!
...全文
284 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你这种hook方式比较落后,新式的hook根本都不用写回。 问题就出在写回上,天长日久必然出问题,因为总会有并发的调用。 可以采用新式的hook思路,保存原函数的开始几个指令,在此处写入跳转指令,跳转到自己的函数,自己的函数处理完毕后需要调用原函数的时候特殊处理。 特殊处理方法:开辟一小块可执行的内存,写入保存的几个指令,接上一个跳转指令,跳转到原函数去掉保存指令后的偏移处,这样整个调用过程就接上了。
圆道 2013-12-11
  • 打赏
  • 举报
回复
没人知道啊?顶

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧