最近编写一程序,有一个部分就是读取当前局域网war3游戏中所有玩家的名字但是我没有思路啊,我有个想法,就是搜索war3内存,按玩家位置搜索,都记下来,以后直接读内存地址只不过这样不知道在别的机器上可行吗? 我也没有条件试,所以就没有实验。。哪位兄弟可以对这方面指点一二,我是又百度又谷歌,没有找到我想要的内容,我现在根本就没有思路,多谢你们啊!

解决方案 »

  1.   

    理论上是可以的,但实际上会有一些问题需要注意:1:
    存放玩家名的内存地址可能是被临时申请的,每台机器上都不一样。这个时候就需要通过多次寻址才能找到真实的内存地址。比如说:有一个单元长度为4字节的数组,长度为12(存放12个玩家信息位置),这个数组的地址是固定的,每台机器上都一样。但是玩家信息远不止只存放名字,可能有几百甚至上K的字节,这个玩家数据是每一个玩家连上来时是临时向系统申请的内存地址,这个地址是不固定的。但是游戏会把这个临时申请的地址的值放进这个数组中,通过查找数组找到相应的玩家数据存放地址,再找到相应的玩家名。
    这样实际上还要再进行一次寻址。但是这是肯定有办法找到的。只不过会比直接搜索到就用费事许多。
    也许war3不一定是这样的做法,我只是提个醒让你考虑到会有这一层问题所在。2:
    war3的进程一定要自己用createprocess创建。否则在现在到处是360安全卫士,各色杀毒软件的保护下,这类游戏进程你想注入还真是非常麻烦。