驱动之家 10小时前
30年没删 Win11还在跑Windows 95的内存管理器:大佬解释来龙去脉
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_keji1.html

 

快科技 10 月 19 日消息,据报道,Windows 11 26H2 至今仍保留着 Windows 95 的内存管理器代码,而微软工程师 Raymond Chen 早在 2010 年就解释过这段代码的来龙去脉。

故事要从《模拟城市:我是市长》说起,在早期 Windows 版本中,应用程序向系统申请内存,用完释放后如果还在读这块内存,就是 UAF 释放后使用漏洞。

原版游戏在 Windows 3.x 版本上就有这个 bug,但却没有出问题,因为释放后的内存并不会真正回收。到了 Windows 95 测试版,内存管理方式变了,游戏直接崩溃。

微软没等游戏厂商修复,而是自己在 Windows 95 里写了特殊代码,当检测到模拟城市运行时,内存分配器会切到特殊模式,不立即释放内存。

模拟城市的 hack 是一次性的,但其他老软件也有类似问题,一些程序依赖 Windows 95 内存管理器的特性,比如读已释放内存时还指望读到旧值,到了后续版本 Windows 上直接崩溃。

微软的解决方案叫 EmulateHeap,把应用的堆调用从 HeapCreate 到 LocalLock 到 GlobalReAlloc 全部重定向到 Windows 95 内存管理器的模拟版本。

Chen 说这个方案极其简单但完全疯狂,更疯狂的是实现方式,微软直接拿了一份 Windows 95 内存管理器源代码,重新编译后塞进兼容性框架。用 Chen 的话说,Windows 应用兼容性框架里藏着 "Windows 95 内核的一大块 "。

这段老代码只在 EmulateHeap 为某个应用启用时才从硬盘加载,电脑不会在后台偷偷跑 Windows 95。

智客推

智客推

ZAKER 智客推 GEO | AI 时代的品牌认知解决方案

一起剪

一起剪

ZAKER旗下免费视频剪辑工具

相关标签

windows 微软 源代码 工程师
相关文章
评论
没有更多评论了
取消

登录后才可以发布评论哦

打开小程序可以发布评论哦

12 我来说两句…
打开 ZAKER 参与讨论