一種動態(tài)創(chuàng)建可附加和可拆除二進制文件的系統(tǒng)和方法
【專利摘要】公開的是一種動態(tài)創(chuàng)建可附加和可拆除二進制文件的技術(shù)。本發(fā)明提供了一種管理關(guān)于附加代碼的現(xiàn)有代碼基庫有效機制,該附加代碼為用作單一代碼基庫的特定特征所需。同時也為設(shè)計者提供了一種機制,甚至可在代碼概念化之前規(guī)劃此類特征。系統(tǒng)解析具有DFM標簽的代碼,以生成基礎(chǔ)代碼,其中,所述DFM標簽隔離特征。基于DFM標簽創(chuàng)建多個代碼集合。生成特征變化表,并將其存入該系統(tǒng)中,所述特征變化表存儲相對于所述代碼集合中的特征發(fā)生變化的特征的信息。接著編譯代碼集合以生成二進制文件。通過特征變化表,確定并存儲每個所述二進制文件之間的差異,以用來創(chuàng)建一個或多個微分二進制文件。
【專利說明】一種動態(tài)創(chuàng)建可附加和可拆除二進制文件的系統(tǒng)和方法
【技術(shù)領(lǐng)域】
[0001]本申請總體涉及一種創(chuàng)建二進制文件的系統(tǒng)和方法,尤其涉及一種動態(tài)創(chuàng)建可附加和可拆除二進制文件的系統(tǒng)和方法。
【背景技術(shù)】
[0002]傳統(tǒng)上,軟件開發(fā)的過程具有非常嚴謹?shù)纳芷?。該過程的步驟,即固定順序為編寫代碼、編譯、調(diào)試并解決問題以及發(fā)布和部署。軟件二進制或二進制文件一經(jīng)使用,如不重新啟動,則向運行中的二進制文件添加或從其中移除特征變得極其困難。即使重新啟動,如果軟件狀態(tài)不得不恢復(fù)至初始狀態(tài),那么開銷將非常龐大。
[0003]已經(jīng)有一些方案可解決這一局限,但是每個方案均有各自的缺陷。例如,開發(fā)的軟件可能具有模塊,這些模塊存儲了日志級別信息、調(diào)試信息等,旨在基于如何編譯或配置提供不同的功能。通過一些標志或配置值,可以在運行時間控制這些模塊/文件的運行狀態(tài),但是必須使用整個二進制文件來創(chuàng)建軟件代碼。共享庫或動態(tài)加載庫也可用于管理此類特征,但是與庫連接并管理庫的代碼應(yīng)在最初編寫的代碼中。
[0004]現(xiàn)有技術(shù)提供了各種方案,可以在編寫期間使用預(yù)處理宏配置調(diào)試和日志級別管理;或者在運行時間配置調(diào)試和日志級別管理只要預(yù)處理宏屬于初始設(shè)計和代碼的一部分。所述模塊也可當(dāng)做可動態(tài)加載的庫,但是同樣地,設(shè)計和編碼這些模塊必須在一開始完成,同時加載以及與正確庫連接的附加代碼必須在初始二進制文件中。另外,傳統(tǒng)意義上這些應(yīng)用設(shè)計具有各種日志級別、蹤跡打印以及維護日志選項。上述選項應(yīng)屬于應(yīng)用代碼的一部分,因此編譯的目標代碼應(yīng)屬于二進制文件或庫的一部分??梢允褂脤崟r補丁應(yīng)用添加附加代碼,但是這些補丁需分別管理初始代碼和新增代碼,在理想情況下作為補丁或不同文件。進一步地,該補丁技術(shù)僅對缺陷修正或小升級適用。
[0005]管理這些模塊或特征的另一方案具有稍微不同的功能,即在編譯期間使用預(yù)處理宏。使用預(yù)處理宏將會清除由此產(chǎn)生的二進制文件中的備選流代碼,隨后將無法恢復(fù),除非再次編譯二進制文件。同樣,通過在運行時間使用一些配置值,可以使能或去使能特征邏輯,但是只有通過選擇備用碼流或路徑才實現(xiàn),并且只有特征邏輯是初始設(shè)計、代碼、以及隨后的編譯的目標代碼的一部分,才可完成。
[0006]同樣地,在一個方案中,這些模塊也可當(dāng)做可動態(tài)加載的庫,關(guān)于庫的軟件設(shè)計同樣應(yīng)該在一開始完成,且與庫連接的配套代碼必須在軟件中。
[0007]除上述提及的局限,現(xiàn)有技術(shù)的方案還具有各種其他制約因素。下面列舉了其中一些因素:
[0008]1.使用附加特征或者使用發(fā)布的二進制文件每次部署時可能不使用的特征不支持單流開發(fā)。
[0009]2.如果單流代碼開發(fā)可以使用實時補丁,需要分別維護和跟蹤補丁或不同的文件。單個源碼庫在這類情況中不能被很好地支持。
[0010]3.因為上述局限和約束因素,降低了開發(fā)質(zhì)量和效率。
[0011]4.此外,若有更大的應(yīng)用規(guī)模,則維護需求非常高,且應(yīng)用的規(guī)模使得對二進制文件作出較大變化變得困難。
[0012]盡管避免上述提及的局限和約束因素的技術(shù)日益發(fā)展,仍需要提供有效的技術(shù)方案,以克服上述的局限和約束因素。因此,亟需但仍未提供的一種技術(shù)是動態(tài)創(chuàng)建可附加和可拆除微分二進制文件。通過減少現(xiàn)有二進制文件中任何特征的升級時間和成本,該技術(shù)提供了一種有效的解決方案。
【發(fā)明內(nèi)容】
[0013]本
【發(fā)明內(nèi)容】
介紹的概念涉及一種創(chuàng)建可執(zhí)行二進制文件的系統(tǒng)和方法,為現(xiàn)有的二進制文件減少了開銷,縮短升級時間,下面進一步具體描述所述概念。本
【發(fā)明內(nèi)容】
不旨在確定所要求保護的本申請的必要特征,也不旨在確定或限定所要求保護的本申請的范圍。
[0014]通過提供一種動態(tài)創(chuàng)建可附加和可拆除微分二進制文件的優(yōu)化方法和系統(tǒng),上述問題得以解決,并實現(xiàn)了一種技術(shù)方案。本發(fā)明通過提供一種有效的解決方案,減少了現(xiàn)有以及當(dāng)前執(zhí)行的二進制文件中現(xiàn)有或者需要新添加的任意特征的升級時間和成本。
[0015]因此,本發(fā)明的一個主要目的是提供一種動態(tài)創(chuàng)建可附加和可拆除微分二進制文件的系統(tǒng)和方法,為現(xiàn)有以及當(dāng)前執(zhí)行的二進制文件中的任意特征,或現(xiàn)有以及當(dāng)前執(zhí)行的二進制文件中添加的新特征,減少了開銷,并縮短了升級時間,降低了成本。
[0016]本發(fā)明的另一目的是支持單流開發(fā)、基礎(chǔ)特征以及附加特征,可在同一代碼基庫中進行隔離。
[0017]本發(fā)明的另一目的是無需維護補丁或微分代碼文件等更新信息,同時實現(xiàn)在同一代碼基庫上的連續(xù)開發(fā)。
[0018]本發(fā)明的再一目的在于,通過本發(fā)明提出的減少現(xiàn)有以及當(dāng)前執(zhí)行的二進制文件中現(xiàn)有或者新添加的任意特征的升級時間和成本,從而提高軟件開發(fā)的質(zhì)量和效率。
[0019]本發(fā)明的又一目的在于,只有必要和要求的二進制代碼段即優(yōu)化占用空間,可以在目標運行時間環(huán)境中使用。只有當(dāng)需要用做微分二進制文件時,附加特征才可被引進。
[0020]因此,在本發(fā)明的一個實施例中,公開了一種計算機系統(tǒng),具有非臨時性計算機可讀介質(zhì),該計算機可讀介質(zhì)上包括已編碼的計算機程序邏輯,當(dāng)在所述系統(tǒng)上執(zhí)行時提供一種創(chuàng)建并管理至少一個可執(zhí)行微分二進制文件220的機制。所述系統(tǒng)進行解析至少一個具有至少一個動態(tài)特征管理器(DFM)標簽的計算機程序源代碼的操作。所述系統(tǒng)進行基于DFM標簽創(chuàng)建多個代碼集合的操作。所述代碼集合包括:具有基礎(chǔ)代碼的第一代碼集合,所述基礎(chǔ)代碼為無任何DFM標簽的至少一個計算機程序源代碼,以及具有所述基礎(chǔ)代碼和特征的至少一個第二代碼集合,所述特征為碼集。所述系統(tǒng)接著進行生成多個特征變化表216的操作,所述特征變化表216存儲相對于所述代碼集合中的特征發(fā)生變化的特征的信息。所述系統(tǒng)還進行清除所述計算機程序源代碼中的所述DFM標簽的操作,以生成所述基礎(chǔ)代碼,所述DFM標簽用于表示所述特征與所述至少一個計算機程序源代碼隔離。所述系統(tǒng)接著進行編譯所述代碼集合的操作,以生成多個二進制文件。通過所述特征變化表216,所述系統(tǒng)接著進行確定所述多個二進制文件中任意兩個二進制文件之間的差異的操作,從而存儲所述確定的差異?;谒龃鎯Φ牟町悾鱿到y(tǒng)最后進行創(chuàng)建一個或多個微分二進制文件220的操作。在一種實現(xiàn)中,可以基于源代碼中創(chuàng)建的多個特征變化表,確定所述多個二進制文件中任意兩個二進制文件之間的差異,同時,可以只為在差異表中具有條目的部分確定該差異,所述差異表由DFM在解析代碼時創(chuàng)建,從而優(yōu)化并且避免了完全的二進制文件差異。
[0021]在本發(fā)明的另一實施例中,公開了一種創(chuàng)建并管理至少一個可執(zhí)行的微分二進制文件220的過程。所述過程包括下列步驟:自動解析至少一個具有至少一個動態(tài)特征管理器(DFM)標簽的計算機程序源代碼;基于DFM標簽,創(chuàng)建多個代碼集合,其中,所述代碼集合包括:具有基礎(chǔ)代碼的第一代碼集合,所述基礎(chǔ)代碼為無任何DFM標簽的所述至少一個計算機程序源代碼,以及具有所述基礎(chǔ)代碼和特征的至少一個第二代碼集合,所述特征為碼集;生成多個特征變化表216,所述特征變化表216存儲相對于所述代碼集合中的特征發(fā)生變化的特征的信息;清除所述計算機程序源代碼中的所述DFM標簽,以生成所述基礎(chǔ)代碼,所述DFM標簽用于表示所述特征與所述至少一個計算機程序源代碼隔離;編譯所述代碼集合,以生成多個二進制文件;通過所述特征變化表216,確定所述多個二進制文件中任意兩個二進制文件之間的差異,從而存儲所述確定的差異;基于所述存儲的差異,創(chuàng)建一個或多個微分二進制文件220。在一種實現(xiàn)中,可以基于源代碼中創(chuàng)建的多個特征變化表,確定所述多個二進制文件中任意兩個二進制文件之間的差異,同時,可以只為在差異表中具有條目的部分確定該差異,所述差異表由DFM在解析代碼時創(chuàng)建,從而優(yōu)化并且避免了完全的二進制文件差異。
[0022]在本發(fā)明的另一實施例中,公開了一種創(chuàng)建并管理至少一個可執(zhí)行微分二進制文件220的計算機系統(tǒng)202。所述計算機系統(tǒng)202包括處理器204,和耦合至所述處理器204的存儲器208。所述處理器204能夠執(zhí)行所述存儲器中的多個模塊和多個指令。所述系統(tǒng)202中的所述多個模塊包括分離器模塊210、編譯器打包器模塊212和加載器模塊218。所述分離器模塊210用于解析至少一個具有至少一個動態(tài)特征管理器(DFM)標簽的計算機程序源代碼。進一步地,所述分離器模塊210基于DFM標簽創(chuàng)建多個代碼集合,其中,所述代碼集合包括具有基礎(chǔ)代碼的第一代碼集合,所述基礎(chǔ)代碼為無任何DFM標簽的至少一個計算機程序源代碼,以及具有所述基礎(chǔ)代碼和特征的至少一個第二代碼集合,所述特征為碼集。所述分離器模塊210接著生成多個特征變化表216,所述特征變化表216存儲相對于所述代碼集合中的特征發(fā)生變化的特征的信息。進一步的,所述分離器模塊210清除所述計算機程序源代碼中的所述DFM標簽,以生成基礎(chǔ)代碼,所述DFM標簽用于表示所述特征與所述至少一個計算機程序源代碼隔離。所述編譯器打包器模塊212用于編譯所述代碼集合,以生成多個二進制文件。所述存儲器中的多個指令用于通過所述特征變化表216,確定所述多個二進制文件中任意兩個二進制文件之間的差異,從而存儲所述確定的差異。基于所述存儲的差異,所述系統(tǒng)202接著創(chuàng)建一個或多個微分二進制文件220。在一種實現(xiàn)中,可以基于源代碼中創(chuàng)建的多個特征變化表,確定所述多個二進制文件中任意兩個二進制文件之間的差異,同時,可以只為在差異表中具有條目的部分確定該差異,所述差異表由DFM在解析代碼時創(chuàng)建,從而優(yōu)化并且避免了完全的二進制文件差異。
[0023]根據(jù)下面實施例的詳細描述(結(jié)合附圖閱讀),上述以及其他的特點和優(yōu)點是顯而易見的。
【專利附圖】
【附圖說明】
[0024]結(jié)合附圖進行具體描述。在附圖中,圖例編號最左邊的數(shù)字表示所述圖例編號在該附圖中首次出現(xiàn)。附圖使用的相同編號代表類似的特征和部件。
[0025]相應(yīng)的引用字符在不同的視圖中表示相應(yīng)的部分。此處范例以一種形式說明了本發(fā)明的優(yōu)選實施例,并此類范例不應(yīng)被理解為以任何方式限制本發(fā)明的范圍。
[0026]圖1示出了本申請一個實施例的計算機系統(tǒng)202以及所述計算機系統(tǒng)202創(chuàng)建并管理至少一個可執(zhí)行微分二進制文件220的詳細流程;
[0027]圖2示出了本申請一個實施例的一種創(chuàng)建并管理至少一個可執(zhí)行微分二進制文件220的方法;
[0028]圖3示出了本申請一個實施例的一種動態(tài)特征管理器的功能;
[0029]圖4示出了本申請一個實施例的二進制文件的編譯、生成以及更新;
[0030]圖5 (a)示出了本申請一個實施例的標準ELF文件內(nèi)容;
[0031]圖5(b)示出了本申請一個實施例的典型微分二進制文件內(nèi)容。
[0032]應(yīng)理解的是,所述附圖旨在說明本發(fā)明的一些概念,可能不會進行延伸。
【具體實施方式】
[0033]為使上述的目的、本發(fā)明的技術(shù)方案以及優(yōu)點更容易理解,下面將結(jié)合附圖來描述實施例。
[0034]結(jié)合所附權(quán)利要求和附圖,在下面【具體實施方式】中,本領(lǐng)域的技術(shù)人員將更明確本發(fā)明的目的、優(yōu)點和其他創(chuàng)新性。
[0035]現(xiàn)在,結(jié)合所述附圖,詳細描述本發(fā)明的優(yōu)選實施例。在附圖部分,即使出現(xiàn)在不同的附圖中,相同或相似的要素使用相同的圖例編號表示。在下面描述中,當(dāng)本文已知功能和配置的詳細描述使本申請模糊時,將會省略該詳細描述。
[0036]公開的是一種創(chuàng)建并管理一個或多個微分二進制文件220的系統(tǒng)和方法。使用類似C/C++編程語言中常見的預(yù)處理宏和標記的編程或編碼語言標簽來創(chuàng)建可附加和可拆除的二進制文件。要求用作可附加模塊的代碼功能塊可以設(shè)置在這些標簽之間。建議除流行的編譯器之外還使用至少一個打包器,所述編譯器可以基于附加標志位理解所述標簽和生成微分二進制文件(代替單一二進制文件)。應(yīng)理解的是,所述編譯器可以從現(xiàn)有和已知的編譯器中選擇使用,例如“gcc”編譯器。
[0037]相應(yīng)地,公開的是一種創(chuàng)建并管理一個或多個微分二進制文件220的系統(tǒng)和方法。編程或編碼語言需要時,可以使用一個或多個可執(zhí)行微分二進制文件220。現(xiàn)有技術(shù)中普遍應(yīng)用的實時補丁或熱補丁技術(shù)可以使用所述一個或多個微分二進制文件220。進一步地,對于存儲器運行時的現(xiàn)有或者更新的二進制文件,所述系統(tǒng)和方法可以使用應(yīng)用中的實時補丁技術(shù)加載和/或卸載生成的一個或多個微分二進制文件220。
[0038]在一種實現(xiàn)中,公開了一種計算機系統(tǒng),具有非臨時性計算機可讀介質(zhì),該計算機可讀介質(zhì)上包括已編碼的計算機程序邏輯,當(dāng)在所述系統(tǒng)上執(zhí)行時提供一種創(chuàng)建并管理至少一個可執(zhí)行的微分二進制文件220的機制。所述系統(tǒng)進行解析至少一個具有至少一個動態(tài)特征管理器(DFM)標簽的計算機程序源代碼的操作。基于DFM標簽,所述系統(tǒng)進行基于DFM標簽創(chuàng)建多個代碼集合的操作。所述代碼集合包括:具有基礎(chǔ)代碼的第一代碼集合,所述基礎(chǔ)代碼為無任何DFM標簽的至少一個計算機程序源代碼,以及具有所述基礎(chǔ)代碼和特征的至少一個第二代碼集合,所述特征為碼集。所述系統(tǒng)接著進行生成多個特征變化表216的操作,所述特征變化表216存儲相對于所述代碼集合中的特征發(fā)生變化的特征的信息。所述系統(tǒng)還進行清除所述計算機程序源代碼中的所述DFM標簽的操作,以生成所述基礎(chǔ)代碼,所述DFM標簽用于表示所述特征與所述至少一個計算機程序源代碼隔離。所述系統(tǒng)接著進行編譯所述代碼集合的操作,以生成多個二進制文件。通過所述特征變化表216,所述系統(tǒng)接著進行確定所述多個二進制文件中任意兩個二進制文件之間的差異的操作,從而存儲所述確定的差異。基于所述存儲的差異,所述系統(tǒng)最后進行創(chuàng)建一個或多個微分二進制文件220的操作。在一種實現(xiàn)中,可以基于源代碼中創(chuàng)建的多個特征變化表,確定所述多個二進制文件中任意兩個二進制文件之間的差異,同時,可以只為在差異表中具有條目的部分確定該差異,所述差異表由DFM在解析代碼時創(chuàng)建,從而優(yōu)化并且避免了完全的二進制文件差異。在一種實現(xiàn)中,應(yīng)理解的是,因為所述代碼集合為遞增集合,所述二進制文件也同樣具有遞增特征,所以每個二進制文件之間的差異可以確定。
[0039]盡管下面描述了本發(fā)明的示例實施例,應(yīng)理解的是,沒有規(guī)定的細節(jié)要求本發(fā)明也可以實現(xiàn),同時可以為此處描述的本發(fā)明決定許多具體實現(xiàn)方式,以實現(xiàn)開發(fā)者的具體目標,例如,遵循系統(tǒng)相關(guān)的和業(yè)務(wù)相關(guān)的約束,該約束將隨系統(tǒng)的變化而變化,且開發(fā)工作復(fù)雜且耗時。然而,對于本領(lǐng)域的技術(shù)人員,掌握本發(fā)明公開的利益是一項常規(guī)工作。例如,所選方面都以框圖形式而非細節(jié)形式示出,以避免對本發(fā)明造成模糊或者不適當(dāng)限制。本領(lǐng)域的技術(shù)人員利用這些描述和表達,向本領(lǐng)域的其他技術(shù)人員描述以及傳達工作實質(zhì)。以下將結(jié)合附圖描述本發(fā)明。
[0040]盡管所述一種動態(tài)創(chuàng)建并管理至少一個可執(zhí)行微分二進制文件220的系統(tǒng)和方法的各方面可以以任何數(shù)量的不同計算機系統(tǒng)、環(huán)境和/或配置實現(xiàn),所述實施例以下面示例系統(tǒng)為例進行描述。
[0041]參見圖2,示出了本申請一個實施例的計算機系統(tǒng)202以及所述計算機系統(tǒng)202創(chuàng)建并管理至少一個可執(zhí)行微分二進制文件220的詳細流程。在一種實施例中,所述計算機系統(tǒng)202可以包括至少一個處理器204、輸入/輸出(I/O)接口 206和存儲器208。所述至少一個處理器204可以通過一個或多個微處理器、微型計算機、微型控制器、數(shù)字信號處理器、中央處理器、狀態(tài)機、邏輯電路和/或任意基于操作指令操控信號的設(shè)備來實現(xiàn)。在其他能力中,所述至少一個處理器204用于獲取和執(zhí)行所述存儲器208中存儲的計算機可讀指令。
[0042]所述I/O接口 206可以包括各種軟件和硬件接口,例如,web接口、圖形用戶接口等。所述I/o接口 206可以允許所述計算機系統(tǒng)202直接和用戶交互或者通過客戶端設(shè)備和用戶進行交互。進一步地,所述I/O接口 206可以使所述計算機系統(tǒng)202和其他計算設(shè)備進行通信,如web服務(wù)器和外部數(shù)據(jù)服務(wù)器(未示出)。所述I/O接口 206能夠促進各種網(wǎng)絡(luò)和協(xié)議類型間的多種通信,包括如LAN、線纜等有線網(wǎng)絡(luò)和WLAN、蜂窩或衛(wèi)星等無線網(wǎng)絡(luò)。所述I/O接口 206可以包括一個或多個端口,用以將一些設(shè)備互相連接或連接至其他服務(wù)器。在一種實現(xiàn)中,所述計算機系統(tǒng)202為用戶提供接口 206,可以幫助標記和維護編程代碼,以及提交該編程代碼進行編譯。該計算機系統(tǒng)202也可以包含一個編輯器和圖形實用程序,可供開發(fā)者使用,但與本發(fā)明的范圍不相關(guān)。
[0043]所述存儲器208可以包括本領(lǐng)域已知的任意計算機可讀介質(zhì),例如,包括易失性存儲器,如靜態(tài)隨機存取存儲器(SRAM)和動態(tài)隨機存取存儲器(DRAM),和/或非易失性存儲器,如只讀存儲器(ROM)、可擦除可編程ROM、閃存、硬盤、光盤和磁帶。所述存儲器208可以包括多個模塊和多個指令。
[0044]所述多個模塊包括程序、對象、組件和數(shù)據(jù)結(jié)構(gòu)等,可完成特殊任務(wù)或者實現(xiàn)特殊抽象數(shù)據(jù)類型。在一種實現(xiàn)中,所述模塊可以包括分離器模塊210、編譯器打包器模塊212、加載器模塊218和標準編譯器219。所述存儲器也可以包括補充所述計算機系統(tǒng)202應(yīng)用程序和功能的程序或者編碼指令。所述分離器模塊210還可以包括解析器214和特征變化表216。進一步地,可執(zhí)行的且微分的二進制文件220,以下簡稱可執(zhí)行微分二進制文件220,在所述計算機系統(tǒng)202整個處理過程中生成,并且也可以存儲在所述存儲器208或者也可以存儲在外部存儲器中。
[0045]可以理解的是,所述多個模塊可以生成數(shù)據(jù),此外,所述生成的數(shù)據(jù)可以用作數(shù)據(jù)庫,存儲上述公開的一個或多個模塊處理、接收和生成的數(shù)據(jù)。進一步地,由執(zhí)行所述存儲器中一個或多個程序或編碼指令而生成的數(shù)據(jù)也可以進行存儲。
[0046]在一種實現(xiàn)中,所述存儲器208耦合至處理器204,該處理器執(zhí)行所述存儲器208中的多個模塊和多個指令。所述分離器模塊210可以用于解析至少一個具有至少一個動態(tài)特征管理器(DFM)標簽的計算機程序源代碼。所述分離器模塊210還基于所述DFM標簽創(chuàng)建多個代碼集合。所述代碼集合可以包括具有所述基礎(chǔ)代碼的第一代碼集合,其中,所述基礎(chǔ)代碼為無任何DFM標簽的所述至少一個計算機程序源代碼。所述代碼集合也可以包括具有所述基礎(chǔ)代碼和特征的至少一個第二代碼集合,其中,所述特征為碼集。在一種實現(xiàn)中,所述 DFM 標簽遵循 DFM_〈the feature name>_start 和 DFM_〈the feature name>_end 語法來隔離所述特征??梢栽诰帉懰鲇嬎銠C程序源代碼,或向所述計算機程序源代碼添加新代碼或更新代碼的同時,增加所述DFM標簽。DFM標簽所隔離的特征是從一個包括函數(shù)、全局變量和結(jié)構(gòu)、常見宏、內(nèi)嵌函數(shù)、靜態(tài)變量、以及上述所有的組合的群組中選出。所述DFM標簽遵循規(guī)則,其中每個特征中相應(yīng)的‘end’ DFM標簽與‘start’ DFM標簽相配。所述模塊210清除所述計算機程序源代碼中的所述DFM標簽,以生成基礎(chǔ)代碼,所述DFM標簽用于表示所述特征與所述至少一個計算機程序源代碼隔離。
[0047]在一種實現(xiàn)中,所述分離器模塊210還用于檢查所述DFM標簽的嵌套,并創(chuàng)建所述計算機程序源代碼的層級樹,其中,所述層級樹包括設(shè)置在最高層級的DFM無關(guān)標簽,以及作為所述層級樹中的下層節(jié)點的子標簽和/或兄弟標簽。DFM標簽以下簡稱標簽。
[0048]所述分離器模塊210接著生成多個特征變化表216,所述特征變化表216存儲相對于所述代碼集合中的特征發(fā)生變化的特征的信息。
[0049]在一種實現(xiàn)中,所述分離器模塊210可以用于解析具有至少一個標簽的計算機程序源代碼,以通過至少一個解析器214,在所述計算機程序源代碼中搜索至少一個使用的標簽。所述解析器214可以存儲在所述存儲器208中,可以在需要解析至少一個計算機程序源代碼時獲取。應(yīng)理解的是,所述計算機系統(tǒng)202中使用的解析器214為現(xiàn)有技術(shù)中已有的解析器。所述分離器模塊210還用于檢查所述至少一個標簽的嵌套,并創(chuàng)建所述具有至少一個標簽的計算機程序源代碼的層級樹。所述至少一個標簽的嵌套可以用來建立至少一個特征的疊加。因此,所述標簽的嵌套可以創(chuàng)建多個新的二進制文件。所述創(chuàng)建的層級樹可以包括設(shè)置在最高層級的至少一個無關(guān)標簽,以及作為所述層級樹中的下層節(jié)點的至少一個子標簽和/或兄弟標簽。所述至少一個無關(guān)標簽為不依賴其他任何標簽或自身的標簽,所述至少一個子標簽和/或兄弟標簽為依賴任何其他標簽或自身的標簽?;趯蛹墭涞拿總€節(jié)點,可以創(chuàng)建至少一個新的二進制文件。所述分離器模塊210生成的特征變化表216可以用于存儲相對于所述代碼集合中的特征發(fā)生變化的特征的信息。所述變化特征是從一個包括函數(shù)、全局變量和結(jié)構(gòu)、常見宏、內(nèi)嵌函數(shù)、靜態(tài)變量、和/或上述所有的組合的群組中選出,所述變化的特征是相對于所述代碼集合中的特征發(fā)生變化或新引入或更新的特征。
[0050]所述編譯器打包器模塊212可以用于編譯所述代碼集合,以生成多個二進制文件。所述存儲器中的多個指令然后通過所述特征變化表216,確定所述多個二進制文件中任意兩個二進制文件之間的差異,從而存儲所述確定的差異。所述系統(tǒng)接著基于所述存儲的差異,創(chuàng)建一個或多個微分二進制文件220。在一種實現(xiàn)中,可以基于源代碼中創(chuàng)建的多個特征變化表,確定所述多個二進制文件中任意兩個二進制文件之間的差異,同時,可以只為在差異表中具有條目的部分確定該差異,所述差異表由DFM在解析代碼時創(chuàng)建,從而優(yōu)化并且避免了完全的二進制文件差異。在一種實現(xiàn)中,應(yīng)理解的是,因為所述代碼集合為遞增集合,所述二進制文件也同樣具有遞增特征,所以每個二進制文件之間的差異可以確定。
[0051]所述加載器模塊218可以用于管理所述一個或多個微分二進制文件220,其中,通過在所述存儲器208上動態(tài)加載或卸載所述一個或多個微分二進制文件220,以及將所述一個或多個微分二進制文件220映射到執(zhí)行中的二進制文件,管理所述所述一個或多個微分二進制文件220。
[0052]在一個例子中,可以在編寫所述計算機程序源代碼,或向所述計算機程序源代碼添加新代碼或更新代碼的同時,增加所述至少一個標簽。所述至少一個標簽的嵌套遵循規(guī)貝U,其中每個特征中相應(yīng)的‘end’標簽與‘start’標簽相匹配。
[0053]所述存儲器208也可以包括所述多個指令。在執(zhí)行所述指令時,通過所述特征變化表216,所述指令基于每個所述二進制文件之間的差異生成可執(zhí)行微分二進制文件220。所述指令可以從創(chuàng)建的至少一個新二進制文件中提取特定內(nèi)容,該二進制文件造成確定的差異,其中,所述特定內(nèi)容包括與所述創(chuàng)建的至少一個新二進制文件的至少一個特征相關(guān)的文本和數(shù)據(jù)。所述特定內(nèi)容可以包括與所述創(chuàng)建的至少一個新二進制文件的至少一個特征相關(guān)的源代碼。可以編譯所述提取的特定內(nèi)容,以創(chuàng)建至少一個可執(zhí)行微分二進制文件220。所述至少一個可執(zhí)行微分二進制文件220可以在所述編譯提取的特定內(nèi)容中創(chuàng)建,該內(nèi)容可以包括將所述編譯提取的特定內(nèi)容連接至所述創(chuàng)建的至少一個新二進制文件,或者連接至新的計算機程序源代碼,該計算機程序源代碼在加載所述至少一個可執(zhí)行微分二進制文件220到其中后生成。在一種實現(xiàn)中,可以基于源代碼中創(chuàng)建的多個特征變化表,確定所述多個二進制文件中任意兩個二進制文件之間的差異,同時,可以只為在差異表中具有條目的部分確定該差異,所述差異表由DFM在解析代碼時創(chuàng)建,從而優(yōu)化并且避免了完全的二進制文件差異。在一種實現(xiàn)中,應(yīng)理解的是,因為所述代碼集合為遞增集合,所述二進制文件也同樣具有遞增特征,所以每個二進制文件之間的差異可以確定。
[0054]具有動態(tài)特征管理器功能的計算機系統(tǒng)202也可以包括軟件方面的必要支持,該軟件可以用來執(zhí)行所述至少一個計算機程序源代碼和二進制文件,該二進制文件在加載所述至少一個可執(zhí)行微分二進制文件220到其中后生成。
[0055]本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)很好地理解,所述標準編譯器219和所述編譯器打包器模塊212可以提供程序功能,將高級語言(HLL)代碼轉(zhuǎn)譯成機器語言(MLL)代碼。所述模塊212和標準編譯器219可以檢查所提供的軟件程序中存在的各種限制、范圍和錯誤等。所述編譯器可以通過整個程序運作,然后將整個程序轉(zhuǎn)譯成機器代碼。如果編譯器在一臺計算機上運行,并為該計算機生成機器代碼,那么這被稱為自編譯器或常駐編譯器。另一方面,如果編譯器在一臺計算機上運行,并為其他計算機生成所述機器代碼,那么這被稱為交叉編譯器。
[0056]同樣,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)很好地理解,所述加載器模塊218可以提供程序功能,將程序的機器語言(MLL)代碼加載到系統(tǒng)存儲器中。加載器可以是操作系統(tǒng)的一部分,負責(zé)加載程序。這是開啟程序過程中的重要階段之一,因為它將程序置入存儲器中,并為執(zhí)行做好準備。加載軟件程序代碼包括將可執(zhí)行文件內(nèi)容讀入存儲器中。一旦完成加載,所述操作系統(tǒng)可以由加載的程序代碼控制開啟程序。所有支持程序加載的操作系統(tǒng)都可以具有加載器。在許多操作系統(tǒng)中,加載器常駐在存儲器中。
[0057]在一種實現(xiàn)中,可以通過DFM使用現(xiàn)有技術(shù)中的二進制文件熱補丁,在運行時間管理所述微分二進制文件。本發(fā)明采用標準方法,將已變化函數(shù)開始的跳躍指令引入至加載函數(shù)變化文本的新位置。
[0058]加載和執(zhí)行二進制文件可以遵循所述操作系統(tǒng)標準過程。然而,微分二進制文件需要特殊處理。所述加載器模塊218可以作為標準加載器或獨立加載器的擴充,可能需要將微分二進制文件的特定部分加載至存儲器中,并將該部分映射至已在執(zhí)行中的基礎(chǔ)二進制文件的地址空間。所述加載器模塊218也可以在存儲器中維護注冊表,以記錄給出的實例中加載的特征。在最常見的實現(xiàn)中,所述加載器模塊218的主要任務(wù)即定位變化函數(shù)的原始文本部分,并插入正確的‘jmp’指令,以跳躍至加載更新函數(shù)文本的新地址。這樣,該函數(shù)所有以前的引用將會首先調(diào)用原始函數(shù),然后被立即重定向至新函數(shù)文本。然而,堆棧上可能存在附加函數(shù)幀的開銷。對于數(shù)據(jù)中的變化,需要在基礎(chǔ)二進制文件數(shù)據(jù)段替換和添加所更新和添加的符號,在實現(xiàn)中同時需要處理初始化值和未初始化值。所替換數(shù)據(jù)符號的原始類型和范圍將被存儲入DFM注冊表中,以供需要卸載特征時使用。
[0059]至于卸載,只需將所插入的跳躍指令從原始函數(shù)占用空間中移除,就可返回至先前的函數(shù)。實現(xiàn)數(shù)據(jù)段變化的恢復(fù)更復(fù)雜。例如,可以通過存儲在DFM注冊表中的對應(yīng)類型和范圍,將數(shù)據(jù)變化恢復(fù)至原始值。
[0060]參見圖3,示出了本申請一個實施例的一種創(chuàng)建并管理至少一個可執(zhí)行微分二進制文件220的方法/過程。可以在計算機可執(zhí)行指令的一般背景下描述該方法。一般來講,所述計算機可執(zhí)行指令包括例程程序、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)、規(guī)程、模塊和函數(shù)等,可執(zhí)行特殊函數(shù)或者實現(xiàn)特殊抽象數(shù)據(jù)類型。所述方法也可在分布式計算環(huán)境中實現(xiàn),其中函數(shù)由通過通信網(wǎng)絡(luò)連接的遠程處理設(shè)備執(zhí)行。在分布式計算環(huán)境中,所述計算機可執(zhí)行指令可以位于包括存儲器存儲設(shè)備的本地和遠程計算機存儲介質(zhì)中。
[0061]描述所述方法/過程的順序不應(yīng)理解為限制,并且任何數(shù)量的所述方法塊都可以按任何順序組合來實現(xiàn)本方法或替代方法。另外,在不脫離本申請描述的精神和范圍下,單獨的方法塊可從本方法中刪除。此外,本方法可以由任何合適的硬件、軟件、固件或其組合實現(xiàn)。但是,為方便解釋,下述實施例中本方法可認為是由上述計算機系統(tǒng)202實現(xiàn)。
[0062]方法塊302,可以通過所述計算機系統(tǒng)202提供的接口 206接收計算機程序源代碼。通過分離器模塊210,解析具有至少一個標簽的至少一個計算機程序源代碼。在解析過程中,在至少一個標簽中搜索計算機程序源代碼中使用的至少一個標簽。進一步地,在計算機程序源代碼中檢查至少一個標簽的嵌套,隨后創(chuàng)建具有至少一個標簽的計算機程序源代碼的層級樹。所述層級樹可以包括可設(shè)置在最高層級的至少一個無關(guān)標簽,以及可作為所述層級樹中的下層節(jié)點的至少一個子標簽和/或兄弟標簽。所述至少一個無關(guān)標簽為不依賴其他任何標簽或自身的標簽,所述至少一個子標簽和/或兄弟標簽為依賴任何其他標簽或自身的標簽。所述至少一個標簽的嵌套遵循規(guī)則,其中每個特征的相應(yīng)的‘end’標簽與‘start’標簽相匹配。
[0063]方法塊304,生成基于DFM標簽的多個代碼集合。所述代碼集合可以包括:具有基礎(chǔ)代碼的第一代碼集合,所述基礎(chǔ)代碼為無任何DFM標簽的所述至少一個計算機程序源代碼,以及具有所述基礎(chǔ)代碼和特征的至少一個第二代碼集合,所述特征為碼集。
[0064]方法塊306,生成多個特征變化表216。所述特征變化表216存儲相對于所述代碼集合中的特征發(fā)生變化的特征的信息。所述特征是從一個包括函數(shù)、全局變量和結(jié)構(gòu)、常見宏、內(nèi)嵌函數(shù)、靜態(tài)變量以及上述所有的組合的群組中選出。
[0065]步驟308,清除計算機程序源代碼中的DFM標簽,以生成基礎(chǔ)代碼。所述DFM標簽可以將特征與所述至少一個計算機程序源代碼隔離。在編寫所述計算機程序源代碼,或向所述計算機程序源代碼添加新代碼或更新代碼的同時,可以添加至少一個標簽。清除所述計算機程序源代碼中的至少一個標簽之后,編譯至少一個計算機程序源代碼。可以通過上述公開的內(nèi)置解析器清除計算機程序源代碼。
[0066]步驟310,編譯代碼集合,以生成多個二進制文件。
[0067]步驟312,通過特征變化表216,確定每個所述二進制文件之間的差異,并存儲所述確定的差異。
[0068]步驟314,基于存儲的差異,創(chuàng)建一個或多個微分二進制文件220。
[0069]參見圖3,示出了本申請一個實施例的一種動態(tài)特征管理器的功能。在一種實現(xiàn)中,動態(tài)特征管理器(DFM)可為本發(fā)明提供實用程序和框架。DFM可以主要包括如DFM自身的特征管理實用程序;為開發(fā)者和DFM用戶編譯提供接口的DFM編譯打包器;如加載器或DFM加載器的運行時間特征管理實用程序,幫助用戶加載和卸載可插入特征或運行時創(chuàng)建的可執(zhí)行二進制文件;如DFM分離器,幫助DFM識別基于DFM標簽的代碼中發(fā)現(xiàn)的微分功能塊。
[0070]動態(tài)特征管理器可為用戶提供接口 206,幫助標記和維護代碼,以及提交該代碼進行編譯。該特征可包含一個編輯器和圖形實用程序供開發(fā)者使用,但與本發(fā)明的范圍不相關(guān)。
[0071]DFM編譯打包器即為編譯器模塊212,可以作為開發(fā)者和編譯器的中介。編譯打包器也涉及編譯階段,用來提供與編碼中使用的DFM標簽所隱含的限制相關(guān)的編譯錯誤和警告。至于編碼中的功能塊,也幫助管理DFM標簽的統(tǒng)計信息和差異信息。
[0072]DFM加載器即為加載器模塊212,可以作為實用程序在運行時管理delta特征或創(chuàng)建的新二進制文件的特征。為用戶提供接口,以在存儲器中動態(tài)加載或卸載delta功能塊或可執(zhí)行二進制文件。使用現(xiàn)有技術(shù)參考文件所列出的任意普遍應(yīng)用的熱補丁技術(shù),可加載和卸載存儲器中的動態(tài)特征。
[0073]DFM分離器即為分離器模塊210,解析代碼中的DFM標簽,至于所發(fā)現(xiàn)的每個有效特征標簽,創(chuàng)建代碼中所觀察的變化分類列表。同時在不同的工作區(qū)創(chuàng)建階段式代碼集合,這些工作區(qū)用來生成與每個特征對應(yīng)的二進制文件。
[0074]本發(fā)明使用DFM標簽隔離代碼的附加功能塊。這可能涉及給特定的語言定義語法和附加構(gòu)造。下面以使用C語言和Gnu編譯器套裝作為編譯器的細節(jié)為例證明該提議的實施性。
[0075]可以使用DFM標簽在編寫原始代碼時隔離特定特征,或者將作為特征的代碼添加至現(xiàn)有的代碼基庫時。DFM標簽需要遵循DFM_〈the feature name>_start和DFM_〈thefeature name>_end語法來隔離功能塊。可能存在多個功能塊,具有相同特征并跨越整個代碼基庫,直至每個功能塊清晰地與特定特征以‘start’標簽和‘end’標簽隔離。也需要確??缭酱a基庫的相同特征的特征標簽集合沒有將不一致帶入現(xiàn)有代碼或附加代碼中。
[0076]作為描述特征疊加的例子,通過DFM標簽,提供原始代碼片段和一小部分附加代碼(表示附加特征):
[0077]原始代碼,只需輸入并顯示數(shù)字:
[0078]#include<std1.h>#include<stdlib.h>int main(){long int Result = 0
[0079]long Sum_dig = 0 ;
[0080]printf ("\n Enter Number:") ;scanf (\^% ld\", &Num);
[0081]Result = Num ;
[0082]printf("\n the Result is: % Id", Result) ;return (0);
[0083]}
[0084]如果add sum是一個特征,
[0085]采用DFM_SUM_start 和 DFM_SUM_end 作為標簽:
[0086]#include<std1.h>
[0087]#include<stdlib.h>
[0088]DFM_SUM_start
[0089]#include<ctype.h>#include<math.h>long int Sum_of_Digits(long intNumber)
[0090]{static long int sum = 0 ; if (Number = = 0)
[0091]{return (sum);
[0092]}else
[0093]{
[0094]sum = sum+Number% 10+Sum_of_Digits(Number/10);
[0095]}
[0096]return (sum);
[0097]}
[0098]DFM_SUM_end
[0099]int main () {long int Result = 0
[0100]long Sum_dig = 0 ;
[0101]printf("\n Enter Number:") ;scanf(\"% ld\",&Num);
[0102]DFM—SUM—start
[0103]Sum—dig = Sum—of—Digits (Num);
[0104]Result = Sum—dig ;
[0105]DFM—SUM—end
[0106]printf ("\n the Result is: % ld",result) ;return(0);
[0107]}
[0108]鑒于本文將進一步地包含細節(jié),DFM管理器將為每個特征(或特征集合)在內(nèi)部創(chuàng)建工作區(qū),所談及的基礎(chǔ)二進制文件叫做Bb,附加特征叫做f!,f2等。
[0109]這是理解整個過程最簡單的示例,且不應(yīng)限制本發(fā)明的范圍,當(dāng)使用代碼集合這一術(shù)語時,指對文件、文件夾和相關(guān)性不造成限制的代碼基庫。
[0110]可以嵌套DFM標簽以建立特征的疊加,從而使DFM能夠創(chuàng)建多個delta 二進制文件,該二進制文件可在運行時按需接連相互加載。DFM特征的嵌套應(yīng)遵循一個簡單的規(guī)則,即相應(yīng)的特征‘end’標簽與出現(xiàn)的每個特征的‘start’標簽相匹配。例如,下面為代表多個互相嵌套特征的代碼片段:
[0111]因此,除SUM外,引進另一個名為DEBUGPRINT的特征。
[0112]DFM—DEBUGPRINT—start 和 DFM—DEBUGPRINT—end 用作標簽:
[0113]#include<std1.h>
[0114]#include<stdlib.h>
[0115]DFM_SUM_start//sum feature
[0116]#include<ctype.h>
[0117]#include<math.h>
[0118]long int Sum—of—Digits (long int Number)
[0119]{
[0120]static long int sum = 0 ; if (Number == 0)
[0121 ] {return (sum);
[0122]}else{
[0123]sum = sum+Number% 10+Sum—of—Digits(Number/10);
[0124]}
[0125]return (sum);
[0126]}
[0127]DFM—SUM—end
[0128]DFM—DEBUGPRINT—start//debugprint feature
[0129]#define DEBUGPRINT (msg) \
[0130]printf ( “debug print from file-% s,and line-% d,as_% s/n”,—FILE—,—LINE—,msg);
[0131 ] DFM—DEBUGPRINT—end
[0132]int main () {long int Result = 0
[0133]long Sum—dig = 0 ;
[0134]printf ("\n Enter Number:") ;scanf (\^% ld\", &Num);
[0135]DFM_SUM_start
[0136]Sum_dig = Sum_of_Digits (Num);
[0137]DFM_DEBUGPRINT_start
[0138]DEBUGPRINT( “sum of digits introduced,,);
[0139]DFM_DEBUGPRINT_end
[0140]Result = Sum_dig ;
[0141]DFM_SUM_end
[0142]printf("\n the Result is: % Id", result) ;return(0);
[0143]}
[0144]參見圖4,示出了本申請一個實施例的二進制文件的編譯、生成以及更新。在一種實現(xiàn)中,在最初編寫代碼時,或在向一開始沒有緊跟DFM標簽的現(xiàn)有代碼基庫中添加新特征時,開發(fā)者可能需要使用DFM標簽將特征與基庫隔離。開發(fā)者也應(yīng)當(dāng)遵從前面部分所列舉的匹配標簽和管理疊加特征的準則??梢越又峤淮a進行編譯,編譯時使用表示隔離疊加的特征的標志;或者提交代碼用于生成默認二進制文件。根據(jù)本發(fā)明,下列語法可以用來將標志提交至DFM:
[0145]為特征Π至fn生成可執(zhí)行基礎(chǔ)二進制文件和附加二進制文件:
[0146]使用標志-dfm_overlayflf2…fn
[0147]生成一個單一可執(zhí)行二進制文件:
[0148]刪除標志-dfm_overlay
[0149]圖5演示了運行時二進制文件的編譯、生成和更新,該流程描述如下:
[0150]下面說明的是DFM分離器以及如何從代碼中提取特征信息。
[0151]在一種實現(xiàn)中,根據(jù)為編譯過程提供的特征標簽,并使用-dfm_0Verlay標志的參數(shù),附加代碼分離器隔離代碼基庫。該分離器使用下列方法:
[0152]創(chuàng)建基礎(chǔ)代碼集合,清除其中的包括標簽的任何DFM標簽中所有代碼。
[0153]解析代碼原始原本,搜索標簽使用和任何嵌套的合法性;如果發(fā)現(xiàn)非法使用或非法嵌套標簽,向用戶返回錯誤并停止進一步解析。
[0154]隨后創(chuàng)建嵌套標簽的層級樹,所有不相關(guān)標簽在最高層級中,所有子標簽和/或兄弟標簽作為層級樹中的下層節(jié)點。
[0155]在步驟I創(chuàng)建的基礎(chǔ)代碼集合基礎(chǔ)上,使用從廣度上優(yōu)先遍歷的層級樹的每個節(jié)點添加的代碼創(chuàng)建代碼集合,隨后疊加在創(chuàng)建的每一上級代碼集合上。在創(chuàng)建這些集合時,可以通過給層級樹的每個節(jié)點分配獨立工作區(qū)來完成,且可在工作區(qū)內(nèi)管理具有合適變化的代碼文件集。
[0156]與上述步驟并行的是,向標準編譯器提交每個節(jié)點代碼集合,以進行編譯。每個集合的編譯可以同時進行,因為代碼邏輯上是隔離的。如果任何編譯步驟返回錯誤,向用戶返回該錯誤并停止下一步。
[0157]上述提及的算法可能是實現(xiàn)代碼層級特征隔離的最簡單方法,憑直覺便可以推斷出許多優(yōu)化方法,例如,將層級樹同一層級的多個特征合并到單一特征集合中。
[0158]結(jié)合上述公開的實現(xiàn),下面說明的是微分二進制文件的創(chuàng)建以及所生成的二進制文件的布局。
[0159]動態(tài)特征管理器了解提交給自身的標簽和代碼,可具備一個非常簡單的解析器,可以是分離器的一部分。根據(jù)上一實施例所列的算法,分離器可以使用該解析器來隔離代碼并生成微分代碼集合。在不同工作區(qū)創(chuàng)建的代碼集合可以提交至標準編譯器,以進行編譯。成功編譯所有集合后,在同等數(shù)量的工作區(qū)可總共生成n+1個二進制文件,其中,η為所出現(xiàn)的不同特征標簽的數(shù)量。除向編譯器提交代碼集合外,該分離器也可生成特征變化表。這些表可以存儲每個特征的字符串變化。這些表將存儲關(guān)于函數(shù)、全局變量和結(jié)構(gòu)、常見宏、內(nèi)嵌函數(shù)、靜態(tài)變量等信息,相對于所述代碼集合中的特征發(fā)生變化或新引入的特征的信息。一個表格可以對應(yīng)添加至對應(yīng)基礎(chǔ)代碼集合頂部的特征之間的差異。
[0160]動態(tài)特征管理器可以采用下列方法生成微分二進制文件,該方法使用ELF文件格式作為參考,但不僅限于該格式:
[0161]將Bb作為生成的基礎(chǔ)二進制文件,[Bb+fJ作為使用基礎(chǔ)代碼集合和特征I代碼生成的二進制文件,[Bb+fi+fg作為使用基礎(chǔ)代碼集合、特征I代碼和特征2代碼生成的二進制文件,以此類推。
[0162]1.Bb為基礎(chǔ)二進制文件,使用時將不做改變。
[0163]2.對于特征1,查看表格Tl (關(guān)于基礎(chǔ)集合和具有基址和特征I的代碼集合之間變化的列表)。
[0164]打開新的二進制文件進行編寫(微分二進制目標文件一Bfl);存儲具有DFM信息的elf頭結(jié)構(gòu)。
[0165]關(guān)于Tl列表中每個變化條目:
[0166]a.在二進制elf文件中搜索對應(yīng)生成的目標代碼。需要查閱的部分將對應(yīng)于文本和數(shù)據(jù)。
[0167]b.如果該變化列表關(guān)于函數(shù),為新微分二進制目標文件Bfl中的文本存儲程序頭結(jié)構(gòu)。從[Bb+fJ的文本部分提取更新函數(shù)的全部占用空間,并將其存入與該程序頭對應(yīng)的部分。
[0168]c.如果該變化列表關(guān)于全局結(jié)構(gòu)或全局變量,引用相同的全局結(jié)構(gòu)或全局變量的所有函數(shù)需按照上一步驟存儲進Bfl中。需要為更新的數(shù)據(jù)添加附加程序頭和相應(yīng)的節(jié)段。單一數(shù)據(jù)段可以存儲全局數(shù)據(jù)中的所有變化。圖6(a)示出了 elf文件的微分二進制文件的示例格式。
[0169]d.如果該變化列表關(guān)于宏或內(nèi)嵌函數(shù),引用相同的宏或內(nèi)嵌函數(shù)的所有函數(shù)需按照第二步存儲進Bfl中。
[0170]3.可以按照所述生成特征I的相同步驟,生成隨后的特征2、特征3等和Bf2、Bf3等的微分二進制文件。
[0171]本領(lǐng)域的技術(shù)人員應(yīng)理解,在新函數(shù)占用空間中,數(shù)據(jù)和調(diào)用函數(shù)的外部符號引用需要在創(chuàng)建的基礎(chǔ)二進制文件中編址。因此,例如Bfl中的存儲段和所有連續(xù)的微分二進制文件也應(yīng)處理所述外部符號編址。在存儲器中加載重定位條目和修補時,也需要編址。為詳細說明使用ELF文件示例,在基礎(chǔ)二進制文件的.rel.txt和.rela.txt的elf部分識別所有代碼重定位。新函數(shù)占用空間中的外部符號引用應(yīng)該在存儲進微分二進制文件前更新為正確的地址。同樣,如果該符號來自動態(tài)加載的共享目標,則修補地址為基礎(chǔ)二進制文件的PLT (過程鏈接表)中的對應(yīng)條目,且應(yīng)在新函數(shù)占用空間中正確更新。
[0172]關(guān)于全局變量和結(jié)構(gòu)的數(shù)據(jù)段更新更為復(fù)雜,尤其因為與每個及局部更新相關(guān)的類型可能在結(jié)構(gòu)中生成。盡管可以實現(xiàn)更新,為行文簡潔,此處不再說明elf格式的實現(xiàn)例子。
[0173]應(yīng)理解的是,上面提供的例子為具體實現(xiàn)的示例,且旨在使本發(fā)明清晰。進一步地,值得注意的是,本發(fā)明并未在現(xiàn)有編譯器中引入任何變化,且提交至DFM的標志僅為該DFM所使用。
[0174]參見圖5(a),示出了本申請一個實施例的標準ELF文件內(nèi)容。
[0175]圖5(b)示出了本申請一個實施例的示例性的微分二進制文件內(nèi)容。
[0176]雖然已經(jīng)用結(jié)構(gòu)特征和/或方法特有的語言描述了為現(xiàn)有二進制文件創(chuàng)建具有較少開銷和更短升級時間的可執(zhí)行二進制文件的實現(xiàn)方式,應(yīng)理解的是,所附權(quán)利要求并不局限于所述具體特征和方法。相反,公開所述具體特征和方法,用來作為實現(xiàn)為現(xiàn)有二進制文件創(chuàng)建具有較少開銷和更短更新時間的可執(zhí)行二進制文件的例子。
[0177]在一個例子中,通過特征變化表216,可提取所存儲的每個所述二進制文件之間的差異,并按照某一 elf文件格式和系統(tǒng)命名法存儲到新的文件中。這就是微分二進制文件,并將作為可執(zhí)行微分二進制文件220。
[0178]上述示例實施例可以具有某些優(yōu)點。盡管不需要實現(xiàn)本發(fā)明公開的各方面,但這些優(yōu)點可以包括:
[0179]1.本發(fā)明以命令式以及某種程度的面向?qū)ο笳Z言的目標二進制目標的形式,提供了一種動態(tài)二進制文件特征更新以及特征隔離的機制(面向?qū)ο缶幊陶Z言不具備這種機制)。
[0180]2.本發(fā)明將有助于使用這些語言編寫和維護代碼,尤其對此類語言的遺留代碼無疑有利。
[0181]3.本發(fā)明提供了可更新版本的附加特征,以及較新版本的所述特征的運行時間。
[0182]4.本發(fā)明公開了一種可解析計算機程序代碼和理解特征標簽的解析器。
[0183]5.本發(fā)明提供了按需動態(tài)加載和卸載微分特征的方法。
[0184]最后應(yīng)理解的是,以上實施例僅用以說明,而非限制本申請的技術(shù)方案。盡管本申請的詳細描述參照上述優(yōu)選實施例,應(yīng)當(dāng)理解的是,在不脫離本申請和權(quán)利要求所覆蓋的范圍條件下,本領(lǐng)域技術(shù)人員依然可以做出各種修改、改變或者等同替換。
【權(quán)利要求】
1.一種計算機系統(tǒng)202,其特征在于,具有非臨時性計算機可讀介質(zhì),該計算機可讀介質(zhì)上包括已編碼的計算機程序邏輯,當(dāng)在所述系統(tǒng)202上執(zhí)行時提供一種創(chuàng)建并管理一個或多個可執(zhí)行微分二進制文件220的機制,使所述系統(tǒng)202執(zhí)行以下操作: 解析至少一個計算機程序源代碼,其中所述計算機程序源代碼具有至少一個動態(tài)特征管理器DFM標簽; 基于所述DFM標簽創(chuàng)建多個代碼集合,其中,所述代碼集合包括:具有基礎(chǔ)代碼的第一代碼集合,所述基礎(chǔ)代碼為無任何DFM標簽的所述至少一個計算機程序源代碼,以及具有所述基礎(chǔ)代碼和特征的至少一個第二代碼集合,所述特征為碼集; 生成一個或多個特征變化表216,所述特征變化表216存儲相對于所述代碼集合中的特征發(fā)生變化的特征的信息; 清除計算機程序源代碼中的所述DFM標簽,以生成所述基礎(chǔ)代碼,所述DFM標簽用于表示所述特征與所述至少一個計算機程序源代碼隔離; 編譯所述代碼集合,以生成多個二進制文件; 通過所述特征變化表216,確定所述多個二進制文件中任意兩個二進制文件之間的差巳升; 基于所述確定的差異,創(chuàng)建一個或多個微分二進制文件220,所述一個或多個可執(zhí)行微分二進制文件220包括所述創(chuàng)建的一個或多個微分二進制文件220。
2.根據(jù)權(quán)利要求1所述的計算機系統(tǒng)202,其特征在于,所述DFM標簽遵循DFM_〈thefeature name>_start 和 DFM_〈the feature name>_end 語法來隔離所述特征。
3.根據(jù)權(quán)利要求1或2所述的計算機系統(tǒng)202,其特征在于,在編寫所述計算機程序源代碼時添加所述DFM標簽。
4.根據(jù)權(quán)利要求1至3任一項所述的計算機系統(tǒng)202,其特征在于,在向所述計算機程序源代碼添加新代碼或更新代碼時增加所述DFM標簽。
5.根據(jù)權(quán)利要求1或2所述的計算機系統(tǒng)202,其特征在于,所述特征是從一個包括函數(shù)、全局變量和結(jié)構(gòu)、常見宏、內(nèi)嵌函數(shù)、靜態(tài)變量、以及上述的組合的群組中選出。
6.根據(jù)權(quán)利要求1至4任一項所述的計算機系統(tǒng)202,其特征在于,在所述解析至少一個具有至少一個動態(tài)特征管理器(DFM)標簽的計算機程序源代碼時,所述計算機系統(tǒng)202還用于執(zhí)行以下操作: 解析至少一個具有至少一個動態(tài)特征管理器(DFM)標簽的計算機程序源代碼,以檢查所述DFM標簽的嵌套,并創(chuàng)建所述計算機程序源代碼的層級樹,其中,所述層級樹包括設(shè)置在最高層級的DFM無關(guān)標簽,以及作為所述層級樹中的下層節(jié)點的子標簽和/或兄弟標簽。
7.根據(jù)權(quán)利要求1所述的計算機系統(tǒng)202,其特征在于,所述變化的特征是從一個包括函數(shù)、全局變量和結(jié)構(gòu)、常見宏、內(nèi)嵌函數(shù)、靜態(tài)變量、和/或上述的組合的群組中選出,所述變化的特征是相對于所述代碼集合中的特征發(fā)生變化或新引入或更新的特征。
8.根據(jù)權(quán)利要求1至4任一項所述的計算機系統(tǒng)202,其特征在于,所述DFM標簽遵循規(guī)則,其中每個特征相應(yīng)的‘end’ DFM標簽與‘start’ DFM標簽相匹配。
9.根據(jù)權(quán)利要求1所述的計算機系統(tǒng)202,其特征在于,所述系統(tǒng)202還用于執(zhí)行以下操作:將所述一個或多個微分二進制文件220加載到存儲器中,并將所述一個或多個微分二進制文件220映射到執(zhí)行中的二進制文件。
10.一種創(chuàng)建并管理至少一個可執(zhí)行微分二進制文件220的方法,其特征在于,所述方法包括: 解析至少一個具有至少一個動態(tài)特征管理器(DFM)標簽的計算機程序源代碼; 基于所述DFM標簽創(chuàng)建多個代碼集合,其中,所述代碼集合包括:具有基礎(chǔ)代碼的第一代碼集合,所述基礎(chǔ)代碼為無任何DFM標簽的所述至少一個計算機程序源代碼,以及具有所述基礎(chǔ)代碼和特征的至少一個第二代碼集合,所述特征為碼集; 生成一個或多個特征變化表216,所述特征變化表216存儲相對于所述代碼集合中的特征發(fā)生變化的特征的信息; 清除所述計算機程序源代碼中的所述DFM標簽,以生成基礎(chǔ)代碼,其中所述DFM標簽用于表示所述特征與所述至少一個計算機程序源代碼隔離; 編譯所述代碼集合,以生成多個二進制文件; 通過所述特征變化表216,確定所述多個二進制文件中任意兩個二進制文件之間的差巳升; 基于所述確定的差異,創(chuàng)建一個或多個微分二進制文件220,所述一個或多個可執(zhí)行微分二進制文件220包括所述創(chuàng)建的一個或多個微分二進制文件220。
11.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述DFM標簽采遵循DFM_〈thefeaturename>_start 和 DFM_〈the feature name>_end 語法來隔離所述特征。
12.根據(jù)權(quán)利要求10和11所述的方法,其特征在于,在編寫所述計算機程序源代碼時添加所述DFM標簽。
13.根據(jù)權(quán)利要求10至12任一項所述的方法,其特征在于,在向所述計算機程序源代碼添加新代碼或更新代碼時增加所述DFM標簽。
14.根據(jù)權(quán)利要求10或11所述的方法,其特征在于,所述特征是從一個包括函數(shù)、全局變量和結(jié)構(gòu)、常見宏、內(nèi)嵌函數(shù)、靜態(tài)變量、以及上述的組合的群組中選出。
15.根據(jù)權(quán)利要求10至13任一項所述的方法,其特征在于, 所述解析至少一個具有至少一個動態(tài)特征管理器(DFM)標簽的計算機程序源代碼包括: 解析至少一個具有至少一個動態(tài)特征管理器(DFM)標簽的計算機程序源代碼,以檢查所述DFM標簽的嵌套,并創(chuàng)建所述計算機程序源代碼的層級樹,其中,所述層級樹包括設(shè)置在最高層級的DFM無關(guān)標簽,以及作為所述層級樹中的下層節(jié)點的子標簽和/或兄弟標簽。
16.根據(jù)權(quán)利要求11所述的方法,其特征在于,所述變化的特征是從一個包括函數(shù)、全局變量和結(jié)構(gòu)、常見宏、內(nèi)嵌函數(shù)、靜態(tài)變量、和/或上述的組合的群組中選出,所述變化的特征是相對于所述代碼集合中的特征發(fā)生變化或新引入或更新的特征。
17.根據(jù)權(quán)利要求10至13任一項所述的方法,其特征在于,所述DFM標簽遵循規(guī)則,其中每個特征相應(yīng)的‘end’ DFM標簽與‘start’ DFM標簽相匹配。
18.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述方法還包括: 將所述一個或多個微分二進制文件220加載到存儲器中,并將所述一個或多個微分二進制文件220映射到執(zhí)行中的二進制文件。
19.一種創(chuàng)建并管理至少一個可執(zhí)行微分二進制文件220的計算機系統(tǒng)202,其特征在于,所述計算機系統(tǒng)202包括: 處理器204和耦合至所述處理器204的存儲器208,該處理器用于執(zhí)行所述存儲器中的多個模塊和多個指令,其中,所述多個模塊包括: 分離器模塊210,用于:解析至少一個具有至少一個動態(tài)特征管理器(DFM)標簽的計算機程序源代碼; 基于所述DFM標簽創(chuàng)建多個代碼集合,其中,所述代碼集合包括: 具有基礎(chǔ)代碼的第一代碼集合,所述基礎(chǔ)代碼為無任何DFM標簽的所述至少一個計算機程序源代碼, 以及具有所述基礎(chǔ)代碼和特征的至少一個第二代碼集合,所述特征為碼集; 生成多個特征變化表216,所述程序變化表216存儲相對于所述第一代碼集合和所述第二代碼集合中的特征發(fā)生變化的特征的信息; 清除所述計算機程序源代碼中的所述DFM標簽,以生成基礎(chǔ)代碼,所述DFM標簽用于表示將所述特征與所述至少一個計算機程序源代碼隔離; 編譯器打包器模塊212,用于編譯所述第一代碼集合和所述第二代碼集合,以生成多個二進制文件; 所述多個指令用于:通過所述特征變化表216,確定所述多個二進制文件中任意兩個二進制文件之間的差異;基于所述確定的差異,創(chuàng)建一個或多個微分二進制文件220,所述一個或多個可執(zhí)行微分二進制文件220包括所述創(chuàng)建的一個或多個微分二進制文件220。
20.根據(jù)權(quán)利要求19所述的計算機系統(tǒng)202,其特征在于,還包括加載器模塊218,用于管理所述一個或多個微分二進制文件220,其中,通過加載所述一個或多個微分二進制文件220至所述存儲器208,以及將所述一個或多個微分二進制文件220映射到執(zhí)行中的二進制文件,管理所述所述一個或多個微分二進制文件220。
21.根據(jù)權(quán)利要求19或20所述的計算機系統(tǒng)202,其特征在于,還包括加載器模塊218,用于管理所述一個或多個微分二進制文件220,其中,通過從所述存儲器208中卸載所述一個或多個微分二進制文件220,管理所述一個或多個微分二進制文件220。
22.根據(jù)權(quán)利要求19所述的計算機系統(tǒng)202,其特征在于,所述DFM標簽遵循DFM_〈thefeature name>_start 和 DFM_〈the feature name>_end 語法來隔離所述特征。
23.根據(jù)權(quán)利要求19或22所述的計算機系統(tǒng)202,其特征在于,在編寫所述計算機程序源代碼時增加所述DFM標簽。
24.根據(jù)權(quán)利要求19、22或23所述的計算機系統(tǒng)202,其特征在于,在向所述計算機程序源代碼添加新代碼或更新代碼時增加所述DFM標簽。
25.根據(jù)權(quán)利要求19或22所述的計算機系統(tǒng)202,其特征在于,所述特征是從一個包括函數(shù)、全局變量和結(jié)構(gòu)、常見宏、內(nèi)嵌函數(shù)、靜態(tài)變量、以及上述的組合的群組中選出。
26.根據(jù)權(quán)利要求19、22、23或24所述的計算機系統(tǒng)202,其特征在于,在所述解析至少一個具有至少一個動態(tài)特征管理器(DFM)標簽的計算機程序源代碼時,所述分離器模塊210還用于解析至少一個具有至少一個動態(tài)特征管理器(DFM)標簽的計算機程序源代碼,以檢查所述DFM標簽的嵌套,并創(chuàng)建所述計算機程序源代碼的層級樹,其中,所述層級樹包括設(shè)置在最高層級的DFM無關(guān)標簽,以及作為所述層級樹中的下層節(jié)點的子標簽和/或兄弟標簽。
27.根據(jù)權(quán)利要求19所述的計算機系統(tǒng)202,其特征在于,所述變化的特征是從一個包括函數(shù)、全局變量和結(jié)構(gòu)、常見宏、內(nèi)嵌函數(shù)、靜態(tài)變量、和/或上述的組合的群組中選出,所述變化的特征是相對于所述代碼集合中的特征發(fā)生變化或新引入或更新的特征。
28.根據(jù)權(quán)利要求19、22、23或24所述的計算機系統(tǒng)202,所述DFM標簽遵循規(guī)則,其中每個特征相應(yīng)的‘end’ DFM標簽與‘start’ DFM標簽相匹配。
【文檔編號】G06F17/30GK104380250SQ201480001541
【公開日】2015年2月25日 申請日期:2014年10月29日 優(yōu)先權(quán)日:2014年5月21日
【發(fā)明者】伊凡·阿爾·瑞赫曼, 奈爾·撒尼爾·庫馬爾·迪瓦卡然 申請人:華為技術(shù)有限公司