專利名稱:二進(jìn)制軟件構(gòu)件及其制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計算機(jī)系統(tǒng)軟件和應(yīng)用軟件領(lǐng)域,具體涉及一種二進(jìn)制軟件構(gòu)件及其制作方法。
背景技術(shù):
目前,計算機(jī)軟件二進(jìn)制模塊中通常包括程序的二進(jìn)制代碼、數(shù)據(jù)、及相關(guān)的符號、字符串等信息,模塊在二進(jìn)制形態(tài)上有多種公共的標(biāo)準(zhǔn)格式,比如ELF、PE、NE、a.out等等,各個標(biāo)準(zhǔn)之間互不兼容,大量來自不同供應(yīng)商的目標(biāo)程序存在事先不能進(jìn)行相互的語法、調(diào)用規(guī)程假定,使得二進(jìn)制模塊不便于復(fù)用。且在目標(biāo)程序生成過程中,存在兩個連續(xù)步驟即編譯器與鏈接編輯程序,兩者同屬一個工具鏈,通常鏈接編輯程序認(rèn)為編譯器已經(jīng)把語法上的匹配規(guī)則處理妥當(dāng),忽略了相關(guān)信息的處理,直接用符號名(可能是函數(shù)或全局變量)匹配的辦法回填各個軟件模塊之間的符號引用地址。該處理方式存在的問題包括1、目標(biāo)程序的符號中缺少語法信息,只有符號名,給后續(xù)鏈接帶來不確定性;2、模塊作為信息載體未受保護(hù),無法辨識其來源;未能明確給出模塊間依賴關(guān)系。
發(fā)明/實(shí)用新型內(nèi)容本發(fā)明克服了上述現(xiàn)有模塊格式缺少信息,或者信息封裝得不合理的缺陷,提供一種二進(jìn)制軟件構(gòu)件及制作方法,形成可復(fù)用的二進(jìn)制軟件構(gòu)件。
本發(fā)明的另一目的還在于,更精確地完成模塊鏈接時的綁定。
本發(fā)明的目的進(jìn)一步在于,用戶可方便地驗(yàn)證是否所持有的軟件構(gòu)件已被篡改,構(gòu)件發(fā)布更為安全。
本發(fā)明的技術(shù)內(nèi)容一種二進(jìn)制軟件構(gòu)件制作方法,步驟包括1、從現(xiàn)有目標(biāo)映像中提取原模塊的符號信息、代碼、數(shù)據(jù)以及字符串表等信息;2、添加接口/變量的語法表示,組織接口信息;3、將接口信息和提取信息重新組織封裝,生成二進(jìn)制軟件構(gòu)件。
根據(jù)原模塊所提供函數(shù)/變量和所需要的函數(shù)的基調(diào),對提取的符號信息進(jìn)行重新編碼。
根據(jù)原目標(biāo)映像中的符號表,對目標(biāo)映像中已提供的符號和未提供的符號做明確劃分,已提供符號作為構(gòu)件的提供接口成員,未提供符號劃入構(gòu)件的需求接口成員。
進(jìn)一步包含對構(gòu)件采用MD5消息摘要算法。
一種二進(jìn)制軟件構(gòu)件,該軟件構(gòu)件相當(dāng)于容器,除基本信息外,包括多個實(shí)現(xiàn)體,其特征在于每個實(shí)現(xiàn)體按照一定格式組織一個對應(yīng)的接口,接口的表示與實(shí)現(xiàn)體分離,共同封裝在軟件構(gòu)件中。
該二進(jìn)制軟件構(gòu)件依次存放以下信息1、構(gòu)件基本信息,包括構(gòu)件名稱、版本、適用的目標(biāo)機(jī)器體系結(jié)構(gòu)、構(gòu)件大小等;2、構(gòu)件的接口信息表,包括接口的名稱和標(biāo)識等;3、構(gòu)件的實(shí)現(xiàn)體表,給出各個實(shí)現(xiàn)的名稱、位置(起始偏移和長度)和屬性信息;4、各實(shí)現(xiàn)體的節(jié)區(qū)內(nèi)容,包括代碼段、數(shù)據(jù)段、只讀數(shù)據(jù)段、堆棧段等。
構(gòu)件基本信息還包括整個構(gòu)件的簽名信息。
構(gòu)件的接口信息表還接口的成員個數(shù)及各個成員的描述。
構(gòu)件的接口信息表進(jìn)一步包括每個成員的屬性信息。
本發(fā)明的技術(shù)效果提供一種二進(jìn)制軟件構(gòu)件及其制作方法,在該軟件構(gòu)件中,封裝了邏輯上耦合關(guān)系緊密的實(shí)現(xiàn)體(implementation),每個實(shí)現(xiàn)體是對一個接口的實(shí)現(xiàn),并組織明確的接口信息,便于不同開發(fā)組織提供相同接口的不同實(shí)現(xiàn),同時,也便于同一實(shí)現(xiàn)體在不同的應(yīng)用環(huán)境中使用,使軟件構(gòu)件可復(fù)用。將接口信息與實(shí)現(xiàn)信息組合在同一個文件中發(fā)布,進(jìn)一步使得軟件構(gòu)件具備自描述能力,提高了軟件構(gòu)件的可復(fù)用性。
本發(fā)明按目標(biāo)程序映像所提供的函數(shù)/變量和所需要的函數(shù)的基調(diào)(即返回值類型、函數(shù)名、參數(shù)類型、參數(shù)個數(shù)),對符號重新編碼,可恢復(fù)其語法信息。
通過對構(gòu)件整體做消息摘要簽名處理和適當(dāng)?shù)慕Y(jié)果公布渠道,可檢測因病毒、黑客等對構(gòu)件內(nèi)容的惡意修改或意外修改,進(jìn)而提高組裝后系統(tǒng)的安全性,軟件構(gòu)件發(fā)布更為安全。
構(gòu)件接口信息還包括成員信息,可避免原目標(biāo)程序映象中缺失符號語法信息的缺點(diǎn)。顯式提供的語法信息有利于構(gòu)件組裝時的語法層次檢查、匹配。
構(gòu)件接口信息進(jìn)一步包括接口的屬性描述,可便于指導(dǎo)后續(xù)組裝過程,如接口成員函數(shù)可指定是否此方法允許重入,是否允許中斷,是否同步方法(即直到函數(shù)返回時,才允許調(diào)用方繼續(xù)執(zhí)行)等等。
下面結(jié)合附圖,對本發(fā)明/實(shí)用新型做出詳細(xì)描述。
圖1為本發(fā)明構(gòu)件格式示意圖圖2為本發(fā)明構(gòu)件頭部信息格式示意圖。
具體實(shí)施例方式
本發(fā)明為了解決目標(biāo)程序映像中符號名過于簡單的問題,首先提取原二進(jìn)制軟件模塊中的符號信息,進(jìn)行重新編碼。
符號名可以從原二進(jìn)制模塊中直接提取。重新編碼時,恢復(fù)其語法信息。根據(jù)原模塊所提供(所需要)的函數(shù)(變量)基調(diào),用壓縮的符號重新組織。這里,基調(diào)指各個函數(shù)(變量)的返回值類型、名稱、參數(shù)列表等。壓縮的辦法是,將原數(shù)據(jù)類型名稱用一個ASCII字符表示。例如函數(shù)int func_name(unsigned char paraml,float *res)可編碼為-i9func_nameucPf其中字符“i”表示返回之類型為int,字符“9”表示后面的9個字符“func_name”為函數(shù)名,字母“uc”表示第一個參數(shù)類型為“unsigned char”,字母“P”表示第二個參數(shù)為一個指針,字母“f”表示第二個參數(shù)的指針類型為指向float的指針。
通過此種規(guī)格化編碼,可避免原模塊中僅提供“func_name”作為接口成員名稱所引發(fā)的二義性,便于更精確地完成模塊鏈接時的綁定。關(guān)于接口的語法形式問題,可通過相關(guān)的文檔(如軟件的文檔、頭文件)獲得。
二進(jìn)制軟件構(gòu)件制作方法具體做法為1、提取原目標(biāo)映像中有用信息,包括代碼、(只讀)數(shù)據(jù)段以及字符串表等信息。根據(jù)原二進(jìn)制模塊格式標(biāo)準(zhǔn),從模塊中提取代碼段、數(shù)據(jù)段、只讀數(shù)據(jù)段以及字符串表。
2、對接口函數(shù)、變量進(jìn)行分組,形成接口,并命名,構(gòu)造接口表根據(jù)原目標(biāo)映像中的符號表,對目標(biāo)映像中已提供的符號和未提供的符號做明確劃分。已提供符號作為構(gòu)件的提供接口成員,未提供符號劃入構(gòu)件的需求接口成員。按成員的功能、作用將兩類接口成員的內(nèi)容組織成有意義的接口,給出有意義的接口名稱。接口的屬性描述也可給出相關(guān)信息,如接口成員函數(shù)可指定是否此方法允許重入,是否允許中斷,是否同步方法(即直到函數(shù)返回時,才允許調(diào)用方繼續(xù)執(zhí)行)等等,以便于構(gòu)件被第三方使用。如果有多個模塊要封裝到一個構(gòu)件中,重復(fù)以上步驟。
3、生成目標(biāo)二進(jìn)制構(gòu)件。
構(gòu)造目標(biāo)文件文件頭信息塊,打開輸出構(gòu)件文件,寫入文件頭結(jié)構(gòu),依次寫入各個接口信息,構(gòu)造文件中接口表。并將第二步中提取的代碼段、數(shù)據(jù)段、只讀數(shù)據(jù)段寫入輸出文件,最后,將字符串表寫入輸出文件。
進(jìn)一步生成簽名信息。對目標(biāo)程序映像來源的可信性問題,采用公開的MD5消息摘要算法,對轉(zhuǎn)換后的軟件構(gòu)件文件字節(jié)流進(jìn)行消息摘要生成,并將結(jié)果回填在軟件構(gòu)件頭中固定位置,便于用戶檢查。關(guān)閉輸出文件。由于MD5消息摘要算法可對字節(jié)流中所有字節(jié)做充分混合,所生成的摘要信息簡短,且均為可讀ASCII碼,因而軟件構(gòu)件的用戶可方便地驗(yàn)證是否所持有的軟件構(gòu)件已被篡改,構(gòu)件發(fā)布更為安全。通過對構(gòu)件整體做消息摘要簽名處理和適當(dāng)?shù)慕Y(jié)果公布渠道,可檢測因病毒、黑客等對構(gòu)件內(nèi)容的惡意修改或意外修改。
參考圖1,在新的二進(jìn)制構(gòu)件格式中,突出地提供了接口和實(shí)現(xiàn)體兩類信息。接口信息表達(dá)了一個構(gòu)件所提供的功能及完成所提供功能時需要其它構(gòu)件提供的服務(wù)。實(shí)現(xiàn)體部分包含每個接口的具體實(shí)現(xiàn)部分。根據(jù)這種新的構(gòu)件格式生成的構(gòu)件相當(dāng)于一種容器,將原來的軟件模塊封裝起來??蓮?fù)用二進(jìn)制軟件構(gòu)件中依次存放如下信息1、構(gòu)件基本信息包括構(gòu)件名稱、版本、適用的目標(biāo)機(jī)器體系結(jié)構(gòu)、構(gòu)件大小、接口信息描述表的偏移、構(gòu)件實(shí)現(xiàn)表的偏移、整個構(gòu)件的MD5消息摘要。
2、構(gòu)件的接口信息表,包括接口的名稱和標(biāo)識,接口的成員個數(shù)及各個成員的描述。每個成員均給出相應(yīng)屬性信息。
3、構(gòu)件的實(shí)現(xiàn)體表,給出各個實(shí)現(xiàn)的名稱、位置(起始偏移和長度)和屬性信息。
4、各實(shí)現(xiàn)體的節(jié)區(qū)內(nèi)容,包括代碼段、數(shù)據(jù)段、只讀數(shù)據(jù)段、堆棧段。其后存放構(gòu)件實(shí)現(xiàn)體內(nèi)的重定位信息。最后放置構(gòu)件需求接口的描述。
通過構(gòu)件頭部信息和接口信息表,構(gòu)件實(shí)現(xiàn)了自描述。其中,構(gòu)件頭部的信息封裝方式,如圖2所示,其中魔數(shù)為四個字節(jié),作為識別此種文件格式的標(biāo)志(例如0xFF、‘C’、‘O’、‘M’)。文件大小字段給出整個構(gòu)件的大小(按字節(jié)計)。體系結(jié)構(gòu)給出目標(biāo)運(yùn)行平臺的指令集編碼。目標(biāo)位數(shù)可以為16、32、64等多種格式。接口數(shù)、接口信息表偏移用于定位文件中實(shí)現(xiàn)的各個接口信息;實(shí)現(xiàn)體數(shù)、實(shí)現(xiàn)信息表用于定位文件中各個實(shí)現(xiàn)體信息的位置。字符串信息表偏移給出文件中各類名稱所指字符串的總表在文件中的偏移。構(gòu)件頭部信息結(jié)構(gòu)中還可包含自身大小字節(jié)數(shù),以便計算文件結(jié)構(gòu)中后續(xù)內(nèi)容偏移,便于擴(kuò)充。
權(quán)利要求
1.一種二進(jìn)制軟件構(gòu)件制作方法,步驟包括(1)從現(xiàn)有目標(biāo)映像中提取符號信息、代碼、數(shù)據(jù)以及字符串表等信息;(2)添加接口/變量的語法表示,組織接口信息;(3)將接口信息和提取信息重新組織封裝,生成目標(biāo)二進(jìn)制構(gòu)件。
2.如權(quán)利要求1所述的二進(jìn)制軟件構(gòu)件制作方法,其特征在于根據(jù)原模塊所提供函數(shù)/變量和所需要的函數(shù)的基調(diào),對提取的符號信息進(jìn)行重新編碼。
3.如權(quán)利要求1或2所述的二進(jìn)制軟件構(gòu)件制作方法,其特征在于根據(jù)原目標(biāo)映像中的符號表,對目標(biāo)映像中已提供的符號和未提供的符號做明確劃分,已提供符號作為構(gòu)件的提供接口成員,未提供符號劃入構(gòu)件的需求接口成員。
4.如權(quán)利要求1所述的二進(jìn)制軟件構(gòu)件制作方法,其特征在于進(jìn)一步包含對構(gòu)件采用MD5信息摘要算法。
5.一種二進(jìn)制軟件構(gòu)件,該軟件構(gòu)件相當(dāng)于容器,除基本信息外,包括多個實(shí)現(xiàn)體,其特征在于每個實(shí)現(xiàn)體按照一定格式組織一個對應(yīng)的接口,接口的表示與實(shí)現(xiàn)體分離,共同封裝在軟件構(gòu)件中。
6.如權(quán)利要求5所述的二進(jìn)制軟件構(gòu)件,其特征在于依次存放以下信息(1)構(gòu)件基本信息,包括構(gòu)件名稱、版本、適用的目標(biāo)機(jī)器體系結(jié)構(gòu)、構(gòu)件大小等;(2)構(gòu)件的接口信息表,包括接口的名稱和標(biāo)識,接口的成員個數(shù)及各個成員的描述;(3)構(gòu)件的實(shí)現(xiàn)體表,給出各個實(shí)現(xiàn)的名稱、位置(起始偏移和長度)和屬性信息;(4)各實(shí)現(xiàn)體的節(jié)區(qū)內(nèi)容,包括代碼段、數(shù)據(jù)段、只讀數(shù)據(jù)段、堆棧段等。
7.如權(quán)利要求6所述的二進(jìn)制軟件構(gòu)件,其特征在于構(gòu)件基本信息包括整個構(gòu)件的簽名字段。
8.如權(quán)利要求6或7所述的二進(jìn)制軟件構(gòu)件,其特征在于構(gòu)件的接口信息表中還包括接口的成員個數(shù)及各個成員的描述。
9.如權(quán)利要求8所述的二進(jìn)制軟件構(gòu)件,其特征在于構(gòu)件的接口信息表中進(jìn)一步包括每個成員的屬性信息。
全文摘要
本發(fā)明提供了一種二進(jìn)制軟件構(gòu)件及其制作方法,屬于計算機(jī)系統(tǒng)軟件和應(yīng)用軟件領(lǐng)域。在該二進(jìn)制軟件構(gòu)件中封裝了接口函數(shù)/變量的語法信息,使構(gòu)件接口的信息明確,并將接口的表示與實(shí)現(xiàn)相分離,便于不同開發(fā)組織提供相同接口的不同實(shí)現(xiàn),替換使用,也便于同一實(shí)現(xiàn)在不同的應(yīng)用環(huán)境中使用,提高了軟件構(gòu)件的可復(fù)用性。本發(fā)明還通過對構(gòu)件整體做消息摘要簽名處理和適當(dāng)?shù)慕Y(jié)果公布渠道,可檢測因病毒、黑客等對構(gòu)件內(nèi)容的惡意修改或意外修改,進(jìn)而提高組裝后系統(tǒng)的安全性。
文檔編號G06F9/45GK1581084SQ20041000910
公開日2005年2月16日 申請日期2004年5月20日 優(yōu)先權(quán)日2004年5月20日
發(fā)明者藤啟明, 陳向群, 楊芙清 申請人:北京大學(xué)