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

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

淺談Undertale修改—— 什么是GMS反編譯,什么是data.win

2022-12-24 17:06 作者:真是滑稽了啊  | 我要投稿


一、反編譯是什么

????什么是反編譯?代碼經(jīng)過(guò)編譯變成可執(zhí)行文件,反編譯是編譯的逆過(guò)程。簡(jiǎn)單來(lái)說(shuō),就像將食材制作成食物,而反編譯則能通過(guò)食物的最終形態(tài)得到食材的數(shù)量以及種類(lèi),甚至烹飪前的一切信息

????我們已知Undertale這款游戲是由Gamemaker這個(gè)游戲引擎制作的,游戲的不同版本也使用了不同的Gamemaker版本(以下簡(jiǎn)稱(chēng)gm),例如:demo版使用gm8,正式發(fā)布的第一個(gè)版本使用gamemaker studio 1.4(以下簡(jiǎn)稱(chēng)gms),switch版使用gamemaker studio 2(以下簡(jiǎn)稱(chēng)gms2)。不同版本的gm使用了不同構(gòu)成程序的方式,因此反編譯的方式也是不同的,以下將會(huì)粗略介紹

二、Gamemaker8反編譯

????gm8已經(jīng)是一個(gè)有13年歷史老游戲引擎,其簡(jiǎn)單的構(gòu)成方式以及編譯程序的原理,使得我們能夠反編譯程序一窺程序的工程全貌

????在gm8編譯程序得到的可執(zhí)行文件中,包括兩部分的數(shù)據(jù):一部分是游戲工程文件的完整儲(chǔ)存,包括一切游戲數(shù)據(jù)(代碼中的注釋也會(huì)被囊括在內(nèi));另一部分是一個(gè)能夠解析游戲數(shù)據(jù),執(zhí)行并解釋代碼的運(yùn)行器(Runner)

????利用GM8Decompiler可以將前一部分的數(shù)據(jù)轉(zhuǎn)化為gm8的標(biāo)準(zhǔn)工程文件.gmk

反編譯得到的工程和源工程理論上是等效的,包括注釋等都會(huì)得到保留

利用該程序,我們同樣可以得到undertale demo版的gmk文件

三、Gamemaker Studio 數(shù)據(jù)格式、編譯

????GMS是對(duì)老gm8的完全重置,其編譯原理與gm8沒(méi)什么共同點(diǎn)。下面將簡(jiǎn)要介紹gms的編譯過(guò)程、游戲程序運(yùn)行、data格式等(以普通編譯方式為例)。

????1.Data.win與Runner

????????gms編譯程序主要會(huì)得到兩個(gè)文件:

????????①游戲可運(yùn)行程序:一個(gè)根據(jù)Runtime(gms編譯套件)中的runner.exe,結(jié)合游戲工程設(shè)置等生成的一個(gè)被替換圖標(biāo)后的程序文件,利用它可以啟動(dòng)游戲。Runner是一個(gè)解析&運(yùn)行程序,它會(huì)解析data.win中的數(shù)據(jù)并運(yùn)行其中的代碼。這也是為什么ut的各種手機(jī)版存在的原因,這些手機(jī)端的作者(以安卓為例),用gms生成了一個(gè)適合ut運(yùn)行的.apk,之后把ut的data.win改個(gè)名扔進(jìn).apk文件內(nèi),再放進(jìn)音樂(lè)等,安裝到手機(jī)上即可運(yùn)行。gms在各個(gè)平臺(tái)生成的游戲文件本質(zhì)上都是runner配同樣的數(shù)據(jù)文件xxxx.win/droid/......的組合(html5是轉(zhuǎn)為js語(yǔ)言,原理是不同的)

????????②data.win,gms游戲的標(biāo)準(zhǔn)數(shù)據(jù)文件,包括所有的游戲邏輯部分以及非邏輯部分的數(shù)據(jù),理論上,只要你有了游戲的這個(gè)文件,就有了整個(gè)游戲,只需一個(gè)runner即可運(yùn)行。data的內(nèi)部結(jié)構(gòu)包括一些數(shù)據(jù)塊(Chunk)和標(biāo)記性數(shù)據(jù)。Chunk有LANG, EXTN, SOND, AGRP, SPRT, PATH, SCPT, FONT, OBJT, ROOM, FUNC, STRG, TXTR, VARI, CODE等

????2.bytecode

????????是一種執(zhí)行的中間碼,runner能夠讀取這些中間編碼并執(zhí)行,它是由工程中的Gamemaker Language(以下簡(jiǎn)稱(chēng)gml)轉(zhuǎn)化而來(lái),失去了縮進(jìn)等格式特征,注釋也會(huì)在轉(zhuǎn)化過(guò)程中被直接跳過(guò),因此我們無(wú)法根據(jù)bytecode完全反推原來(lái)的代碼形態(tài)。同時(shí),不同的gms版本有著不同的bytecode版本

UTMT得到的bytecode(注:這不是原貌,是經(jīng)過(guò)工具解析的)

????3.編譯

????? ? 第一步是保存游戲工程,隨后GMAssetCompiler會(huì)解析數(shù)據(jù),編譯游戲內(nèi)Asset。結(jié)束后,gms會(huì)將編譯結(jié)果,對(duì)應(yīng)到各個(gè)Chunk內(nèi),將Chunk寫(xiě)入data.win。編譯完成,生成可執(zhí)行程序,進(jìn)程結(jié)束。臨時(shí)運(yùn)行的游戲會(huì)在C:\Users\用戶(hù)名\AppData\Local文件夾內(nèi)儲(chǔ)存臨時(shí)數(shù)據(jù)(包括data等文件)

四、Gamemaker Studio?反編譯

????1. Altar.NET

????????很老的一個(gè)工具,有批量提取功能,也支持新版本的ut。太老了,不推薦使用

????????https://gitlab.com/PoroCYon/Altar.NET

????2.?UndertaleTools

????????同樣很老的工具,對(duì)字體的支持比較好,適合做游戲翻譯

????????https://github.com/fjay69/UndertaleTools

????3.?GMdsam

????????一個(gè)比較完善的反編譯工具,只支持老版本ut,能得到游戲的各種數(shù)據(jù),也提供比較準(zhǔn)確的bytecode反編譯功能

????4.UndertaleMod Tool

????????很好用的反編譯工具,目前是功能最強(qiáng)大的工具,有各種Script增強(qiáng)其功能,能修改游戲的各項(xiàng)數(shù)據(jù),包括增添刪除代碼,增加貼圖房間等

????這些反編譯工具的核心功能都是解析data.win文件,雖然data.win在gms生成的不同運(yùn)行平臺(tái)的程序里名字不同,但是他們的核心數(shù)據(jù)都是一樣的。

淺談Undertale修改—— 什么是GMS反編譯,什么是data.win的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
苍南县| 澳门| 区。| 天等县| 左贡县| 宜川县| 拉萨市| 榕江县| 阳春市| 安陆市| 隆化县| 松溪县| 太康县| 夏津县| 东海县| 海城市| 汪清县| 安徽省| 河南省| 化隆| 华容县| 辽阳市| 高台县| 治县。| 嘉荫县| 昭平县| 灵石县| 醴陵市| 斗六市| 仙游县| 宁南县| 桐庐县| 平南县| 台中市| 敦化市| 宾阳县| 宽甸| 海林市| 房产| 垣曲县| 安庆市|