久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

GF漢化詳細(xì)教程[內(nèi)核修改篇]

 成長(zhǎng)的園地.a 2011-10-04

經(jīng)過(guò)前邊的字庫(kù)改造,,已經(jīng)完成了一半的工作,,剩下最關(guān)鍵的顯示漢字部分了。字庫(kù)已經(jīng)是中文的了,,但是能讓中文顯示出來(lái)卻不是件容易的事,。不信現(xiàn)在進(jìn)游戲試試,看到的中文全是亂碼。為何,?因?yàn)橹形氖请p字節(jié),,兩個(gè)字節(jié)才代表一個(gè)漢字。游戲顯示英文字體的函數(shù)是為顯示單字節(jié)的英文設(shè)計(jì)的,,是不適合顯示中文的,必須要修改,。因?yàn)椴豢赡艿玫匠绦虻脑创a,,修改方法只能采用比較極端的修改可執(zhí)行文件的方法了,即所謂的逆向工程,。

于是操起常用的調(diào)試工具Ollydbg開始調(diào)試游戲,。經(jīng)過(guò)2天的不懈努力,終于找到了顯示字庫(kù)的函數(shù),,以下列出讀取字符的函數(shù)部分代碼:

004AA909   8A08          mov cl,byte ptr ds:[eax]       

004AA90B   40            inc eax                                                                      

004AA90C  8BF1           mov esi,ecx                    

004AA90E  8BD6           mov edx,esi                    

004AA910  F7DA           neg edx                        

004AA912  1BD2           sbb edx,edx                    

004AA914  23D0           and edx,eax                    

004AA916  85F6           test esi,esi                   

004AA918  8917           mov dword ptr ds:[edi],edx     

 

函數(shù)開始Eax指向腳本文件grim.tab文件中某行腳本的第一個(gè)字符,。例如主菜單”Control Help”中的C位置。004AA909一行的意圖很明顯,,讀取字符串中當(dāng)前位置的的一個(gè)字符的ASCII碼到放到cl中,,然后Eax加一,指向下一個(gè)字符,。然后會(huì)將此cl中的字符當(dāng)作參數(shù),,調(diào)用另外一個(gè)顯示字符的函數(shù),完成讀取字庫(kù)文件并顯示字符到屏幕的功能,。

我們需要對(duì)此部分做改造,。如當(dāng)前Eax指向一個(gè)英文字符,則還沿用程序原來(lái)的部分,,讀取一個(gè)字節(jié)到cl,,并使Eax增一;如當(dāng)前Eax指向一個(gè)中文漢字,,則需要程序讀取2個(gè)字節(jié)到cx中,,并使Eax增二,指向下一個(gè)字符的正確位置,。那么如何判斷當(dāng)前Eax指向的是一個(gè)英文字符還是中文漢字呢,,GB2312漢字的編碼有一個(gè)的特性:兩個(gè)字節(jié)編碼最高位(8)一定是1。每次讀取字符時(shí),,先判斷第8位是0還是1,,如果是1一定是中文,是0則是英文,。

有了思路,,對(duì)讀取字符的函數(shù)做如下修改,紅色為新增代碼:

004AA909       8A08         mov cl,byte ptr ds:[eax] 

004AA90B       40            inc eax                   

                      f6c180       test cl,80h              

                     7406           je 4aa90c                

                     c1e108       shl ecx,08h              

                      8a08          mov cl,byte ptr ds:[eax] 

                      40              inc eax                            
       004AA90C     8BF1           mov esi,ecx               

004AA90E     8BD6           mov edx,esi              

004AA910     F7DA           neg edx                  

004AA912     1BD2           sbb edx,edx              

004AA914     23D0           and edx,eax              

004AA916     85F6           test esi,esi             

004AA918     8917           mov dword ptr ds:[edi],edx

 

先放Eax一個(gè)字節(jié)到cl中,然后判斷cl的第8位是否為1,,如果是0,,說(shuō)明是英文字符,則按程序原來(lái)的進(jìn)度跳轉(zhuǎn)到004AA90C這行的代碼繼續(xù)執(zhí)行,。如果是1,,則要將cl向左移8位,為漢字第二個(gè)字節(jié)留下位置,,然后再取一次Eax的值,,把第二個(gè)字節(jié)放到cl中。最后Eax增一(Eax增了兩次1),。此時(shí)Ecx的數(shù)值正是一個(gè)漢字兩個(gè)字節(jié)的內(nèi)碼,。Finish!

然后用Uedit打開可執(zhí)行文件,找到一段nop(90)比較多的位置,,最后將紅色部分的機(jī)器碼加到合適位置就OK了,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多