游戏开发者兼模组制作人Silent(以发布《侠盗猎车手:圣安地列斯》等游戏的SilentPatches修复补丁闻名)近日发现并修复了一个潜伏二十年的程序漏洞。虽然这个故障现象是由Windows 11新版系统触发的,但问题根源始终存在于游戏代码中。

Cover Image

Silent收到一份关于SilentPatch的“极其特殊的错误报告”:用户将Windows 11升级至24H2版本后,游戏中的“滑翔者”飞机完全消失,既无法通过修改工具生成,也不会出现在常规刷新点。这位编程高手指出,自去年11月起他已收到多起类似反馈。有用户通过虚拟机测试证实:在Windows 11 23H2系统下飞机正常生成,升级至24H2后即消失。用该用户的话说:“谁也想不通为什么2024年的小更新会搞坏2005年游戏里的一架随机飞机”。

Silent组织多名24H2系统用户测试后确认该漏洞普遍存在。他亲自搭建24H2虚拟机复现故障时,戏剧性的一幕出现了:“当我用脚本生成滑翔者并让CJ登机后,飞机瞬间被弹射到1.0287648030984853e+0031米(约合10.3穰米或1.087千万亿光年)的高空。”由于游戏引擎无法呈现这种天文级位移,画面只留下“摄像机被抛向无限远时特有的残影效应”。有趣的是,尽管动画系统因浮点数精度崩溃,玩家仍能依稀辨认飞机轮廓。

通过深入排查,Silent发现飞机旋翼转速被赋予“明显异常”的数值。关于飞机为何会突破宇宙尺度,他提出两种假设:①飞机本应高空生成;②飞机地面生成后于下一帧弹射升空。在涉及Z轴坐标、碰撞体积等专业术语的技术分析中(完整报告已发布),Silent最终锁定问题核心——游戏错误读取了滑翔者的生成坐标

关键突破出现在检查车辆参数时:“在vehicles.ide文件里,滑翔者的参数数量比其他飞机少,配置格式反而接近船只。它是唯一缺少前后轮参数的飞机。”补全参数后故障立即消除。Silent推测这个历史遗留问题源于开发失误:“在《罪恶都市》中滑翔者被定义为船只,移植《圣安地列斯》时虽然更改了车辆类型,但程序员忘记补充飞机必需的轮轴参数。”

更耐人寻味的是:为何这个漏洞潜伏二十年后才爆发?Silent发现根本原因并非Windows 11更新,而是游戏长期依赖“栈内存中某个恰好位置正确的浮点数值”。他对比前序车辆TopFun的配置文件后证实:“在Windows 10运行时,部分局部变量仍肉眼可辨,而Windows 11已完全清除这些数据。值得注意的是,即便在Windows 10环境下,只要再偏移4字节就会触发相同错误——能躲过这么多年纯属侥幸。”

这位完美主义者还发现,Xbox原版及《最终版》其实包含类似修复方案。“这是我近年来遇到最有趣的漏洞,”Silent总结道,“起初很难相信特定系统版本会直接引发故障,但最终证明问题始终存在于游戏代码——这个函数本就不该正常运行,却在PC平台隐藏了整整二十年。”

在技术报告的尾声,Silent甚至指出自己的修复方案比R星(Rockstar)官方版本更精准,并借此强调数据校验的重要性:“《圣安地列斯》在这方面做得极其糟糕。”这场故障排查犹如汤姆·沃尔夫在《太空英雄》中描绘的场景——当CJ乘坐的飞机瞬间穿越千万亿光年时,我们得以窥见游戏世界中那些看似简单实则精密的运算系统,以及无数可能出错的环节如何在巧合中维持着微妙平衡。


文章标签: #游戏漏洞 #GTA #Windows11 #程序修复 #游戏开发

负责编辑

  菠萝老师先生 

  让你的每一个瞬间都充满意义地生活,因为在生命的尽头,衡量的不是你活了多少年,而是你如何度过这些年。