USDT第三方支付

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

ADVERTISEMENT

一支菸的时间,侠盗猎车手Online终于打开了。 「7年了!GTA 5 Online载入照样这么慢??」

Please wait forever to play

Reddit、Steam、HackerNews上,无数玩家吐槽埋怨……

进游戏少则等5、6分钟,多则20分钟。

终于,一个骇客着实忍不了,用反组译编辑器逐条查看运行情形,终于找到缘故原由。

原来,R星(游戏开发商RockStar)写的程式码太没有效率,载入时,一个if语句竟然循环了19.8亿次….

谁占用大量时间?

载入GTA 5 Online到底有多慢?

硬体拉满的土豪玩家请无视Reddit相关群组提议的观察中,跨越80%的玩家,都要等3分钟以上,有的甚至跨越15分钟。

而且,从7年前Online上线到今天,这个情形丝毫没有改善。

脾性欠好一点的,早就最先骂脏话……

但奇怪的是,若是你选择是故事模式(单机版),载入就会快许多,感受甚至像两个差别的工作室开发的游戏。

以这位骇客的例子,他自己的硬体规格如下:

CPU,是老而弥坚的AMD FX-8350,2012年上市,接纳「推土机」架构,超频潜力惊人。显示卡照样GTX 1070。

这样今天看起来老旧的设置,打开单机版GTA 5需要1分10秒,而载入Online版则6分钟起。

骇客用了最简朴的Windows义务管理器,来判断Online版GTA 5在启动时,都使用了哪些电脑资源。

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

可以看到,Online版GTA 5,载入时挪用大量CPU资源至少长达4分钟之久。

而同时,记忆体、GPU、硬碟的使用情形几乎没有明显变化。以是,问题有很大的机率是出在程式码上面。

R星程式码写太烂!

骇客在开扒R星程式码之前,就说:

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

为了找出到底那一部门程式卡住了CPU,他使用了工具Luke Stackwalker,对CPU义务客栈举行采样剖析。

Luke Stackwalker对于闭源应用程式,可以转存正在运行的历程客栈,和当前指令指针的位置,以一定时间距离确立一个挪用树。

,

Usdt第三方支付接口

菜宝钱包(www.caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

,

最后将数据整合,就可以获得程式运行统计数据。

从效果上看,一共有两个函数「卡住」了CPU:

于是他使用专业的程式码拆解工具,把GTA 5来了一个「开膛破肚」。沿着挪用栈往下走,发现问题出在一个sscanf函数上。

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

这个档案到底是干什么用的?这位老兄推测,这可能是游戏内购商铺的相关内容。

在详细运行时,sscanf对于每个有效值,逐个读取每一个字符,然后返回效果,之后指针移向下一个值,循环往复……直到把10M文件所有扫一遍。

再看第二个问题,这是一个存储下令,对像是item,详细是什么不得而知。

然则保留前,有一个if语句,逐一对照item内项目的哈希值,检查它们是否出现在某一列表中。

凭据他的盘算,这一步if,要执行(63000^2+63000)/2 = 1984531500次!

没错,守候载入前的十多分钟里,GTA 5用你的CPU,执行了19.8亿次if下令。

云云简朴粗暴的编程思绪,让这位老哥啼笑皆非:

既然对像有唯一杂凑函式,那为什么不用hash map???

(hashmap凭据hashCode值存储数据,大多数情形下可以直接定位到它的值,因而具有很快的存取速率,但遍历顺序不确定。)

至于为什么这样,有网友推测最最先,if的循环次数并没有这么多,而是随着开发,条目不停增多,最后到了积重难返的境界。

而之前的程式码结构,谁也不愿意去动。

就这样,19.8亿次if,一遍遍在世界各地玩家cpu上上演.....

问题解决,载入时间节约70%

至于第一个问题,骇客接纳hook大法,纷歧一读取字符串,而是:

hook strlen

「快取」字符串起始和当前长度。

若是在字符串范围内函数在此被挪用,返回快取的值。至于if语句问题,就更直接了——完全跳过重复检查,行使hash map插入项目,由于这些值是唯一的。
最后的效果如下:


现在,GTA 5Online版载入时间,从原来的6分钟,下降到现在的1分50秒!而且,用的照样七八年前的硬体规格。
在此,应该手动@R星:你学废了吗?

这位骇客在文章中没有留下任何身份讯息,也没有透露用的反组译工具,然则做好事不留名的他,把打好包的工具上传到了Github,玩家透过一行程式码就能下载:

git clone —rec​​urse-submodules https:// github.com/tostercx/GTA O_Booster_PoC

之后,把dll文件复制到游戏根目录下就OK了!

usdt收款平台声明:该文看法仅代表作者自己,与本平台无关。转载请注明:怎么充值usdt(www.caibao.it):侠盗猎车手Online一个if循环19.8亿次,而且7年没人去修它,骇客随手解决这个问题了
评论关闭

分享到:

usdt法币交易api接入(www.caibao.it):突发!又是杀猪盘惨案!6分钟闪崩跌停,最高亏14%!群里先生声称全仓入,没4个涨停提头来见...