War3 游戏内存管理机制

本文探讨了经典游戏War3的内存管理机制,重点分析了在硬件限制下,游戏如何通过Storm.dll模块进行内存分配和管理。通过逆向工程发现,游戏内存由Storm的#401函数维护,形成一个包含255个元素的内存块描述表,使用链表结构处理内存申请和释放。当发生错误时,错误信息指向具体的内存操作位置。
摘要由CSDN通过智能技术生成

前言

       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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值