《毁灭战士》连续运行两年后因整数溢出崩溃,玩家复现32年前经典漏洞

2025-09-18 17:13:17   |   唐薇   |   564

9月18日,诞生于1993年的经典游戏《毁灭战士》近日因一项持续两年的极限测试引发关注。一位名为明基(Minki)的技术爱好者在运行该游戏近两年半后,成功复现了一个源于原始代码的整数溢出漏洞,导致游戏最终崩溃。

明基使用了一台2003年上市的华硕MyPal A620掌上电脑(Pocket PC),搭载Windows Mobile系统和英特尔XScale ARMv5芯片。他通过DIY改装,为该设备配备了基于18650锂电池的不间断电源(UPS),并接入路由器USB口以维持5V稳定供电。在几乎忘记这个实验的存在后,他在近日发现设备屏幕上最终弹出了应用程序崩溃的提示。

崩溃的根本原因可追溯至《毁灭战士》原始代码中的一个设计细节。游戏在“吸引模式”(无人操作自动演示状态)下每次播放新演示文件时,其内部计时变量“gametic”不会被重置。该变量以35Hz的频率递增,被存储为32位有符号整数,最大值为2,147,483,647。一旦超过该值,便会发生整数溢出,在x86架构中会跳转为最大负值,最终导致游戏崩溃。

根据计算,以原版35Hz频率运行,溢出时间约为1.95年。而明基的实验持续了约两年半,推测与其使用的WinDOOM Windows CE移植版本(Doom4CE)有关——该版本可能将计时频率调整为30Hz以提升在老硬件上的稳定性,从而使溢出时间延长至约2.26年,更接近实际运行时长。

《毁灭战士》自发布以来凭借海量Mod和玩家自制内容保持着持久生命力,但几乎无人让游戏连续运行如此之久。此次实验不仅验证了原始代码中一个被忽视的边界问题,也展现出经典软件在极端条件下的有趣行为。

特别提醒:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字、图片等内容的真实性、完整性、及时性本站不作任何保证或承诺,请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时发送相关信息至bireading@163.com,本站将会在48小时内处理完毕。

《毁灭战士》连续运行两年后因整数溢出崩溃,玩家复现32年前经典漏洞

2025-09-18 17:13:17 浏览量: 564 作者: 唐薇

9月18日,诞生于1993年的经典游戏《毁灭战士》近日因一项持续两年的极限测试引发关注。一位名为明基(Minki)的技术爱好者在运行该游戏近两年半后,成功复现了一个源于原始代码的整数溢出漏洞,导致游戏最终崩溃。

明基使用了一台2003年上市的华硕MyPal A620掌上电脑(Pocket PC),搭载Windows Mobile系统和英特尔XScale ARMv5芯片。他通过DIY改装,为该设备配备了基于18650锂电池的不间断电源(UPS),并接入路由器USB口以维持5V稳定供电。在几乎忘记这个实验的存在后,他在近日发现设备屏幕上最终弹出了应用程序崩溃的提示。

崩溃的根本原因可追溯至《毁灭战士》原始代码中的一个设计细节。游戏在“吸引模式”(无人操作自动演示状态)下每次播放新演示文件时,其内部计时变量“gametic”不会被重置。该变量以35Hz的频率递增,被存储为32位有符号整数,最大值为2,147,483,647。一旦超过该值,便会发生整数溢出,在x86架构中会跳转为最大负值,最终导致游戏崩溃。

根据计算,以原版35Hz频率运行,溢出时间约为1.95年。而明基的实验持续了约两年半,推测与其使用的WinDOOM Windows CE移植版本(Doom4CE)有关——该版本可能将计时频率调整为30Hz以提升在老硬件上的稳定性,从而使溢出时间延长至约2.26年,更接近实际运行时长。

《毁灭战士》自发布以来凭借海量Mod和玩家自制内容保持着持久生命力,但几乎无人让游戏连续运行如此之久。此次实验不仅验证了原始代码中一个被忽视的边界问题,也展现出经典软件在极端条件下的有趣行为。

,

Copyright ©2018 铋读网 All Rights Reserved.

京ICP备18051707号

京公网安备 11011302001633号