# GTA 5祖传“屎山”代码终于修复 R星认可黑客方案还给他发了1万美元奖金

- Link: https://coocg.com/game/2021-03/626.html
- Published: 2021-03-17T01:10:01+08:00
- Author: shrimpoz

**🔄 2026 实时动态核验（2026-11-11）：**截至2026年11月，Rockstar仍在持续更新GTA 
Online，9月的1.73补丁继续修复启动、会话和加载相关问题，官方支持页也仍显示在线服务
正常。文中提到的加载优化方案已在2021年被Rockstar采纳并支付1万美元赏金，但并未让后
续版本彻底杜绝加载故障。

⚡ 漫天糖 ACG 编辑部 · 30 秒核心看点

 * 黑客通过逆编译定位GTA 5联机版加载瓶颈，确认问题出在低效循环与字符串读取。
 * 他用缓存与hash map思路重写逻辑，将联机加载时间从约6分钟压到1分50秒。
 * R星后续认可该优化方案，宣布修复相关问题，并向作者发放1万美元奖金。

折磨全球无数GTA 5玩家的联机版超长加载时间问题，终于要修复了。什么？R星（游戏开发
商RockStar）主动改善玩家游戏体验？不存在的。打开GTA 5联机版，要跑19.8亿次if语句，
一支烟的功夫游戏都加载不完。这堪称游戏开发史上最大的“屎山”代码，存在了7年，R星从
没想过要修复…

![GTA 5祖传“屎山”代码终于修复 R星认可黑客方案还给他发了1万美元奖金](https://coocg.
com/wp-content/uploads/2021/03/c31ed65cefe83c1-1615973699.jpg)

玩家对GTA 5联机版可谓又爱又恨，有人甚至破口大骂：

直到一位黑客大哥路过，实在忍不了恶臭的代码，嘲讽完R星后，随手按了“冲水键”，直接将
等待时间压缩70%。

鉴于R星失误实在太低级太离谱，而这位老哥的方法又太有效，以致无数玩家称他“功德无量”。

如果平均给每个玩家节省10秒，全球500万玩家一天就能节约5000万秒，一年中，节约的总时间
大概能有数十年。相当于挽救了十多个人的生命！

R星这才坐不住了，赶忙官宣修复bug，不但采用了黑客的方案，还大方的给他奖励了1万美元“
赏金”。

（注：所谓“屎山”，是程序员间流传的一个梗，指陈年累月且复杂低效的代码，因为改动成本
巨大，所有人避之不及。）

**黑客“治病救人”**

不久前，量子位曾经介绍过黑客大哥通过逆编译器检查GTA 5，并且重写代码，一下节约70%
加载时间的故事。

先来前情回顾一下。

简单地说，就是GTA 5联机版加载时间长得过分，有超过80%的玩家要等3分钟以上，有的人甚至
要等15-20分钟。

![GTA 5祖传“屎山”代码终于修复 R星认可黑客方案还给他发了1万美元奖金](https://coocg.
com/wp-content/uploads/2021/03/44b9036ebd6e19f-1615943332.png)

一位黑客大哥实在忍不了，于是决定开扒GTA 5的代码，看看到底是哪里出了问题。

