前言
War3是款老游戏,由于那个时代的硬件条件有限,所以对于这种有一定时长的游戏他的内存管理十分的讲究,因为地图内单位过多就会导致内存不足,如果没有合理的分配内存就会直接影响游戏的体验。
环境
Game.dll:126
Storm.dll:1.09
分析
通过逆向内存的申请和释放,可以发现游戏中所有的文件、内存数据管理都是由模块storm进行处理的,因此进行了深入分析可以找到:
//#401 内存申请 返回申请地址
typedef PVOID(WINAPI *FnSMemAlloc)(DWORD dwSize, char *pTagName, int nType, int flag);
//#403 内存释放
typedef bool (WINAPI *FnSMemFree)(PVOID pAddr, char *pTagName, int nType, int flag);
这里通过Storm的#401函数可以获取到一个内存块描述表,这里面包含了游戏内所有申请的内存指针,该数组长度为 255,以内存描述名Hash的首字节进行链表方式保存,如果重复则按照顺序往链表内添加节点
15025F2F CC int3
15025F30 > 833D 6C5