最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

MC源碼那些事

2019-10-08 15:08 作者:祿存天璣  | 我要投稿

19w36a版本開始,Mojang決定放出自己的代碼混淆映射表,不少消息也隨之傳出:MC開源了?Forge退役了?源碼看起來更方便了?本人準(zhǔn)備在這篇專欄里進(jìn)行一定的解釋。詳細(xì)的原理和技術(shù)細(xì)節(jié)不會(huì)過于深入,一是自己學(xué)藝不精,二是這些領(lǐng)域比我更有發(fā)言權(quán)的大有人在。這里只算是科普和拋磚引玉。

首先,反混淆表是啥?

首先有必要簡單解釋一下混淆映射表是什么東西:

我們一般學(xué)習(xí)編寫的代碼,是“源代碼”,它們對于人來說有易辯識(shí)的邏輯結(jié)構(gòu),也方便計(jì)算機(jī)處理。

源代碼會(huì)被計(jì)算機(jī)分析,再變成可以快速處理執(zhí)行的“字節(jié)碼”,這個(gè)過程是Java的編譯。無關(guān)重要的變量名,注釋都會(huì)舍棄。

在編譯的時(shí)候,如果要顧及法律層面(例如不想讓其它公司知道自己代碼的思路),還會(huì)對類和方法的名稱進(jìn)行重命名,降低可讀性。這一步叫做“混淆”。

字節(jié)碼被反編譯之后,雖然注釋和名稱都會(huì)丟失,但是邏輯關(guān)系還在??梢愿鶕?jù)常量,外部包的使用,邏輯,文件操作來理解源代碼的思路,重新命名成人能快速理解的名字。這是“反混淆”。

混淆映射表可以把反編譯后的代碼還原回源碼的命名風(fēng)格。一般人們用它保存反混淆的結(jié)果。

以上便是粗略的解釋。有了官方的映射表以后,反編譯者不需要花費(fèi)精力找出某個(gè)代碼到底是干啥的,可以專心分析代碼產(chǎn)生的效果。這也正是Mojang在官網(wǎng)上所說的:(https://www.minecraft.net/zh-hans/article/minecraft-snapshot-19w36a)

“This means that anyone who is interested may deobfuscate the game and find their way around the code without needing to spend a few months figuring out what’s what.”

所以說,MC開源了?

只關(guān)心結(jié)果的話,是的。

但是Mojang和微軟并沒有更改任何代碼相關(guān)的法律條款。使用者仍然需要承擔(dān)法律風(fēng)險(xiǎn)。(參見https://www.minecraft.net/zh-hans/article/minecraft-snapshot-19w36a)

不過Mojang對于mod和其它用途的逆向工程一直是默許,甚至歡迎的。之前的minecon邀請了幾位知名國外modder,這次又邀請了scicraft成員,不難看出他們的態(tài)度。之前也對mc的幾個(gè)庫進(jìn)行了開源,這次的映射表想必也可以放心使用。

另外,開源是放出源代碼,而要使用映射表,則需要先進(jìn)行反編譯,再映射。反編譯出來的代碼不保證一定能再編譯成字節(jié)碼...

由此看來,開源作為口頭上不精確的表達(dá),問題不大。書面使用的時(shí)候應(yīng)該進(jìn)行注意。

Forge退役了嗎?

首先,問出這個(gè)問題說明不懂什么是Forge。真正著手源碼反編譯反混淆的項(xiàng)目叫做MCP(MinecraftCoderPack)。為了給許許多多的mod提供一個(gè)兼容高,bug少,做起來方便的平臺(tái),于是就有了基于MCP是Forge。以上是MCP和Forg的簡單辨析。

就算你知道源代碼是啥,這個(gè)mod改一點(diǎn),那個(gè)mod改一點(diǎn),遲早要沖突,那么就要Forge來協(xié)調(diào)。LiteLoader是做這個(gè)的,F(xiàn)abric(基于Yarn進(jìn)行反混淆)也是做這個(gè)的。

就算是MCP本身也不會(huì)退役。它已經(jīng)采取和官方不同的一套命名規(guī)范,大規(guī)模改動(dòng)去迎合官方可能性不高。但是有了官方映射表,新版本的跟進(jìn)會(huì)方便一些。

這么說來,反混淆的放出簡化了不少工作,但并不會(huì)對現(xiàn)有的社區(qū)生態(tài)有較大的改變。

個(gè)人推測這是mojang為了吸引技術(shù)玩家進(jìn)駐高版本拋出的一個(gè)橄欖枝。但是由于每個(gè)版本都會(huì)改變不少東西,F(xiàn)orge還得辛辛苦苦做API,技術(shù)玩家還得重構(gòu)紅石機(jī)器研發(fā)新思路,此舉可能收效甚微。

不過就算這樣,技術(shù)玩家終于不用對著高版本里奇怪的變量名抓耳撓腮了。雖然一直說著neverupdate,但是能發(fā)掘出更多的新特性,也是挺有意思的(然后發(fā)掘完了繼續(xù)neverupdate)

Mojang公開混淆映射表,有意義嗎?


MC源碼那些事的評論 (共 條)

分享到微博請遵守國家法律
林周县| 富川| 东源县| 襄樊市| 阿瓦提县| 天津市| 施秉县| 若尔盖县| 长子县| 霸州市| 厦门市| 乌拉特前旗| 隆尧县| 平山县| 康乐县| 手机| 马尔康县| 泽库县| 崇阳县| 青浦区| 黑河市| 泗洪县| 长泰县| 安义县| 于都县| 伊川县| 密云县| 嵊州市| 土默特右旗| 大余县| 宜州市| 新巴尔虎右旗| 五峰| 泰和县| 许昌市| 白山市| 潮安县| 花莲县| 尤溪县| 固安县| 武乡县|