不少玩家抱怨GTA V的线上版本游戏读取速度太慢,而有黑客终于忍不住手,使用工具查明读碟过慢的原因。最后发现竟是程序代码一个函数设置失误,令到处理器处理多达4分多钟,总共实行了19.8亿次多余的指令!
这名没有留下身份消息的黑客,发现在他的计算机上,使用了6分钟才能进入GTA V Online。其中有4分多钟程序严重耗用了处理器资源,于是悖使用了Luke Stackwalker处理器任务分析工具,发现在读碟过程中,有两个函数占用大量处理器资源。再往下找,他找到了一个名为“sscanf”的函数,它的功能是读取格式化的字符串中的资料。在GTA V这个函数需要读取约63000多个JSON文件,容量在10MB左右。
不过此函数却出现严重程序错误,第一个问题是程序需要读取这10MB文件的每一个字符,再传回结果,一字不漏的完成扫描此10MB文件。
另一个问题是程序会把63000多个字符串存储回到一个名为“item”的对象。然而程序却出现一个不名的繁复动作:程序每次存储数值到“item”之前,一个if指令逐一比较item内所有项目hash值,检查是否出现在某一个列表中。
黑客计算这个if动作,将要实行(63000^ 2 63000)/2次,即等如19.8亿次。他极怀疑程序设计,为何不用hash map去取代此繁复的工作。
这位黑客更改了此两个程序的设计1)不读取63000多个字符串的每个字符,只读取字符串的长度2)跳过重复的检查,利用hash map插入项目。结果他令GTA V Online的读取时间由6分钟变成1分50秒。
目前他把反汇编工具上传到GitHub分享,不过由于每款游戏都会表明不容许玩家自行反汇编游戏程序,故各位最好还是乖乖等候厂方的更新吧。