專(zhuān)利名稱(chēng):一種對(duì)軟件中的數(shù)據(jù)進(jìn)行替換的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件編程技術(shù),具體地說(shuō),涉及一種對(duì)軟件中的數(shù)據(jù)進(jìn)行替換的方法。
背景技術(shù):
計(jì)算機(jī)軟件中包括操作命令和數(shù)據(jù)。軟件開(kāi)發(fā)商編制軟件時(shí),經(jīng)常存在許多彼此功能基本相同的軟件,這些軟件執(zhí)行功能基本相同,因此具有相同的操作命令,但是,同樣的操作命令所操作的數(shù)據(jù)對(duì)象往往并不相同。針對(duì)上述情況,軟件開(kāi)發(fā)廠(chǎng)商為避免重復(fù)工作,采取了一些措施實(shí)現(xiàn)對(duì)同一個(gè)軟件的數(shù)據(jù)部分進(jìn)行替換,以便使同一個(gè)軟件能夠?yàn)榉磸?fù)使用。
例如,現(xiàn)有技術(shù)中一種廣泛使用的替換方式是利用外部軟件進(jìn)行替換。對(duì)應(yīng)于可替換軟件,外部軟件中具有相應(yīng)的資源索引。當(dāng)需要讀取可替換軟件中的可替換數(shù)據(jù)時(shí),只需要調(diào)取相應(yīng)的外部軟件,根據(jù)所述索引獲得對(duì)應(yīng)的數(shù)據(jù)即可。例如可替換軟件A,其可替換數(shù)據(jù)為顯示字符a,b,c,對(duì)應(yīng)的索引為001,002,003,外部軟件為B,C,分別是中文版和英文版的,B中索引001代表“我”,002代表“你”,003代表“他”,C中索引001代表“me”,002代表“you”,003代表“him”。當(dāng)需要讀取該可替換軟件中的可替換內(nèi)容a,b,c時(shí),只需根據(jù)對(duì)語(yǔ)言的選擇而調(diào)用B或C即可。上述現(xiàn)有技術(shù)的缺陷在于,這種替換方式是在源程序中實(shí)現(xiàn)的,而程序最終需要編譯成為二進(jìn)制形式的可執(zhí)行文件才能執(zhí)行,因此,這種替換方式需要對(duì)程序重新進(jìn)行編譯,不能直接利用已經(jīng)編譯完成的二進(jìn)制文件,造成了資源和時(shí)間的浪費(fèi)。
在Windows環(huán)境下進(jìn)行資源數(shù)據(jù)的替換工作時(shí),開(kāi)發(fā)人員通?;赗esource Hack的原理來(lái)完成,Resource Hack的原理為在Windows環(huán)境下,軟件中的二進(jìn)制文件是PE格式的,讀取二進(jìn)制文件后,可以對(duì)其中特定的數(shù)據(jù)進(jìn)行解析、拆分?;谠撛?,Resource Hack可以直接查看、修改軟件的菜單、對(duì)話(huà)框、字符串表等數(shù)據(jù)資源。但Resource Hack只能用來(lái)替換與操作界面相關(guān)的數(shù)據(jù),而且只能針對(duì)PE格式的二進(jìn)制文件。因此,這種方式有很大的局限性。
發(fā)明內(nèi)容
針對(duì)上述缺陷,本發(fā)明解決的技術(shù)問(wèn)題在于,提供一種可以自定義可替換內(nèi)容并且直接對(duì)二進(jìn)制文件進(jìn)行數(shù)據(jù)替換的對(duì)軟件中的數(shù)據(jù)進(jìn)行替換的方法。
本發(fā)明一種對(duì)軟件中的數(shù)據(jù)進(jìn)行替換的方法,包括以下步驟11)編譯獲得可替換數(shù)據(jù)設(shè)置有標(biāo)識(shí)的二進(jìn)制文件;12)根據(jù)所述標(biāo)識(shí),檢索獲得可替換數(shù)據(jù)在二進(jìn)制文件中的位置;13)根據(jù)所述可替換數(shù)據(jù)在二進(jìn)制文件中的位置,將所需數(shù)據(jù)替換原數(shù)據(jù)。
優(yōu)選地,所述步驟11)包括在編制源程序時(shí),將所述標(biāo)識(shí)與可替換數(shù)據(jù)在源程序語(yǔ)句上相連結(jié);編譯所述源程序,獲得可替換數(shù)據(jù)設(shè)置有標(biāo)識(shí)的二進(jìn)制文件。
優(yōu)選地,所述標(biāo)識(shí)是自定義的由多個(gè)字節(jié)組成的字符串,或者是自定義的由一定長(zhǎng)度的數(shù)據(jù)組成的標(biāo)識(shí)串。
優(yōu)選地,所述標(biāo)識(shí)具有全局唯一性。
優(yōu)選地,所述具有全局唯一性的標(biāo)識(shí)具體是采用全局統(tǒng)一標(biāo)識(shí)符自定義的標(biāo)識(shí)。
優(yōu)選地,所述可替換數(shù)據(jù)為多個(gè),每個(gè)可替換數(shù)據(jù)分別具有各自獨(dú)立的全局統(tǒng)一標(biāo)識(shí)符作為標(biāo)識(shí)。
優(yōu)選地,所述可替換數(shù)據(jù)為多個(gè),其中連續(xù)的可替換數(shù)據(jù)可以采用同一個(gè)全局統(tǒng)一標(biāo)識(shí)符作為標(biāo)識(shí)。
優(yōu)選地,所述可替換數(shù)據(jù)與全局統(tǒng)一標(biāo)識(shí)符的關(guān)系可采用一個(gè)對(duì)照表來(lái)記錄。
優(yōu)選地,所述步驟12)包括打開(kāi)帶有可替換數(shù)據(jù)標(biāo)識(shí)的二進(jìn)制文件;讀取所述二進(jìn)制文件,并在該文件中檢索所述可替換數(shù)據(jù)的標(biāo)識(shí);根據(jù)所述獲得的標(biāo)識(shí),確定可替換數(shù)據(jù)在該二進(jìn)制文件中的位置。
本發(fā)明的基本思路是,對(duì)于二進(jìn)制文件中需要替換的數(shù)據(jù),采用特定標(biāo)識(shí)表示出其在二進(jìn)制文件中的長(zhǎng)度和位置。當(dāng)需要替換時(shí),則根據(jù)該標(biāo)識(shí)獲得所要替換的數(shù)據(jù)在二進(jìn)制文件中的長(zhǎng)度和位置,進(jìn)行所述替換。所述的標(biāo)識(shí)可一次采用全局統(tǒng)一標(biāo)識(shí)符進(jìn)行替換。
與現(xiàn)有技術(shù)相比,本發(fā)明提供的技術(shù)方案可以直接針對(duì)二進(jìn)制文件進(jìn)行數(shù)據(jù)替換,而無(wú)需在源程序中進(jìn)行,這樣就免去了重新進(jìn)行編譯的過(guò)程;也適用于使用者需要進(jìn)行數(shù)據(jù)替換,而程序開(kāi)發(fā)者不希望其獲知源程序的場(chǎng)合。相比與采用Resource Hack原理進(jìn)行替換的方式,該方法不受二進(jìn)制文件的格式的限制,也不受數(shù)據(jù)內(nèi)容的限制。
圖1是本發(fā)明第一實(shí)施例的總體流程圖;圖2是本發(fā)明第一實(shí)施例的標(biāo)準(zhǔn)軟件的二進(jìn)制編碼文件;圖3是本發(fā)明第一實(shí)施例步驟S1的流程圖;圖4是本發(fā)明第一實(shí)施例步驟S2的流程圖;圖5是本發(fā)明第一實(shí)施例進(jìn)行數(shù)據(jù)替換后獲得的二進(jìn)制編碼文件。
具體實(shí)施例方式
本發(fā)明提供的軟件數(shù)據(jù)替換方法,其基本思路是在標(biāo)準(zhǔn)軟件中,采用全局惟一的標(biāo)識(shí)標(biāo)記需要替換的數(shù)據(jù),通過(guò)該標(biāo)識(shí)可以定義該數(shù)據(jù)在二進(jìn)制文件中的位置和長(zhǎng)度。需要生成替換軟件時(shí),根據(jù)二進(jìn)制文件中設(shè)置的所述標(biāo)識(shí),查找到需要替換的數(shù)據(jù),并且使用新的數(shù)據(jù)替換所述數(shù)據(jù)。
請(qǐng)參看圖1,為本發(fā)明第一實(shí)施例的總體流程圖。
如圖1所示,該實(shí)施例提供的方法包括兩大步驟步驟S1,編譯可替換數(shù)據(jù)帶有標(biāo)識(shí)的二進(jìn)制文件。
步驟S2,根據(jù)二進(jìn)制文件中的所述標(biāo)識(shí)進(jìn)行數(shù)據(jù)替換。
為了方便進(jìn)行說(shuō)明,現(xiàn)在結(jié)合一個(gè)在屏幕上輸出“Hello World!”的程序說(shuō)明該實(shí)施例。以下為該程序的源程序,圖2為該程序編譯后獲得的二進(jìn)制編碼文件,以及以ASCII碼讀取該二進(jìn)制編碼的內(nèi)容。
//Replace.cpp:Defines the entry point for the console application...........1// 2#include″stdafx.h″3
#include<Windows.h> 4typedef struct_ES_REPLACE_DATA5{ 6GUID Loc_flag;7DWORD ulStructSize; 8char szString[40];9}ES_REPLACE_DATA; 10ES_REPLACE_DATA ReplaceData= 11{ // GUID Loc_flag; 12//{CD6A1906-400B-46c2-9DCB-918C135BA910} 13{0xcd6a1906,0x400b,0x46c2,0x9d,0xcb,0x91,0x8c,0x13,0x5b,0xa9,0x10},14//DWORD ulStructSize; 15sizeof(ES_REPLACE_DATA), 16// string to print; 17(″Hello World!\n″), 18};19int main(int argc,char*argv[])20{ 21printf(ReplaceData.szString); 22return 0; 23} 24該程序中,需要在屏幕上輸出的“Hello World!”是需要替換的數(shù)據(jù)。也就是說(shuō),希望還可以利用該程序的二進(jìn)制文件,直接將所述的“Hello World!”在屏幕上輸出。
如圖3所示,該圖為步驟S1的具體步驟。以下結(jié)合該流程圖進(jìn)行說(shuō)明。為了更加方便的說(shuō)明,該實(shí)施例是對(duì)應(yīng)于上述程序提供的。
步驟S101,確定需要替換的可替換數(shù)據(jù)。
在該例中,可替換數(shù)據(jù)是在屏幕上輸出的字符串“Hello World!”。
步驟S102,確定自定義標(biāo)識(shí)。
所述自定以標(biāo)識(shí)需要具有全局唯一性,以免與其他數(shù)據(jù)混淆,具體可以利用全局統(tǒng)一標(biāo)識(shí)符GUID獲得可替換數(shù)據(jù)“Hello World!“的標(biāo)識(shí)。在本實(shí)施例中,通過(guò)使用全局統(tǒng)一標(biāo)識(shí)符函數(shù)GUID獲得源程序中的字符串CD6A1906-400B-46c2-9DCB-918C135BA910。全局統(tǒng)一標(biāo)識(shí)符的英文是Globally Unique Identifier,縮寫(xiě)為GUID。該標(biāo)識(shí)符由一個(gè)特殊的算法產(chǎn)生128位的數(shù),采用該種算法可以保證不產(chǎn)生重復(fù)的標(biāo)識(shí)。這樣就可以避免由于標(biāo)識(shí)重復(fù)而發(fā)生錯(cuò)誤的替換。
步驟S103,在編寫(xiě)源代碼時(shí),在可替換數(shù)據(jù)的代碼前寫(xiě)入自定義標(biāo)識(shí)符。具體到上述實(shí)際程序,就是在可替換字符串“Hello World!”的代碼前寫(xiě)入自定義標(biāo)識(shí)符“CD6A1906-400B-46c2-9DCB-918C135BA910”作為自定義標(biāo)識(shí)。
在源程序的第5到第10行,定義一個(gè)數(shù)據(jù)類(lèi)型ES_REPLACE_DATA,該數(shù)據(jù)類(lèi)型包括三個(gè)數(shù)據(jù),數(shù)據(jù)1是全局統(tǒng)一標(biāo)識(shí)符;數(shù)據(jù)2是一個(gè)雙字節(jié)類(lèi)型,標(biāo)識(shí)本數(shù)據(jù)的長(zhǎng)度;數(shù)據(jù)3是字符類(lèi)型。
在源程序的第11到第19行,使用上述數(shù)據(jù)類(lèi)型ES_REPLACE_DATA定義變量ReplaceDate,并為該變量賦值。其中,第14行程序就是全局統(tǒng)一標(biāo)識(shí)符“CD6A1906-400B-46c2-9DCB-918C135BA910”。第18行內(nèi)容是需要打印的“Hello Word!”。這個(gè)源程序被編譯后,其二進(jìn)制碼就會(huì)在所述的需要替換的內(nèi)容“Hello World!“之前出現(xiàn)全局統(tǒng)一標(biāo)識(shí)符“CD6A1906-400B-46c2-9DCB-918C135BA910”。只要在源程序中,全局統(tǒng)一標(biāo)識(shí)符能夠與可替換數(shù)據(jù)連接,編譯為二進(jìn)制碼后,兩者的二進(jìn)制碼就會(huì)連接,產(chǎn)生標(biāo)識(shí)作用。
步驟S104,編譯代碼,生成二進(jìn)制形式的標(biāo)準(zhǔn)軟件。
在編譯代碼時(shí),源程序中定義變量ReplaceDate的程序段會(huì)被逐行編譯,這樣,在編譯后的二進(jìn)制文件中,所述的全局統(tǒng)一標(biāo)識(shí)符“CD6A1906-400B-46c2-9DCB-918C135BA910”就會(huì)在需要可替換數(shù)據(jù)“Hello World!”之前出現(xiàn)。
如圖2所示,在二進(jìn)制文件中,“CD6A1906-400B-46c2-9DCB-918C135BA910”之后,緊接著出現(xiàn)可替換數(shù)據(jù)“Hello World!”的ASCII碼符號(hào)。經(jīng)過(guò)上述處理獲得二進(jìn)制形式的標(biāo)準(zhǔn)軟件中,就能夠通過(guò)所述標(biāo)識(shí)符識(shí)別需要替換的內(nèi)容。在所述二進(jìn)制文件中,因?yàn)樵诖鎯?chǔ)時(shí)低位在前,高位在后,而顯示時(shí)是高位在前,低位在后,所以所述全局統(tǒng)一標(biāo)識(shí)符看上去與源程序中的全局統(tǒng)一標(biāo)識(shí)符的數(shù)據(jù)位有交錯(cuò),但實(shí)際上是一致的。
以下說(shuō)明步驟S2,即根據(jù)二進(jìn)制文件中的標(biāo)記進(jìn)行數(shù)據(jù)替換的步驟。假設(shè)采用“Replace String”替換“Hello World!”。請(qǐng)參看圖4,為該步驟的流程圖。
步驟S201,打開(kāi)并讀取上述標(biāo)準(zhǔn)軟件的二進(jìn)制文件。
步驟S202,在二進(jìn)制文件中檢索自定義標(biāo)識(shí),在所述的程序中,該標(biāo)識(shí)就是全局統(tǒng)一標(biāo)識(shí)符CD6A1906-400B-46c2-9DCB-918C135BA910。
由于CD6A1906-400B-46c2-9DCB-918C135BA910是不可能重復(fù)的全局統(tǒng)一標(biāo)識(shí)符,因此,該二進(jìn)制文件中必然只有一個(gè)位置存在該變量,只要檢索到該變量,就必然是標(biāo)識(shí)符。
步驟S203,根據(jù)檢索獲得的全局統(tǒng)一標(biāo)識(shí)符的位置,確定可替換數(shù)據(jù)位置。
由于編譯標(biāo)準(zhǔn)軟件時(shí),該字符串標(biāo)記和可替換內(nèi)容之間的位置關(guān)系已經(jīng)確定,因此,檢索獲得所述全局統(tǒng)一標(biāo)識(shí)符CD6A1906-400B-46c2-9DCB-918C135BA910的位置后,就可以獲得所述可替換數(shù)據(jù)的位置。
步驟S204,根據(jù)所確定的可替換數(shù)據(jù)位置,將替換數(shù)據(jù)“Replace String”替換原二進(jìn)制文件中可替換內(nèi)容“Hello World!”,得到替換軟件。
圖5示出該替換后獲得的二進(jìn)制文件編碼文件。其中,原來(lái)“HelloWorld!”的位置上已經(jīng)由“Replace String”替換。
上述實(shí)施例中,只是對(duì)一個(gè)數(shù)據(jù)變量替換的過(guò)程,實(shí)際上,可能存在多個(gè)替換變量??梢詫?biāo)準(zhǔn)軟件中對(duì)應(yīng)各個(gè)可替換數(shù)據(jù)的全局唯一標(biāo)識(shí)符記錄在一個(gè)數(shù)據(jù)庫(kù)文件中供需要替換時(shí)檢索使用。這樣,就可以建立全部的全局唯一標(biāo)識(shí)符與可替換數(shù)據(jù)的對(duì)應(yīng)關(guān)系表,當(dāng)需要進(jìn)行數(shù)據(jù)替換時(shí),根據(jù)該表檢索獲得需要替換的數(shù)據(jù)對(duì)應(yīng)的全局惟一標(biāo)識(shí)符,從而進(jìn)行所述替換。
應(yīng)當(dāng)說(shuō)明,一個(gè)全局唯一標(biāo)識(shí)符可以對(duì)應(yīng)于一個(gè)可替換數(shù)據(jù),也可以對(duì)應(yīng)于多個(gè)連續(xù)的可替換數(shù)據(jù),只要這些連續(xù)數(shù)據(jù)需要一起被替換,就可以采用同一個(gè)全局唯一標(biāo)識(shí)符。對(duì)于分散的可替換數(shù)據(jù),則必須為每一個(gè)數(shù)據(jù)設(shè)置專(zhuān)門(mén)的全局唯一標(biāo)識(shí)符。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種對(duì)軟件中的數(shù)據(jù)進(jìn)行替換的方法,其特征在于,包括11)編譯獲得可替換數(shù)據(jù)設(shè)置有標(biāo)識(shí)的二進(jìn)制文件;12)根據(jù)所述標(biāo)識(shí),檢索獲得可替換數(shù)據(jù)在二進(jìn)制文件中的位置;13)根據(jù)所述可替換數(shù)據(jù)在二進(jìn)制文件中的位置,將所需數(shù)據(jù)替換原數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟11)包括在編制源程序時(shí),將所述標(biāo)識(shí)與可替換數(shù)據(jù)在源程序語(yǔ)句上相連結(jié);編譯所述源程序,獲得可替換數(shù)據(jù)設(shè)置有標(biāo)識(shí)的二進(jìn)制文件。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述標(biāo)識(shí)是自定義的由多個(gè)字節(jié)組成的字符串,或者是自定義的由一定長(zhǎng)度的數(shù)據(jù)組成的標(biāo)識(shí)串。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述標(biāo)識(shí)具有全局唯一性。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述具有全局唯一性的標(biāo)識(shí)具體是采用全局統(tǒng)一標(biāo)識(shí)符自定義的標(biāo)識(shí)。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述可替換數(shù)據(jù)為多個(gè),每個(gè)可替換數(shù)據(jù)分別具有各自獨(dú)立的全局統(tǒng)一標(biāo)識(shí)符作為標(biāo)識(shí)。
7.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述可替換數(shù)據(jù)為多個(gè),其中連續(xù)的可替換數(shù)據(jù)可以采用同一個(gè)全局統(tǒng)一標(biāo)識(shí)符作為標(biāo)識(shí)。
8.根據(jù)權(quán)利要求6或者7所述的方法,其特征在于,采用一個(gè)對(duì)照表,記錄所述可替換數(shù)據(jù)與全局統(tǒng)一標(biāo)識(shí)符的關(guān)系。
9.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述步驟12)包括打開(kāi)帶有可替換數(shù)據(jù)標(biāo)識(shí)的二進(jìn)制文件;讀取所述二進(jìn)制文件,并在該文件中檢索所述可替換數(shù)據(jù)的標(biāo)識(shí);根據(jù)所述獲得的標(biāo)識(shí),確定可替換數(shù)據(jù)在該二進(jìn)制文件中的位置。
全文摘要
本發(fā)明公開(kāi)了一種對(duì)軟件中的數(shù)據(jù)進(jìn)行替換的方法,該方法對(duì)于二進(jìn)制文件中需要替換的數(shù)據(jù),采用特定標(biāo)識(shí)表示出其在二進(jìn)制文件中的長(zhǎng)度和位置,當(dāng)需要替換時(shí),根據(jù)該標(biāo)識(shí)獲得所要替換的數(shù)據(jù)在二進(jìn)制文件中的長(zhǎng)度和位置,進(jìn)行所述替換,通過(guò)本發(fā)明提供的技術(shù)方案可以直接針對(duì)二進(jìn)制文件進(jìn)行數(shù)據(jù)替換,而無(wú)需在源程序中進(jìn)行,這樣就免去了重新進(jìn)行編譯的過(guò)程。該方法還適用于使用者需要進(jìn)行數(shù)據(jù)替換,而程序開(kāi)發(fā)者不希望其獲知源程序的場(chǎng)合。
文檔編號(hào)G06F9/45GK1949175SQ20061011429
公開(kāi)日2007年4月18日 申請(qǐng)日期2006年11月3日 優(yōu)先權(quán)日2006年11月3日
發(fā)明者陸舟, 于華章 申請(qǐng)人:北京飛天誠(chéng)信科技有限公司