Skip to content

项目命名为StormBreaker,不是要击碎什么,而是为二十年前的优秀设计续写可能。就像暴雪的程序员不会料到,2025年有人用C++20重构他们的内存边界检查。

License

Notifications You must be signed in to change notification settings

csli/StormBreaker

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

StormBreaker

星辰内存计划:为Storm.dll内存池的救赎之路

当游戏在第无数次达到2GB内存边界崩溃时,我由于无法正常游玩自己的地图感到恼火,所以开发了这个补丁来延迟Storm.dll内存管理系统导致的崩溃。

项目背景

Storm.dll是暴雪娱乐早期开发的核心基础库,存在内存池设计缺陷:虚拟内存只增不减,导致32位进程在长时间运行后耗尽2GB地址空间。

解决方案

StormBreaker通过API钩子拦截Storm.dll的内存管理函数,引入现代内存分配策略。

重要警告

性能影响:使用此补丁会导致游戏出现明显性能下降。这是为了解决内存泄漏问题所必须付出的代价。我们正在努力改进性能,但目前请做好游戏会变卡的准备。 兼容问题:此补丁本是为自己地图开发的插件,所以该插件只经过自己地图测试可正常通关为标准,插件不保证与其他地图的兼容性,本插件目前仅支持1.27a。

技术相关

月光探戈:在IDA反编译器的幽蓝光芒中,为401函数群赋予人性化注解

  • Alloc_401:永不停歇的夸父,追逐虚拟内存的地平线

  • ReAlloc_405:西西弗斯式的自我重组,在内存峭壁上雕刻希望

  • Free_403:沉默的守墓人,墓碑铭刻"此处本应释放"

  • 大块内存拦截与管理

  • 虚拟内存智能释放

  • 内存碎片整理

  • 崩溃防护机制

效果展示

128KB拦截

===== 内存使用报告 =====

Storm 虚拟内存: 234 MB

TLSF 内存池: 67 MB / 128 MB (52.6%)

TLSF 管理块数量: 90

工作集大小: 636 MB

虚拟内存总量: 698 MB

========================

256KB拦截

===== 内存使用报告 =====

Storm 虚拟内存: 313 MB

TLSF 内存池: 60 MB / 128 MB (47.2%)

TLSF 管理块数量: 44

工作集大小: 644 MB

虚拟内存总量: 702 MB

========================

512KB拦截

===== 内存使用报告 =====

Storm 虚拟内存: 485 MB

TLSF 内存池: 51 MB / 128 MB (40.3%)

TLSF 管理块数量: 18

工作集大小: 642 MB

虚拟内存总量: 703 MB

========================

不启用大块拦截

===== 内存使用报告 =====

Storm 虚拟内存: 1020 MB

TLSF 内存池: 0 MB / 128 MB (0.0%)

TLSF 管理块数量: 0

工作集大小: 598 MB

虚拟内存总量: 720 MB

========================

这是在我自己地图上进行的测试,当大块拦截拦截阈值越低其降低Storm虚拟内存的效果就越明显。 而当Storm虚拟内存抵达2G的时候所分配的内存会导致游戏崩溃,且Storm虚拟内存无法下降,除非CleanAll可以找到没有分配哪怕一个点的堆。

使用方法

  1. 下载最新的StormBreaker.asi
  2. 将asi放入游戏目录
  3. 若启动游戏后看到控制台输出“Hello StormBreaker!”以及两个初始化成功则代表安装成功。

技术细节

补丁钩住了Storm.dll的核心内存函数:

  • Storm_MemAlloc
  • Storm_MemFree
  • Storm_MemReAlloc
  • StormHeap_CleanupAll

许可证

本项目采用MIT许可证。

"本项目遵循数字千年版权法案第1201(f)条,旨在延续经典游戏生命力。如有版权问题请优先通过社区渠道协商解决。" QQ:1594199381

未来计划

作者正在备赛期间,暂时停止更新。

开发性能优化方案,希望在保持内存稳定性的同时减少性能损失。

如果这个项目帮助到了您,请考虑给它一颗星⭐

致谢

在此项目的开发过程中,我获得了许多人的帮助和支持。特别感谢:

感谢Asphodelus提出该想法并进行指导。

感谢TLSF算法的原创者Matthew Conte,提供了高效的内存分配算法。

感谢Detours库的开发团队,使得函数钩子变得更加简单可靠。

最后感谢跟我一路过来的Claude、ChatGPT、DeepSeek帮我一起啃那不是人看的反汇编。

About

项目命名为StormBreaker,不是要击碎什么,而是为二十年前的优秀设计续写可能。就像暴雪的程序员不会料到,2025年有人用C++20重构他们的内存边界检查。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 78.6%
  • C 15.5%
  • Makefile 2.7%
  • CMake 2.0%
  • Assembly 1.1%
  • Roff 0.1%