1.24b版本
游戏运行起来后,bp 6F605300(Game.dll的基址6F000000)
然后断下来时看ecx的值,ecx指向一个描述结构,+178的值表示是否有消息要显示,+17C的值是一个指针指向另一个结构,大概是表示待显示的消息属性的吧,在那个结构中,第一个DWORD是指向待显示的字符串,第二个DWORD不知,第三个float应该与消息显示的时间有关,第四个DWORD不知
在6F605300断下时,修改[ecx+178] = 1,[ecx+17C] = 消息属性的地址,然后再构造那个消息属性结构应该差不多行了
6F605300这个函数是会被循环调用的,进入时ecx一共有4个值,分别是底部(如 某建筑 已完成)的显示区域,顶部(如 低维护费用)的显示区域,第三个没注意,左侧即聊天时的显示区域
另外,断下时查看ecx指向的内存,向上翻一点可以看到CGameUI.c字符串,+17C指向的内存向上翻点也可以看到CMessageFrame.c字符串,于是大致由此猜测这两块内存的功能的
具体要实现,不hook的话,不知道搜索内存(CGameUI之类的字符串)的方法行不行,如果hook的话,最好能先hook LoadLibrary,得到Game.dll的基址,然后hook 6F605300得到ecx的值,不过这要求游戏在程序运行之后再运行。如果游戏已经运行,再去hook 6F605300的话,不知道会不会出问题
最后,ym溪流gg~ |