首页
社区
课程
招聘
[旧帖] 请问:如何在主线程之外hook游戏的收包函数 0.00雪花
发表于: 2012-2-25 16:05 11070

[旧帖] 请问:如何在主线程之外hook游戏的收包函数 0.00雪花

2012-2-25 16:05
11070
如题:游戏在主线程中用recv函数接收封包,现在我要在收包中找一些特定的包处理,处理过程可能需要一定的运输量,所以想在主线程之外单开一个线程来解析封包,想问问大牛们我自己开的线程如何能够比较快的知道recv有包来了,需要一种什么机制啊?本来想用事件,但看介绍说内核事件由r3转r0需要的cpu比较多,recv非常频繁觉得这样太麻烦了!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 952
活跃值: (1821)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
SendMessage 完成端口通知 或者自己写个缓存队列
2012-2-25 20:18
0
雪    币: 403
活跃值: (541)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
能给个例子吗,伪代码也行,谢谢
2012-2-25 22:24
0
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
HOOK recv  这个API 把收到的内容全部跳到你HOOK的代码里,在里面做判断过滤出你想找的包。
2012-2-26 10:05
0
雪    币: 729
活跃值: (1195)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
现在游戏包一般都加密处理了,能不能在游戏解包的地方把解包后的存到文件或者队列中,然后再做处理。
2012-2-26 10:53
0
雪    币: 403
活跃值: (541)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我现在就是这种方式,这种方式还是在主线程里啊!
2012-2-26 13:11
0
雪    币: 705
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
....主线程跟hook有啥关系, 哪个线程执行到hook就是哪个线程, hook中不要去阻塞函数
2012-2-26 13:50
0
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
举个例子:如果你注入一个DLL进去,把HOOK的地方跳转到你DLL里(在你注入的DLL里做处理),那么就是单独在DLL的线程里处理,而不是主线程。如果你在HOOK的地方还是跳回主线程的代码里处理,那肯定是在主线程。
2012-2-27 11:57
0
雪    币: 129
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
你这说的是不对的,hook不管跳哪处理,跳不跳回去,都是在当前线程的.

关键lz要不要第一时间处理,如果要第一时间处理到你想要的包,那只能阻塞处理了,你其他线程来处理也无意义了。
如果不需要同步.你可以hook到包以后,把包丢到缓冲区后直接返回,其他线程再来访问缓冲区处理就可以了.

如果不需要即时的话,你可以丢到比如list之类的数组里,简单点,其他线程访问下数组就好了,也不用事件了.
2012-2-27 13:53
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
偷换掉主线程的句柄, 在你的线程中监听, 过滤完后丢给主线程。 不知道合不合你的要求。
2012-2-28 16:42
0
雪    币: 111
活跃值: (65)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
用个变局变量指针pNodeRecv
recv主线程hook,收到即new一片区域,写入buf数据到new的区域。pNodeRecv链表指向new出的区域。

自己写线程
while (1)
{
          读取pNodeRecv链表,有数据就处理,处理完delete区域。
}

楼主说的这个应该没啥难度,都是一些基本的程序设计理念。
         
}
2012-3-1 22:36
0
游客
登录 | 注册 方可回帖
返回
//