最新公告
  • 欢迎您光临IO源码网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 《GTA 5》祖传“屎山”代码终于修复:立功黑客背景曝光

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

      玩家对 GTA 5 联机版可谓又爱又恨,有人甚至破口大骂。直到一位黑客大哥路过,实在忍不了恶臭的代码,嘲讽完R星后,随手按了“冲水键”,直接将等待时间压缩 70%。鉴于R星失误实在太低级太离谱,而这位老哥的方法又太有效,以致无数玩家称他“功德无量”。

      如果平均给每个玩家节省 10 秒,全球 500 万玩家一天就能节约 5000 万秒,一年中,节约的总时间大概能有数十年。相当于挽救了十多个人的生命!R星这才坐不住了,赶忙官宣修复 bug,不但采用了黑客的方案,还大方的给他奖励了 1 万美元“赏金”。

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

      黑客“治病救人”

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

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

    《GTA 5》祖传“屎山”代码终于修复:立功黑客背景曝光

      一位黑客大哥实在忍不了,于是决定开扒 GTA 5 的代码,看看到底是哪里出了问题。首先,他用 Windows 任务管理器,来判断联机版 GTA 5 在启动时,都调用了哪些计算机资源。

    《GTA 5》祖传“屎山”代码终于修复:立功黑客背景曝光

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

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

      黑客大哥说:我闻到一股烂代码的味道…..

      为了找出到底那一部分程序卡住了 CPU,他使用了工具 Luke Stackwalker,对 CPU 任务堆栈进行采样分析。沿着调用栈往下走,发现问题出在一个 sscanf 函数上。

    《GTA 5》祖传“屎山”代码终于修复:立功黑客背景曝光

      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》祖传“屎山”代码终于修复:立功黑客背景曝光

      现在,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星领走更多奖金。

    《GTA 5》祖传“屎山”代码终于修复:立功黑客背景曝光

    *** 次数:10600 已用完,请联系开发者***

    1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!384324621@qq.com
    2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理,有奖励!
    3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
    4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有★币奖励和额外收入!

    IO 源码网 » 《GTA 5》祖传“屎山”代码终于修复:立功黑客背景曝光

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    IO源码吧
    一个高级程序员模板开发平台

    发表评论

    • 75会员总数(位)
    • 10312资源总数(个)
    • 81本周发布(个)
    • 20 今日发布(个)
    • 377稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情