專(zhuān)利名稱(chēng)::抽換可攜式執(zhí)行文件格式文件資料的方法
技術(shù)領(lǐng)域:
:本發(fā)明是有關(guān)一種抽換可攜式執(zhí)行文件(PE)格式文件的資料的方法,特別是將文件內(nèi)的程序與資料/程序分離,而無(wú)須經(jīng)過(guò)編譯即可得到可執(zhí)行文件(EXEFile)的功能。請(qǐng)參照?qǐng)D1,是傳統(tǒng)方法中,編寫(xiě)帶有資料程序的工作流程圖。首先,由離線(xiàn)(Offline)人員提供資料(Data)(步驟100~101),再由編寫(xiě)程序人員編譯(Compile)源文件(Sourcefile)(步驟102),接著如果離線(xiàn)人員沒(méi)有要更新資料(步驟103),則所要的可執(zhí)行文件便得以生成(步驟104~105)。然而,如果此時(shí)離線(xiàn)人員需要更新資料,則必須重新提供資料,且再由編程人員重新編譯,才能生成PE格式的執(zhí)行文件(重復(fù)步驟101--103)。由圖中可以看出,傳統(tǒng)方法中軟件的開(kāi)發(fā)過(guò)程需要編程人員全程參與,如果欲更換軟件中的數(shù)據(jù)庫(kù)(如將英漢辭典換成漢英辭典等數(shù)據(jù)庫(kù)的變換),則更要編程人員大幅修改程序,如此增加了相當(dāng)大的不便。由上所述可知,傳統(tǒng)上編程人員所使用的編程方法十分復(fù)雜。此外,在通常情況下,由于習(xí)知的電子消費(fèi)型產(chǎn)品或計(jì)算機(jī)軟件所開(kāi)發(fā)的程序中,執(zhí)行文件是采用可攜式可執(zhí)行文件(PortableExecutable,PE)格式,其資料是包含在程序之中,因此對(duì)資料的修改需要編程人員重新編譯生成PE格式的可執(zhí)行文件(EXE)。有鑒于此,為了改善上述傳統(tǒng)軟件中資料與程序不分離,因而造成欲變換資料必須修改軟件中程序的缺陷,本發(fā)明提出一種可以實(shí)現(xiàn)資料和程序分離的方法,可以在Windows平臺(tái),如Windows95、Windons98、WindowsNT等任意環(huán)境內(nèi),實(shí)現(xiàn)資料與程序的分離,讓PE格式的執(zhí)行文件中的資料與程序可隨意替換。如此,一套程序可套用多套資料或掛接多種不同功能(如多種語(yǔ)言的辭典),可使開(kāi)發(fā)工作僅著眼于很少部份的內(nèi)容更換,并使可編程人員大幅度退出開(kāi)發(fā)的后績(jī)工作,而成為一種模塊迭加的整合開(kāi)發(fā)方式。同時(shí),通過(guò)這種技術(shù),可實(shí)現(xiàn)無(wú)須編譯器(Compiler)即可自動(dòng)生成可攜式執(zhí)行文件格式的文件的功能。本發(fā)明的主要目的即是要提供一種抽換可攜式執(zhí)行文件(PE)格式文件的資料的方法,是用以抽換可攜式執(zhí)行文件格式文件內(nèi)的程序代碼與數(shù)據(jù)庫(kù)/程序代碼,而達(dá)到無(wú)須經(jīng)過(guò)編譯即可得到可執(zhí)行文件的目的,且可降低開(kāi)發(fā)人員軟件開(kāi)發(fā)的復(fù)雜性,提高產(chǎn)品的可維護(hù)性。根據(jù)上述揭露的抽換可攜式執(zhí)行文件格式文件的資料的方法,其步驟包括載入可攜式執(zhí)行文件格式文件;分析可攜式執(zhí)行文件格式文件,且找出可攜式執(zhí)行文件格式文件中的欲抽換資料地址;抽換可攜式執(zhí)行文件格式文件中的欲抽換資料;以及將抽換后的資料重新存入可攜式執(zhí)行文件格式文件,成為一新可執(zhí)行文件。利用上述方法即可完成將文件內(nèi)的程序與資料相分離,當(dāng)欲修改文件的數(shù)據(jù)庫(kù)或程序代碼時(shí),僅需做一小部份的修改,不需重新編譯原始程序代碼,可達(dá)到方便軟件的升級(jí)維護(hù)、節(jié)省開(kāi)發(fā)人力的功效。有關(guān)本發(fā)明的詳細(xì)內(nèi)容及技術(shù),茲就配合圖式說(shuō)明如下圖1,為在傳統(tǒng)方法中,編寫(xiě)帶有資料與程序的軟件的工作流程圖;圖2,是采用本發(fā)明方法編寫(xiě)帶有資料與程序的軟件的工作流程圖;圖3,是本發(fā)明資源抽換的流程示意圖;圖4,是PE格式文件中的結(jié)構(gòu)示意圖;圖5,是PE格式文件的資源目錄結(jié)構(gòu);圖6,是本發(fā)明抽換可攜式執(zhí)行文件格式文件的資料方法的流程示意圖;以及圖7,是為采用本發(fā)明方法實(shí)現(xiàn)“三國(guó)演義的題庫(kù)”的示意圖。請(qǐng)參照?qǐng)D2,采用本發(fā)明方法后,編寫(xiě)帶有資料與程序的軟件的工作流程圖,首先,由編程人員提供一模板文件(步驟200~201),如果離線(xiàn)人員沒(méi)有要更新資料(步驟202),那么所要的執(zhí)行文件文件便得以生成(步驟203~204)。不過(guò),即使此時(shí)離線(xiàn)人員需要更新資料,只要由離線(xiàn)人員自行更新,無(wú)須編程人員參與(重復(fù)步驟202循環(huán))。本發(fā)明方法可以在windows平臺(tái),如windows95、Windows98、WindowsNT等任意環(huán)境內(nèi),實(shí)現(xiàn)軟件中資料與程序的分離,讓執(zhí)行文件(EXE)文件中的資料與程序可隨意替換。如此,一套程序可套用多套資料或掛接多種不同功能(如多種語(yǔ)言的辭典),可使編程人員大幅度退出開(kāi)發(fā)的工作,而僅著眼于很少部份的內(nèi)容更換,成為一種新的“程序代碼”(Code)+“(可抽換,Changeable)數(shù)據(jù)庫(kù)”(Database),以及“程序代碼”+“(可抽換)程序代碼”整合開(kāi)發(fā)方式。同時(shí),借用這種技術(shù),可實(shí)現(xiàn)無(wú)須編譯器(Compiler)即可自動(dòng)生成執(zhí)行文件的功能。請(qǐng)參照“圖3”,其表示的是一種資源抽換流程圖。首先,檢查源文件(Sourcefile)是否為PE格式的可執(zhí)行文件(參考圖4的說(shuō)明)(步驟300~301)。如果不是,則流程結(jié)束(步驟310);如果是,那么初始化變量(步驟302)。接著,初始化替換訊息(步驟303)。然后,檢查初始化是否成功(步驟304),如果不成功,則流程結(jié)束(步驟310);如果成功,則開(kāi)始搜尋PE格式文件的資源段(步驟305)。接著,讀入PE格式文件的資源(Resource)(步驟306)。然后,搜尋固定資源(步驟307)。之后,尋找數(shù)據(jù)入口(DataEntry)(步驟308),如果沒(méi)找到,那么流程結(jié)束(步驟310);如果找到,那么替換固定資源(步驟309~310)。以下詳述如何搜尋PE格式文件的資源區(qū)段可執(zhí)行文件是指計(jì)算機(jī)可直接執(zhí)行的程序,所有的應(yīng)用軟件都有可執(zhí)行文件,這些文件的附加檔名大多是.EXE或.COM,EXE是在MS-DOS當(dāng)中可執(zhí)行文件的格式,所有擴(kuò)展名為.EXE的文件都是可執(zhí)行文件。一個(gè)可執(zhí)行文件可分為資料區(qū)段(datasegment)、程序代碼區(qū)段(codesegment)、堆棧區(qū)段(stacksegment)和額外區(qū)段(extrasegment)四部份。而EXE文件的格式,包括了一個(gè)不定長(zhǎng)度的檔頭,MS-DOS便是利用文件頭內(nèi)的信息來(lái)加載它。COM和EXE文件最大的不同,便是COM文件沒(méi)有檔頭,文件一開(kāi)始就是程序代碼和資料碼區(qū)段,而EXE文件有了這些信息,便可將程序放入任意的內(nèi)存地址執(zhí)行,這也就是重新配置表格(relocationtable)的功能。EXE文件包含了文件頭的信息,程序加載器(programloader)在加載EXE格式的可執(zhí)行文件之前,會(huì)參考這些信息,以決定程序代碼的實(shí)際地址;COM格式的執(zhí)行文件就沒(méi)有這些問(wèn)題,它的文件便是程序本身,因此程序的能力也就受到限制。請(qǐng)參照?qǐng)D4,繪示一種存在于PE格式文件40中的結(jié)構(gòu)示意圖。由圖中所揭示,PE格式文件40以一DOS文件頭(DOS_HEAD)開(kāi)始,DOS文件頭中存在如下常數(shù),指向NT頭(NT_HEAD)42,從NT頭42中我們可檢查其前兩個(gè)字符串是否為“PE”,辨識(shí)字符41(Character),以確定是否確為PE格式的文件40。另外,PE格式的文件40中存在有若干“節(jié)”(Sections)44,通過(guò)節(jié)表(SectionTable)43,我們可以查到資源節(jié)45(.rsrc節(jié))的入口地址,而此資源節(jié)45正是PE格式文件40中資源(Resource)所在節(jié)。在資源節(jié)45中,PE格式文件40中的資源存在有如“圖5”所示的資源目錄50(ResourceDirectory)結(jié)構(gòu)。由圖中可以從資源目錄50找到其次一層資源目錄51,及其它次一層資源目錄,可依據(jù)不同的資源名稱(chēng)(ID)而對(duì)應(yīng)至不同的資源目錄,在次一層資源目錄51之下,還包括有次二層資源目錄511、512,而每一層資源目錄下則依據(jù)其內(nèi)所包含的入口(Entry)對(duì)應(yīng)到不同的目錄,因此,在次二層資源目錄511、512下,分別對(duì)應(yīng)到一資源人口5110、5120,用以分別找到文件中所有的資源,而可修改資源內(nèi)容及其所在資源目錄50、51、511/512中所指的資源入口5110/5120,更新整個(gè)資源目錄50結(jié)構(gòu),以達(dá)到抽換資源的目的。由上所述可以得知,本發(fā)明的關(guān)鍵技術(shù)在于執(zhí)行文件中程序和資料/程序的抽換方法。請(qǐng)參照“圖6”,是為本發(fā)明抽換可攜式執(zhí)行文件格式文件的資料方法的流程示意圖,該方法詳述如下1.當(dāng)流程開(kāi)始,加載可攜式執(zhí)行文件(PE)格式文件(步驟600~601);2.進(jìn)行分析可攜式執(zhí)行文件格式文件的節(jié)表(SectionTable),且找出可攜式執(zhí)行文件格式文件中的資源節(jié)(.rsrc節(jié))入口地址(DataEntry)(步驟602);3.依照資源節(jié)的資源目錄(ResourceDirectory)找出一資源區(qū)段(步驟603);4.讀入資源區(qū)段內(nèi)的資源(Resource)(步驟604);5.修改此一資源,并更新整個(gè)資源目錄結(jié)構(gòu)(步驟605);以及6.將資源節(jié)重新存入可攜式執(zhí)行文件格式文件,且更新節(jié)表(步驟606~607)。通過(guò)如此的方法,即可達(dá)到將文件內(nèi)的程序與資料相分離,當(dāng)欲修改文件的數(shù)據(jù)庫(kù)或程序代碼時(shí),僅需做一小部份的修改,不需重新編譯原始程序代碼,可達(dá)到方便軟件的升級(jí)維護(hù)、節(jié)省開(kāi)發(fā)人力的功效?,F(xiàn)通過(guò)對(duì)一軟件工具《三國(guó)演義的題庫(kù)》中資料與程序相分離做為例子進(jìn)行說(shuō)明。請(qǐng)參閱圖7,其所繪示為采用本發(fā)明方法實(shí)現(xiàn)“三國(guó)演義的題庫(kù)”的實(shí)現(xiàn)示意圖。上述《三國(guó)演義的題庫(kù)》是一種游戲與學(xué)習(xí)相結(jié)合的軟件,其通過(guò)不定期從網(wǎng)絡(luò)上下載測(cè)驗(yàn)試題,從而更新軟件資料來(lái)達(dá)到學(xué)習(xí)的目的。使用者在玩此游戲時(shí)有不斷改變的學(xué)習(xí)需求,就要求不斷更換試題資料方面而言,對(duì)于不同類(lèi)型的試題資料,要有相應(yīng)的解讀程序,依傳統(tǒng)的方法,實(shí)現(xiàn)此類(lèi)變化需要該項(xiàng)目編程人員全程參與,配合資料變更修改程序,并重新進(jìn)行編譯。而通過(guò)本發(fā)明方法則可以圖7模式實(shí)現(xiàn)此類(lèi)變化。請(qǐng)參見(jiàn)圖7,其所繪示為采用本發(fā)明方法實(shí)現(xiàn)“三國(guó)演義的題庫(kù)”的實(shí)現(xiàn)示意圖,其過(guò)程如下所述1.此軟件開(kāi)發(fā)時(shí),程序與資料分別編寫(xiě),其中,題庫(kù)資料(Database)全部位于一個(gè)文件中,將其定義為自定義資源(CUS_DATABASE)加入工作流程、編譯、連接整合;2.由第一個(gè)編程人員編寫(xiě)游戲701(GAME)程序及某一題庫(kù)資料解讀程序或游戲展示引擎,整合資料制成PE格式的執(zhí)行文件或最終代碼(ROMCODE)成為固定的資料70;3.編輯人員生成某一新的題庫(kù)資料712(QuestionsLibrary,DataFile);4.此時(shí),有第二個(gè)編程人員編寫(xiě)該數(shù)據(jù)庫(kù)的解讀程序,是為一可抽換的資料71部份,如試題顯示引擎711(ExaminationDisplayEngine,DLLFile),如解讀程序未變則不需此過(guò)程;以及5.利用先前揭露的方法寫(xiě)成的抽換程序?qū)E格式的執(zhí)行文件或最終代碼中資料及解讀程序換掉,構(gòu)成更新的游戲。其過(guò)程如下,加載PE格式的執(zhí)行文件(EXE),分析其內(nèi)容以找到節(jié)表,而通過(guò)其找到資源節(jié)的入口地址。之后將資源目錄結(jié)構(gòu)加載,搜尋自定義(CUS_DATABASE)資源,并在其中找到要替換的資源,將該資源更新,然后更新資源目錄結(jié)構(gòu),將更新后的資源回填到PE格式文件中,以完成節(jié)表更新。上述過(guò)程包含于一個(gè)抽換程序中,使用時(shí)要向此程序指明(1)欲更新的文件(exe)(2)欲更新的資源類(lèi)型。(3)欲更新的資源名稱(chēng)ID。(4)新資源的內(nèi)容。通過(guò)上述方法,即可完成將軟件中的程序與資料互相分離,可達(dá)方便軟件的升級(jí)維護(hù)、節(jié)省人力的功效。根據(jù)本發(fā)明所揭露抽換可攜式執(zhí)行文件格式文件的資料的方法,通過(guò)上述實(shí)施例說(shuō)明,本發(fā)明具有如下優(yōu)點(diǎn)1.若一個(gè)編程人員在游戲完成后離職,則該軟件的更動(dòng)與升級(jí)完全可由他人取代完成,并無(wú)不良影響及困難;2.編輯人員可同時(shí)開(kāi)發(fā)多種數(shù)據(jù)庫(kù)(Database)配合以少量解讀程序,則不難以最少的編程人員,實(shí)現(xiàn)系列軟件的開(kāi)發(fā),大大降低了產(chǎn)品的開(kāi)發(fā)成本;3.程序的使用者界面(UserInterface,UI)部份可與核心各自獨(dú)立編寫(xiě),游戲可內(nèi)嵌抽換程序,讓使用者可根據(jù)自己喜好設(shè)計(jì)個(gè)性化界面,以提升程序親和度;4.可降低開(kāi)發(fā)(RD)人員軟件開(kāi)發(fā)的復(fù)雜性,提高產(chǎn)品的可維護(hù)性;以及5.可適用于一般個(gè)人計(jì)算機(jī)(PersonalComputer,PC)或手提式計(jì)算機(jī)(HandheldPersonalComputer,HPC)等各種消費(fèi)型電子產(chǎn)品上,具有廣泛的使用性。以上所敘述僅為本發(fā)明的較佳實(shí)施例,凡依據(jù)本發(fā)明權(quán)利要求書(shū)所做的等效變化或修正,皆應(yīng)屬于本發(fā)明專(zhuān)利的保護(hù)范圍。權(quán)利要求1.一種抽換可攜式執(zhí)行文件(PE)格式文件的資料的方法,其步驟包括加載該可攜式執(zhí)行文件格式文件;分析該可攜式執(zhí)行文件格式文件,且找出該可攜式執(zhí)行文件格式文件中的欲抽換資料地址;抽換該可攜式執(zhí)行文件格式文件中的欲抽換資料;以及將該抽換后的資料重新存入該可攜式執(zhí)行文件格式文件,成為一新的可執(zhí)行文件。2.根據(jù)權(quán)利要求第1項(xiàng)所述抽換可攜式執(zhí)行文件格式文件的資料的方法,其中在該加載文件步驟之前,還包括有判斷該文件是否為PE格式的文件。3.根據(jù)權(quán)利要求第2項(xiàng)所述抽換可攜式執(zhí)行文件格式文件的資料的方法,其中該判斷文件格式的步驟,是通過(guò)該文件的辨識(shí)字符(Character)是否為PE所決定。4.根據(jù)權(quán)利要求第1項(xiàng)所述抽換可攜式執(zhí)行文件格式文件的資料的方法,其中該分析文件的步驟,更包括分析該文件的節(jié)表(SectionTable),且找出該文件中的資源節(jié)(.rsrc節(jié))地址;依照該資源節(jié)的資源目錄(ResourceDirectory)找出一資源區(qū)段;以及讀入該資源區(qū)段內(nèi)的資源(Resource)。5.根據(jù)權(quán)利要求第4項(xiàng)所述抽換可攜式執(zhí)行文件格式文件的資料的方法,其中該抽換文件中欲抽換資料的步驟,更包括修改該資源,并更新該資源目錄。6.根據(jù)權(quán)利要求第5項(xiàng)所述抽換可攜式執(zhí)行文件格式文件的資料的方法,其中該將抽換后資料重新存入文件的步驟,包括將該資源節(jié)存入該文件,且更新該節(jié)表。7.根據(jù)權(quán)利要求第1項(xiàng)所述抽換可攜式執(zhí)行文件格式文件的資料的方法,其中該資料為程序代碼(Code)。8.根據(jù)權(quán)利要求第1項(xiàng)所述抽換可攜式執(zhí)行文件格式文件的資料的方法,其中該資料為數(shù)據(jù)庫(kù)(Database)。9.根據(jù)權(quán)利要求第1項(xiàng)所述抽換可攜式執(zhí)行文件格式文件的資料的方法,其中該文件為一擴(kuò)展名為EXE的可執(zhí)行文件。10.一種抽換可攜式執(zhí)行文件(PE)格式文件的資料的方法,其步驟包括加載該可攜式執(zhí)行文件格式文件;分析該可攜式執(zhí)行文件格式文件的節(jié)表(SectionTable),且找出該可攜式執(zhí)行文件格式文件中的資源節(jié)(.rsrc節(jié))地址;依照該資源節(jié)的資源目錄(ResourceDirectory)找出一資源區(qū)段;讀入該資源區(qū)段內(nèi)的資源(Resource);修改該資源,并更新該資源目錄;以及將該資源節(jié)存入該可攜式執(zhí)行文件格式文件,且更新該節(jié)表。11.根據(jù)權(quán)利要求第10項(xiàng)所述抽換可攜式執(zhí)行文件格式文件的資料的方法,其中在該加載文件步驟之前,還包括有判斷該文件是否為PE格式的文件。12.根據(jù)權(quán)利要求第11項(xiàng)所述抽換可攜式執(zhí)行文件格式文件的資料的方法,其中該判斷文件格式的步驟,是通過(guò)該文件的辨識(shí)字符(Character)是否為PE所決定。13.根據(jù)權(quán)利要求第10項(xiàng)所述抽換可攜式執(zhí)行文件格式文件的資料的方法,其中該資料為程序代碼(Code)。14.根據(jù)權(quán)利要求第10項(xiàng)所述抽換可攜式執(zhí)行文件格式文件的資料的方法,其中該資料為數(shù)據(jù)庫(kù)(Database)。15.根據(jù)權(quán)利要求第10項(xiàng)所述抽換可攜式執(zhí)行文件格式文件的資料的方法,其中該文件為一擴(kuò)展名為EXE的可執(zhí)行文件。全文摘要一種抽換可攜式執(zhí)行檔(PE)格式文件資料的方法,用以分離可攜式執(zhí)行檔格式文件中的程序代碼與數(shù)據(jù)庫(kù)/程序代碼,使離線(xiàn)人員可直接編寫(xiě)數(shù)據(jù)庫(kù)或程序代碼,而成為文件中的一部分,無(wú)須原始編程人員參與,因此,可達(dá)到無(wú)須經(jīng)過(guò)編譯即可得可執(zhí)行文件(EXE)的目的,也可降低開(kāi)發(fā)人員軟件開(kāi)發(fā)的復(fù)雜度,提高產(chǎn)品的可維護(hù)性。文檔編號(hào)G06F9/445GK1373418SQ01106780公開(kāi)日2002年10月9日申請(qǐng)日期2001年2月28日優(yōu)先權(quán)日2001年2月28日發(fā)明者陳淮琰,王小春,鄭建鋒申請(qǐng)人:無(wú)敵科技(西安)有限公司