首先，他用[Windows](https://microsoft.pvxt.net/x9Vg1)任务管理器，来判断联机版GTA
5在启动时，都调用了哪些计算机资源。

![GTA 5祖传“屎山”代码终于修复 R星认可黑客方案还给他发了1万美元奖金](https://coocg.
com/wp-content/uploads/2021/03/13b3f7f1c27fba6-1615943334.png)

在1分钟的时间分界线上，之前是加载的是单机和联机版通用的基础内容，之后是联机版独有
的内容。

可以看到，联机版GTA 5，加载时调用大量CPU资源至少长达4分钟之久，而同时，内存、GPU、
硬盘的使用情况几乎没有明显变化。

所以，问题大概率出在代码上。

黑客大哥说：

我闻到一股烂代码的味道…..

为了找出到底那一部分程序卡住了CPU，他使用了工具Luke Stackwalker，对CPU任务堆栈进行
采样分析。

沿着调用栈往下走，发现问题出在一个sscanf函数上。

![GTA 5祖传“屎山”代码终于修复 R星认可黑客方案还给他发了1万美元奖金](https://coocg.
com/wp-content/uploads/2021/03/267308f0ba1084c-1615943337.png)

sscanf的功能是读取格式化的字符串中的数据，而在GTA 5中，它正在读取的是一个10M左右，
有63000多个条目的JSON文件。

这个文件到底是干什么用的？黑客大哥推测，这可能是游戏内购商店的相关内容。

再看第二个问题，这是一个存储命令，对象是item，具体是什么不得而知。

但是保存前，有一个if语句，逐一比较item内项目的哈希值，检查它们是否出现在某一列表
中。

按照他计算，这一步if，要执行(63000^2 63000)/2 = 1984531500次！

没错，等待加载前的十多分钟里，GTA 5用你的CPU，执行了19.8亿次if命令…

如此简单粗暴的编程思路，让这位老哥哭笑不得：

既然对象有唯一哈希值，那为什么不用hash map？？？

至于R星为什么不修正，有网友推测，最开始，if的循环次数并没有这么多，而是随着开发，
条目不断增多，最后到了积重难返的地步。

而之前的代码结构，谁也不愿意去动。

就是这样一个低级的失误，让全球玩家至今每次打开游戏，都要上演一遍19.8亿次的if循环…

这是不是堪称游戏开发史上最意外的“屎山”代码？

**如何冲掉“屎山”**

第一个问题，黑客大哥采用hook大法，不一一读取字符串，而是：

hook strlen“缓存 “字符串起始和当前长度。如果在字符串范围内函数在此被调用，返回缓
存的值

至于if语句问题，就更直接了——完全跳过重复检查，利用hash map插入项目，因为这些值是
唯一的。

最后的结果如下：

![GTA 5祖传“屎山”代码终于修复 R星认可黑客方案还给他发了1万美元奖金](https://coocg.
com/wp-content/uploads/2021/03/b5f842d92ff5eb7-1615943338.png)

现在，GTA 5联机版加载，从原来的6分钟，下降到现在的1分50秒！

而且，他用的还是七八年前的硬件配置。CPU，是老而弥坚的[AMD](https://c.duomai.com/track.php?site_id=242986&euid=&t=https://amd-cpu.jd.com/)
FX-8350，2012年上市，采用“推土机”架构，超频潜力惊人。而显卡，还是GTX 1070。

随后他将修改好的代码打包，上传到了Github，免费供玩家下载。

但是，他也提醒玩家，私自改动游戏文件，可能有被封号的风险。他本人也面临潜在的法律
风险。

所以，他无论在博客还是GitHub上，都没有留下任何身份信息。

**黑客大哥提前拿了一笔“年终奖”**

但是现在黑客大哥不用担心了。

因为，这篇揭R星老底的帖子在全网大火，R星不得不出面应对。

在和他联系后，R星认可了他的改进方法，宣布在后续更新中修复相关问题，并且还慷慨的给
他付了一笔1万美元的奖金。

“事了拂衣去，不留功与名”，这位黑客大哥被无数玩家膜拜。当然大家也不忘再把R星拖出来“
鞭尸”。

有人吐槽，GTA 5仅2020年就买了2000万份，累计销量更是达到1.4亿份，R星每年都能从这个
项目上赚数亿美元，但是却不肯花几分钟去解决这么一个低级错误，实在可耻。

还有人抨击R星几乎从不与玩家社区互动，玩家提的意见也从来充耳不闻，直到这次被被黑客
嘲讽打脸，才不得不出来表态。

**事后，黑客大哥还透露了一丝身份信息，原来他人在拉脱维亚。**

拉脱维亚是波罗的海国家，原来是前苏联加盟国之一。在网上搜索相关信息，可以发现“拉脱
维亚黑客”，几乎是和俄罗斯黑客一样传奇神秘的存在。

有网友爆料，在拉脱维亚，普通程序员工资平均3-[4K](https://c.duomai.com/track.php?site_id=242986&euid=&t=https%3A%2F%2Flist.jd.com%2Flist.html%3Fcat%3D737%2C794%2C798%26ev%3D4155_110018%26sort%3Dsort_rank_asc%26trans%3D1%26JL%3D2_1_0%23J_crumbsBar)
欧元（23000-31000人民币）。

而他领到的这1万美元奖金，相当于三四个月工资了。

提前领了一笔“年终奖”，黑客大哥表示很开心。同时他也说，将密切关注GTA 5未来更新，一
丝不苟的检查修复情况。

不知道他还能不能从R星领走更多奖金。

稿源：量子位

❓ 同好常见问题解答（FAQ）

GTA 5联机版为什么加载这么慢？

文中提到，问题主要出在联机版加载阶段的低效代码：一处读取超大JSON文件时反复调用字符
串处理，另一处还进行了大量重复比对，导致CPU长时间空转，加载时间被显著拉长。

黑客是怎么把加载时间缩短的？

他通过逆编译和堆栈分析找到瓶颈，改用缓存字符串长度、跳过重复检查，并用hash map替代
低效遍历逻辑，最终把联机版加载时间从约6分钟压到1分50秒。

R星真的给这位黑客发奖金了吗？

是的，文中写到R星在联系后认可了他的改进方法，并宣布在后续更新中修复相关问题，同时
向他支付了1万美元奖金。
