漫天糖

游戏要闻 - 2021年3月17日

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

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

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

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

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

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

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

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

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

黑客“治病救人”

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

先来前情回顾一下。

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

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

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

首先,他用Windows任务管理器,来判断联机版GTA 5在启动时,都调用了哪些计算机资源。

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

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

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

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

黑客大哥说:

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

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

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

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

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万美元奖金

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

而且,他用的还是七八年前的硬件配置。CPU,是老而弥坚的AMD FX-8350,2012年上市,采用“推土机”架构,超频潜力惊人。而显卡,还是GTX 1070。

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

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

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

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

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

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

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

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

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

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

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

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

有网友爆料,在拉脱维亚,普通程序员工资平均3-4K欧元(23000-31000人民币)。

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

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

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

 

稿源:量子位

推荐内容

受欢迎的

最新

Related

国漫强烈推荐 -《影子猫》

2021年4月16日

《蜡笔小新》全新动画电影正式海报 追加角色公开

2021年3月10日

国产游戏掌机AYA Neo海外火爆众筹:超额认购2606%

2021年3月10日

超级任天堂世界主题公园将于3月18日正式开园

2021年3月10日

《EVA新剧场版:终》主题歌“One Last Kiss”MV公布

2021年3月10日

现实版“Plash Speed”?越南玩家为骗过妻子买PS5上演好戏

2021年3月11日

新款Switch主机的开发机已送至开发者手中

2021年3月11日

《新世纪福音战士新剧场版:终》“本预告·改”影像公开

2021年3月11日

《新世纪福音战士 新剧场版:终》开场动画公布

2021年3月11日

国漫强烈推荐 -《影子猫》

2021年4月16日

动画电影「冲出地球」官宣定档7月16日

2022年7月1日

剧场版动画「擅长捉弄的高木同学」公开第四弹入场特典

2022年7月1日

「杜鹃的婚约」更新回忆插画——寻找母亲节礼物

2022年7月1日

万代「海贼王 和之国篇」特拉法尔加·罗手办公开

2022年7月1日

「租借女友」更科瑠夏手办开始预定

2022年7月1日

「欢迎来到实力至上主义的教室」第二季第一卷BD宣传CM公开

2022年7月1日

「杀爱」第四卷BD特典Drama试听片段公开

2022年7月1日

动画「love all play」公开后半季最新PV

2022年7月1日

20年前的“中国暴雪” 现在为什么没人记得了?

2022年2月8日

广东打掉游戏机走私团伙 查扣游戏机价值七千多万

2021年4月4日

NS格斗游戏《Arms》同名漫画取消 作者不愿多谈

2021年3月13日

月度更新

相关推荐

最近更新

漫画资讯 - 2021年4月16日

国漫强烈推荐 -《影子猫》

B站阅读地址: https://manga.bilibili.com/detail/mc25706 影子 …

阅读更多...

0分享

动漫电影 - 2022年7月1日

动画电影「冲出地球」官宣定档7月16日

国产动画电影「冲出地球」官方宣布定档7月16日,同时发布了最新 …

阅读更多...

0分享

动漫电影 - 2022年7月1日

剧场版动画「擅长捉弄的高木同学」公开第四弹入场特典

动画「擅长捉弄的高木同学」的剧场版已于6月10日在日本地区上映 …

阅读更多...

0分享

业界快讯 - 2022年7月1日

「杜鹃的婚约」更新回忆插画——寻找母亲节礼物

电视动画「杜鹃的婚约」更新了一张动画中未出现的回忆插画,绘制 …

阅读更多...

0分享

手办 - 2022年7月1日

万代「海贼王 和之国篇」特拉法尔加·罗手办公开

近日,万代SPIRITS公开了「FiguartsZERO-超激战-」系列手办的最 …

阅读更多...

0分享

手办 - 2022年7月1日

「租借女友」更科瑠夏手办开始预定

花椰菜作品「租借女友」更科瑠夏手办现已开始预定,手办全高约23 …

阅读更多...

0分享

业界快讯 - 2022年7月1日

根据衣笠彰梧创作的同名轻小说作品改编,岸诚二担任监督,Lerche …

阅读更多...

0分享

业界快讯 - 2022年7月1日

「杀爱」第四卷BD特典Drama试听片段公开

根据Fe创作同名漫画改编,由Platinum Vision负责制作的电视动画 …

阅读更多...

0分享