TW201545067A - 一種動態創建可附加和可拆除二進位檔案的系統和方法 - Google Patents
一種動態創建可附加和可拆除二進位檔案的系統和方法 Download PDFInfo
- Publication number
- TW201545067A TW201545067A TW104115142A TW104115142A TW201545067A TW 201545067 A TW201545067 A TW 201545067A TW 104115142 A TW104115142 A TW 104115142A TW 104115142 A TW104115142 A TW 104115142A TW 201545067 A TW201545067 A TW 201545067A
- Authority
- TW
- Taiwan
- Prior art keywords
- dfm
- code
- tag
- feature
- computer program
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/54—Link editing before load time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/423—Preprocessors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/658—Incremental updates; Differential updates
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
一種動態創建可附加和可拆除二進位檔案的技術。提供了一種管理關於附加代碼的現有代碼基庫有效機制,附加代碼為用作單一代碼基庫的特定特徵所需。同時也為設計者提供一種機制,甚至可在代碼概念化之前規劃此類特徵。系統解析具有DFM標籤的代碼,以生成基礎代碼,DFM標籤隔離特徵。基於DFM標籤創建多個代碼集合。生成特徵變化表,並將其存入系統中,特徵變化表儲存相對於代碼集合中的特徵發生變化的特徵的資訊。接著編譯代碼集合以生成二進位檔案。通過特徵變化表,確定並儲存每個二進位檔案之間的差異,以用來創建一個或多個微分二進位檔案。
Description
本申請總體涉及一種創建二進位檔案的系統和方法,尤其涉及一種動態創建可附加和可拆除二進位檔案的系統和方法。
傳統上,軟體發展的過程具有非常嚴謹的生命週期。該過程的步驟,即固定順序為編寫代碼、編譯、調試並解決問題以及發佈和部署。軟體二進位或二進位檔案一經使用,如不重新啟動,則向運行中的二進位檔案添加或從其中移除特徵變得極其困難。即使重新開機,如果軟體狀態不得不恢復至初始狀態,那麼開銷將非常龐大。
已經有一些方案可解決這一局限,但是每個方案均有各自的缺陷。例如,開發的軟體可能具有模組,這些模組儲存了日誌級別資訊、調試資訊等,旨在基於如何編譯或配置提供不同的功能。通過一些標誌或配置值,可以在執行時間控制這些模組/檔案的運行狀態,但是必須使用整個二進位檔案來創建軟體代碼。
共用庫或動態載入庫也可用於管理此類特徵,但是與庫連接並管理庫的代碼應在最初編寫的代碼中。
現有技術提供了各種方案,可以在編寫期間使用預處理巨集配置調試和日誌級別管理;或者在執行時間配置調試和日誌級別管理只要預處理巨集屬於初始設計和代碼的一部分。所述模組也可當做可動態載入的庫,但是同樣地,設計和編碼這些模組必須在一開始完成,同時載入以及與正確庫連接的附加代碼必須在初始二進位檔案中。另外,傳統意義上這些應用設計具有各種日誌級別、蹤跡列印以及維護日誌選項。上述選項應屬於應用代碼的一部分,因此編譯的目標代碼應屬於二進位檔案或庫的一部分。可以使用即時補丁應用添加附加代碼,但是這些補丁需分別管理初始代碼和新增代碼,在理想情況下作為補丁或不同檔案。進一步地,該補丁技術僅對缺陷修正或小升級適用。
管理這些模組或特徵的另一方案具有稍微不同的功能,即在編譯期間使用預處理宏。使用預處理宏將會清除由此產生的二進位檔案中的備選流代碼,隨後將無法恢復,除非再次編譯二進位檔案。同樣,通過在執行時間使用一些配置值,可以使能或去使能特徵邏輯,但是只有通過選擇備用碼流或路徑才實現,並且只有特徵邏輯是初始設計、代碼、以及隨後的編譯的目標代碼的一部分,才可完成。
同樣地,在一個方案中,這些模組也可當做可動態載入的庫,關於庫的軟體設計同樣應該在一開始完成,且與庫連接的配套代碼必須在軟體中。
除上述提及的局限,現有技術的方案更具有各種其他制
約因素。下面列舉了其中一些因素:
1. 使用附加特徵或者使用發佈的二進位檔案每次部署時可能不使用的特徵不支援單流開發。
2. 如果單流代碼開發可以使用即時補丁,需要分別維護和跟蹤補丁或不同的檔案。單個源碼庫在這類情況中不能被很好地支持。
3. 因為上述局限和約束因素,降低了開發品質和效率。
4. 此外,若有更大的應用規模,則維護需求非常高,且應用的規模使得對二進位檔案作出較大變化變得困難。
儘管避免上述提及的局限和約束因素的技術日益發展,仍需要提供有效的技術方案,以克服上述的局限和約束因素。因此,亟需但仍未提供的一種技術是動態創建可附加和可拆除微分二進位檔案。通過減少現有二進位檔案中任何特徵的升級時間和成本,該技術提供了一種有效的解決方案。
本發明內容介紹的概念涉及一種創建可執行二進位檔案的系統和方法,為現有的二進位檔案減少了開銷,縮短升級時間,下面進一步具體描述所述概念。本發明內容不旨在確定所要求保護的本申請的必要特徵,也不旨在確定或限定所要求保護的本申請的範圍。
通過提供一種動態創建可附加和可拆除微分二進位檔案的優化方法和系統,上述問題得以解決,並實現了一種技術方案。本發明通過提供一種有效的解決方案,減少了現有以及當前
執行的二進位檔案中現有或者需要新添加的任意特徵的升級時間和成本。
因此,本發明的一個主要目的是提供一種動態創建可附加和可拆除微分二進位檔案的系統和方法,為現有以及當前執行的二進位檔案中的任意特徵,或現有以及當前執行的二進位檔案中添加的新特徵,減少了開銷,並縮短了升級時間,降低了成本。
本發明的另一目的是支援單流開發、基礎特徵以及附加特徵,可在同一代碼基庫中進行隔離。
本發明的另一目的是無需維護補丁或微分代碼檔案等更新資訊,同時實現在同一代碼基庫上的連續開發。
本發明的再一目的在於,通過本發明提出的減少現有以及當前執行的二進位檔案中現有或者新添加的任意特徵的升級時間和成本,從而提高軟體發展的品質和效率。
本發明的又一目的在於,只有必要和要求的二進位代碼段即優化佔用空間,可以在目標執行時間環境中使用。只有當需要用做微分二進位檔案時,附加特徵才可被引進。
因此,在本發明的一個實施例中,公開了一種電腦系統,具有非臨時性電腦可讀媒體,該電腦可讀媒體上包括已編碼的電腦程式邏輯,當在所述系統上執行時提供一種創建並管理至少一個可執行微分二進位檔案220的機制。所述系統進行解析至少一個具有至少一個動態特徵管理器(DFM)標籤的電腦程式原始程式碼的操作。所述系統進行基於DFM標籤創建多個代碼集合的操作。所述代碼集合包括:具有基礎代碼的第一代碼集合,所述基礎代碼為無任何DFM標籤的至少一個電腦程式原始程式碼,
以及具有所述基礎代碼和特徵的至少一個第二代碼集合,所述特徵為碼集。所述系統接著進行生成多個特徵變化表216的操作,所述特徵變化表216儲存相對於所述代碼集合中的特徵發生變化的特徵的資訊。所述系統更進行清除所述電腦程式原始程式碼中的所述DFM標籤的操作,以生成所述基礎代碼,所述DFM標籤用於表示所述特徵與所述至少一個電腦程式原始程式碼隔離。所述系統接著進行編譯所述代碼集合的操作,以生成多個二進位檔案。通過所述特徵變化表216,所述系統接著進行確定所述多個二進位檔案中任意兩個二進位檔案之間的差異的操作,從而儲存所述確定的差異。基於所述儲存的差異,所述系統最後進行創建一個或多個微分二進位檔案220的操作。在一種實現中,可以基於原始程式碼中創建的多個特徵變化表,確定所述多個二進位檔案中任意兩個二進位檔案之間的差異,同時,可以只為在差異表中具有條目的部分確定該差異,所述差異表由DFM在解析代碼時創建,從而優化並且避免了完全的二進位檔案差異。
在本發明的另一實施例中,公開了一種創建並管理至少一個可執行的微分二進位檔案220的過程。所述過程包括下列步驟:自動解析至少一個具有至少一個動態特徵管理器(DFM)標籤的電腦程式原始程式碼;基於DFM標籤,創建多個代碼集合,其中,所述代碼集合包括:具有基礎代碼的第一代碼集合,所述基礎代碼為無任何DFM標籤的所述至少一個電腦程式原始程式碼,以及具有所述基礎代碼和特徵的至少一個第二代碼集合,所述特徵為碼集;生成多個特徵變化表216,所述特徵變化表216儲存相對於所述代碼集合中的特徵發生變化的特徵的資訊;清除
所述電腦程式原始程式碼中的所述DFM標籤,以生成所述基礎代碼,所述DFM標籤用於表示所述特徵與所述至少一個電腦程式原始程式碼隔離;編譯所述代碼集合,以生成多個二進位檔案;通過所述特徵變化表216,確定所述多個二進位檔案中任意兩個二進位檔案之間的差異,從而儲存所述確定的差異;基於所述儲存的差異,創建一個或多個微分二進位檔案220。在一種實現中,可以基於原始程式碼中創建的多個特徵變化表,確定所述多個二進位檔案中任意兩個二進位檔案之間的差異,同時,可以只為在差異表中具有條目的部分確定該差異,所述差異表由DFM在解析代碼時創建,從而優化並且避免了完全的二進位檔案差異。
在本發明的另一實施例中,公開了一種創建並管理至少一個可執行微分二進位檔案220的電腦系統202。所述電腦系統202包括處理器204,和耦合至所述處理器204的記憶體208。所述處理器204能夠執行多個模組和所述記憶體中的多個指令。所述電腦系統202中的所述多個模組包括分離器模組210、編譯器打包器模組212和載入器模組218。所述分離器模組210用於解析至少一個具有至少一個動態特徵管理器(DFM)標籤的電腦程式原始程式碼。進一步地,所述分離器模組210基於DFM標籤創建多個代碼集合,其中,所述代碼集合包括具有基礎代碼的第一代碼集合,所述基礎代碼為無任何DFM標籤的至少一個電腦程式原始程式碼,以及具有所述基礎代碼和特徵的至少一個第二代碼集合,所述特徵為碼集。所述分離器模組210接著生成多個特徵變化表216,所述特徵變化表216儲存相對於所述代碼集合中的特徵發生變化的特徵的資訊。進一步的,所述分離器模組210清除所
述電腦程式原始程式碼中的所述DFM標籤,以生成基礎代碼,所述DFM標籤用於表示所述特徵與所述至少一個電腦程式原始程式碼隔離。所述編譯器打包器模組212用於編譯所述代碼集合,以生成多個二進位檔案。所述記憶體中的多個指令用於通過所述特徵變化表216,確定所述多個二進位檔案中任意兩個二進位檔案之間的差異,從而儲存所述確定的差異。基於所述儲存的差異,所述系統202接著創建一個或多個微分二進位檔案220。在一種實現中,可以基於原始程式碼中創建的多個特徵變化表,確定所述多個二進位檔案中任意兩個二進位檔案之間的差異,同時,可以只為在差異表中具有條目的部分確定該差異,所述差異表由DFM在解析代碼時創建,從而優化並且避免了完全的二進位檔案差異。
根據下面實施例的詳細描述(結合附圖閱讀),上述以及其他的特點和優點是顯而易見的。
202‧‧‧電腦系統
204‧‧‧處理器
206‧‧‧介面
208‧‧‧記憶體
210‧‧‧分離器模組
212‧‧‧編譯器打包器模組
214‧‧‧解析器
216‧‧‧特徵變化表
218‧‧‧載入器模組
219‧‧‧標準編譯器
220‧‧‧可執行微分二進位檔案
302、304、306、308、310、312、314‧‧‧步驟
本發明內容介紹的概念涉及一種創建可執行二進位檔案的系統和方法,為現有的二進位檔案減少了開銷,縮短升級時間,下面進一步具體描述所述概念。本發明內容不旨在確定所要求保護的本申請的必要特徵,也不旨在確定或限定所要求保護的本申請的範圍。
圖1示出了本申請一個實施例的電腦系統以及所述電腦系統創建並管理至少一個可執行微分二進位檔案的詳細流程。
圖2示出了本申請一個實施例的一種創建並管理至少一個可執行微分二進位檔案的方法。
圖3示出了本申請一個實施例的一種動態特徵管理器的功能。
圖4示出了本申請一個實施例的二進位檔案的編譯、生成以及更新。
圖5A示出了本申請一個實施例的標準ELF檔案內容。
圖5B示出了本申請一個實施例的典型微分二進位檔案內容。
應理解的是,所述附圖旨在說明本發明的一些概念,可能不會進行延伸。
為使上述的目的、本發明的技術方案以及優點更容易理解,下面將結合附圖來描述實施例。
結合所附權利要求和附圖,在下面具體實施方式中,本領域的技術人員將更明確本發明的目的、優點和其他創新性。
現在,結合所述附圖,詳細描述本發明的優選實施例。在附圖部分,即使出現在不同的附圖中,相同或相似的要素使用相同的圖例編號表示。在下面描述中,當本文已知功能和配置的詳細描述使本申請模糊時,將會省略該詳細描述。
公開的是一種創建並管理一個或多個微分二進位檔案220的系統和方法。使用類似C/C++程式設計語言中常見的預處理宏和標記的程式設計或編碼語言標籤來創建可附加和可拆除的二進位檔案。要求用作可附加模組的代碼功能塊可以設置在這些標籤之間。建議除流行的編譯器之外更使用至少一個打包器,所述編譯器可以基於附加標誌位元理解所述標籤和生成微分二進位檔案(代替單一二進位檔案)。應理解的是,所述編譯器可以從現有
和已知的編譯器中選擇使用,例如“gcc”編譯器。
相應地,公開的是一種創建並管理一個或多個微分二進位檔案220的系統和方法。程式設計或編碼語言需要時,可以使用一個或多個可執行微分二進位檔案220。現有技術中普遍應用的即時補丁或熱補丁技術可以使用所述一個或多個微分二進位檔案220。進一步地,對於記憶體運行時的現有或者更新的二進位檔案,所述系統和方法可以使用應用中的即時補丁技術載入和/或卸載生成的一個或多個微分二進位檔案220。
在一種實現中,公開了一種電腦系統,具有非臨時性電腦可讀媒體,該電腦可讀媒體上包括已編碼的電腦程式邏輯,當在所述系統上執行時提供一種創建並管理至少一個可執行的微分二進位檔案220的機制。所述系統進行解析至少一個具有至少一個動態特徵管理器(DFM)標籤的電腦程式原始程式碼的操作。基於DFM標籤,所述系統進行基於DFM標籤創建多個代碼集合的操作。所述代碼集合包括:具有基礎代碼的第一代碼集合,所述基礎代碼為無任何DFM標籤的至少一個電腦程式原始程式碼,以及具有所述基礎代碼和特徵的至少一個第二代碼集合,所述特徵為碼集。所述系統接著進行生成多個特徵變化表216的操作,所述特徵變化表216儲存相對於所述代碼集合中的特徵發生變化的特徵的資訊。所述系統更進行清除所述電腦程式原始程式碼中的所述DFM標籤的操作,以生成所述基礎代碼,所述DFM標籤用於表示所述特徵與所述至少一個電腦程式原始程式碼隔離。所述系統接著進行編譯所述代碼集合的操作,以生成多個二進位檔案。通過所述特徵變化表216,所述系統接著進行確定所述多個二
進位檔案中任意兩個二進位檔案之間的差異的操作,從而儲存所述確定的差異。基於所述儲存的差異,所述系統最後進行創建一個或多個微分二進位檔案220的操作。在一種實現中,可以基於原始程式碼中創建的多個特徵變化表,確定所述多個二進位檔案中任意兩個二進位檔案之間的差異,同時,可以只為在差異表中具有條目的部分確定該差異,所述差異表由DFM在解析代碼時創建,從而優化並且避免了完全的二進位檔案差異。在一種實現中,應理解的是,因為所述代碼集合為遞增集合,所述二進位檔案也同樣具有遞增特徵,所以每個二進位檔案之間的差異可以確定。
儘管下面描述了本發明的示例實施例,應理解的是,沒有規定的細節要求本發明也可以實現,同時可以為此處描述的本發明決定許多具體實現方式,以實現開發者的具體目標,例如,遵循系統相關的和業務相關的約束,該約束將隨系統的變化而變化,且開發工作複雜且耗時。然而,對於本領域的技術人員,掌握本發明公開的利益是一項常規工作。例如,所選方面都以方塊圖形式而非細節形式示出,以避免對本發明造成模糊或者不適當限制。本領域的技術人員利用這些描述和表達,向本領域的其他技術人員描述以及傳達工作實質。以下將結合附圖描述本發明。
儘管所述一種動態創建並管理至少一個可執行微分二進位檔案220的系統和方法的各方面可以以任何數量的不同電腦系統、環境和/或配置實現,所述實施例以下面示例系統為例進行描述。
參見圖2,示出了本申請一個實施例的電腦系統202以及所述電腦系統202創建並管理至少一個可執行微分二進位檔案
220的詳細流程。在一種實施例中,所述電腦系統202可以包括至少一個處理器204、輸入/輸出(I/O)介面206和記憶體208。所述至少一個處理器204可以通過一個或多個微處理器、微型電腦、微型控制器、數位訊號處理器、中央處理器、狀態機、邏輯電路和/或任意基於操作指令操控信號的設備來實現。在其他能力中,所述至少一個處理器204用於獲取和執行所述記憶體208中儲存的電腦可讀指令。
所述I/O介面206可以包括各種軟體和硬體介面,例如,web介面、圖形使用者介面等。所述I/O介面206可以允許所述電腦系統202直接和使用者交互或者通過用戶端設備和使用者進行交互。進一步地,所述I/O介面206可以使所述電腦系統202和其他電腦設備進行通信,如web伺服器和外部資料伺服器(未示出)。所述I/O介面206能夠促進各種網路和協定類型間的多種通信,包括如LAN、線纜等有線網路和WLAN、蜂窩或衛星等無線網路。所述I/O介面206可以包括一個或多個埠,用以將一些設備互相連接或連接至其他伺服器。在一種實現中,所述電腦系統202為使用者提供介面206,可以說明標記和維護程式設計代碼,以及提交該程式設計代碼進行編譯。該電腦系統202也可以包含一個編輯器和圖形實用程式,可供開發者使用,但與本發明的範圍不相關。
所述記憶體208可以包括本領域已知的任意電腦可讀媒體,例如,包括揮發性記憶體,如靜態隨機存取記憶體(SRAM)和動態隨機存取記憶體(DRAM),和/或非揮發性記憶體,如唯讀記憶體(ROM)、可抹可規劃唯讀記憶體、快閃記憶體、硬碟、光
碟和磁帶。所述記憶體208可以包括多個模組和多個指令。
所述多個模組包括程式、物件、元件和資料結構等,可完成特殊任務或者實現特殊抽象資料類型。在一種實現中,所述模組可以包括分離器模組210、編譯器打包器模組212、載入器模組218和標準編譯器219。所述記憶體也可以包括補充所述電腦系統202應用程式和功能的程式或者編碼指令。所述分離器模組210更可以包括解析器214和特徵變化表216。進一步地,可執行的且微分的二進位檔案220,以下簡稱可執行微分二進位檔案220,在所述電腦系統202整個處理過程中生成,並且也可以儲存在所述記憶體208或者也可以儲存在外部記憶體中。
可以理解的是,所述多個模組可以生成資料,此外,所述生成的資料可以用作資料庫,儲存上述公開的一個或多個模組處理、接收和生成的資料。進一步地,由執行所述記憶體中一個或多個程式或編碼指令而生成的資料也可以進行儲存。
在一種實現中,所述記憶體208耦合至處理器204,該處理器執行所述記憶體208中的多個模組和多個指令。所述分離器模組210可以用於解析至少一個具有至少一個動態特徵管理器(DFM)標籤的電腦程式原始程式碼。所述分離器模組210更基於所述DFM標籤創建多個代碼集合。所述代碼集合可以包括具有所述基礎代碼的第一代碼集合,其中,所述基礎代碼為無任何DFM標籤的所述至少一個電腦程式原始程式碼。所述代碼集合也可以包括具有所述基礎代碼和特徵的至少一個第二代碼集合,其中,所述特徵為碼集。在一種實現中,所述DFM標籤遵循DFM_<the feature name>_start和DFM_<the feature name>_end語法來隔離所
述特徵。可以在編寫所述電腦程式原始程式碼,或向所述電腦程式原始程式碼添加或更新新代碼的同時,增加所述DFM標籤。DFM標籤所隔離的特徵是從一個包括函數、全域變數和結構、常見巨集、內嵌函數、靜態變數、以及上述所有的組合的群組中選出。所述DFM標籤遵循規則,其中每個特徵中相應的‘end’DFM標籤與‘start’DFM標籤相配。所述模組210清除所述電腦程式原始程式碼中的所述DFM標籤,以生成基礎代碼,所述DFM標籤用於表示所述特徵與所述至少一個電腦程式原始程式碼隔離。
在一種實現中,所述分離器模組210更用於檢查所述DFM標籤的嵌套,並創建所述電腦程式原始程式碼的層級樹,其中,所述層級樹包括設置在最高層級的DFM無關標籤,以及作為所述層級樹中的下層節點的子標籤和/或兄弟標籤。DFM標籤以下簡稱標籤。
所述分離器模組210接著生成多個特徵變化表216,所述特徵變化表216儲存相對於所述代碼集合中的特徵發生變化的特徵的資訊。
在一種實現中,所述分離器模組210可以用於解析具有至少一個標籤的電腦程式原始程式碼,以通過至少一個解析器214,在所述電腦程式原始程式碼中搜索至少一個使用的標籤。所述解析器214可以儲存在所述記憶體208中,可以在需要解析至少一個電腦程式原始程式碼時獲取。應理解的是,所述電腦系統202中使用的解析器214為現有技術中已有的解析器。所述分離器模組210更用於檢查所述至少一個標籤的嵌套,並創建所述具有至少一個標籤的電腦程式原始程式碼的層級樹。所述至少一個標
籤的嵌套可以用來建立至少一個特徵的疊加。因此,所述標籤的嵌套可以創建多個新的二進位檔案。所述創建的層級樹可以包括設置在最高層級的至少一個無關標籤,以及作為所述層級樹中的下層節點的至少一個子標籤和/或兄弟標籤。所述至少一個無關標籤為不依賴其他任何標籤或自身的標籤,所述至少一個子標籤和/或兄弟標籤為依賴任何其他標籤或自身的標籤。基於層級樹的每個節點,可以創建至少一個新的二進位檔案。所述分離器模組210生成的特徵變化表216可以用於儲存相對於所述代碼集合中的特徵發生變化的特徵的資訊。所述變化特徵是從一個包括函數、全域變數和結構、常見巨集、內嵌函數、靜態變數、和/或上述所有的組合的群組中選出,所述變化的特徵是相對於所述代碼集合中的特徵發生變化或新引入或更新的特徵。
所述編譯器打包器模組212可以用於編譯所述代碼集合,以生成多個二進位檔案。所述記憶體中的多個指令然後通過所述特徵變化表216,確定所述多個二進位檔案中任意兩個二進位檔案之間的差異,從而儲存所述確定的差異。所述系統接著基於所述儲存的差異,創建一個或多個微分二進位檔案220。在一種實現中,可以基於原始程式碼中創建的多個特徵變化表,確定所述多個二進位檔案中任意兩個二進位檔案之間的差異,同時,可以只為在差異表中具有條目的部分確定該差異,所述差異表由DFM在解析代碼時創建,從而優化並且避免了完全的二進位檔案差異。在一種實現中,應理解的是,因為所述代碼集合為遞增集合,所述二進位檔案也同樣具有遞增特徵,所以每個二進位檔案之間的差異可以確定。
所述載入器模組218可以用於管理所述一個或多個微分二進位檔案220,其中,通過在所述記憶體208上動態載入或卸載所述一個或多個微分二進位檔案220,以及將所述一個或多個微分二進位檔案220映射到執行中的二進位檔案,管理所述所述一個或多個微分二進位檔案220。
在一個例子中,可以在編寫所述電腦程式原始程式碼,或向所述電腦程式原始程式碼添加或更新新代碼的同時,增加所述至少一個標籤。所述至少一個標籤的嵌套遵循規則,其中每個特徵中相應的‘end’標籤與‘start’標籤相匹配。
所述記憶體208也可以包括所述多個指令。在執行所述指令時,通過所述特徵變化表216,所述指令基於每個所述二進位檔案之間的差異生成可執行微分二進位檔案220。所述指令可以從創建的至少一個新二進位檔案中提取特定內容,該二進位檔案造成確定的差異,其中,所述特定內容包括與所述創建的至少一個新二進位檔案的至少一個特徵相關的文本和資料。所述特定內容可以包括與所述創建的至少一個新二進位檔案的至少一個特徵相關的原始程式碼。可以編譯所述提取的特定內容,以創建至少一個可執行微分二進位檔案220。所述至少一個可執行微分二進位檔案220可以在所述編譯提取的特定內容中創建,該內容可以包括將所述編譯提取的特定內容連接至所述創建的至少一個新二進位檔案,或者連接至新的電腦程式原始程式碼,該電腦程式原始程式碼在載入所述至少一個可執行微分二進位檔案220到其中後生成。在一種實現中,可以基於原始程式碼中創建的多個特徵變化表,確定所述多個二進位檔案中任意兩個二進位檔案之間的差
異,同時,可以只為在差異表中具有條目的部分確定該差異,所述差異表由DFM在解析代碼時創建,從而優化並且避免了完全的二進位檔案差異。在一種實現中,應理解的是,因為所述代碼集合為遞增集合,所述二進位檔案也同樣具有遞增特徵,所以每個二進位檔案之間的差異可以確定。
具有動態特徵管理器功能的電腦系統202也可以包括軟體方面的必要支援,該軟體可以用來執行所述至少一個電腦程式原始程式碼和二進位檔案,該二進位檔案在載入所述至少一個可執行微分二進位檔案220到其中後生成。
本領域的技術人員應當很好地理解,所述標準編譯器219和所述編譯器打包器模組212可以提供程式功能,將高階語言(HLL)代碼轉譯成機器語言(MLL)代碼。所述編譯器打包器模組212和標準編譯器219可以檢查所提供的軟體程式中存在的各種限制、範圍和錯誤等。所述編譯器可以通過整個程式運作,然後將整個程式轉譯成機器代碼。如果編譯器在一台電腦上運行,並為該電腦生成機器代碼,那麼這被稱為自編譯器或常駐編譯器。另一方面,如果編譯器在一台電腦上運行,並為其他電腦生成所述機器代碼,那麼這被稱為交叉編譯器。
同樣,本領域的技術人員應當很好地理解,所述載入器模組218可以提供程式功能,將程式的機器語言(MLL)代碼載入到系統記憶體中。載入器可以是作業系統的一部分,負責載入程式。這是開啟程式過程中的重要階段之一,因為它將程式置入記憶體中,並為執行做好準備。載入軟體程式碼包括將可執行檔案內容讀入記憶體中。一旦完成載入,所述作業系統可以由載入
的程式碼控制開啟程式。所有支援程式載入的作業系統都可以具有載入器。在許多作業系統中,載入器常駐在記憶體中。
在一種實現中,可以通過DFM使用現有技術中的二進位檔案熱補丁,在執行時間管理所述微分二進位檔案。本發明採用標準方法,將已變化函數開始的跳躍指令引入至載入函數變化文本的新位置。
載入和執行二進位檔案可以遵循所述作業系統標準過程。然而,微分二進位檔案需要特殊處理。所述載入器模組218可以作為標準載入器或獨立載入器的擴充,可能需要將微分二進位檔案的特定部分載入至記憶體中,並將該部分映射至已在執行中的基礎二進位檔案的位址空間。所述載入器模組218也可以在記憶體中維護註冊表,以記錄給出的實例中載入的特徵。在最常見的實現中,所述載入器模組218的主要任務即定位變化函數的原始文本部分,並插入正確的‘jmp’指令,以跳躍至載入更新函數文本的新位址。這樣,該函數所有以前的引用將會首先調用原始函數,然後被立即重定向至新函數文本。然而,堆疊上可能存在附加函數幀的開銷。對於資料中的變化,需要在基礎二進位檔案資料段替換和添加所更新和添加的符號,在實現中同時需要處理初始化值和未初始化值。所替換資料符號的原始類型和範圍將被儲存入DFM註冊表中,以供需要卸載特徵時使用。
至於卸載,只需將所插入的跳躍指令從原始函數佔用空間中移除,就可返回至先前的函數。實現資料段變化的恢復更複雜。例如,可以通過儲存在DFM註冊表中的對應類型和範圍,將資料變化恢復至原始值。
參見圖3,示出了本申請一個實施例的一種創建並管理至少一個可執行微分二進位檔案220的方法/過程。可以在電腦可執行指令的一般背景下描述該方法。一般來講,所述電腦可執行指令包括常式程式、程式、物件、元件、資料結構、規程、模組和函數等,可執行特殊函數或者實現特殊抽象資料類型。所述方法也可在分散式運算環境中實現,其中函數由通過通信網路連接的遠端處理設備執行。在分散式運算環境中,所述電腦可執行指令可以位於包括記憶體存放裝置的本地和遠端電腦儲存媒體中。
描述所述方法/過程的順序不應理解為限制,並且任何數量的所述方法塊都可以按任何順序組合來實現本方法或替代方法。另外,在不脫離本申請描述的精神和範圍下,單獨的方法塊可從本方法中刪除。此外,本方法可以由任何合適的硬體、軟體、韌體或其組合實現。但是,為方便解釋,下述實施例中本方法可認為是由上述電腦系統202實現。
步驟302,可以通過所述電腦系統202提供的介面206接收電腦程式原始程式碼。通過分離器模組210,解析具有至少一個標籤的至少一個電腦程式原始程式碼。在解析過程中,在至少一個標籤中搜索電腦程式原始程式碼中使用的至少一個標籤。進一步地,在電腦程式原始程式碼中檢查至少一個標籤的嵌套,隨後創建具有至少一個標籤的電腦程式原始程式碼的層級樹。所述層級樹可以包括可設置在最高層級的至少一個無關標籤,以及可作為所述層級樹中的下層節點的至少一個子標籤和/或兄弟標籤。所述至少一個無關標籤為不依賴其他任何標籤或自身的標籤,所述至少一個子標籤和/或兄弟標籤為依賴任何其他標籤或自身的標
籤。所述至少一個標籤的嵌套遵循規則,其中每個特徵的相應的‘end’標籤與‘start’標籤相匹配。
步驟304,生成基於DFM標籤的多個代碼集合。所述代碼集合可以包括:具有基礎代碼的第一代碼集合,所述基礎代碼為無任何DFM標籤的所述至少一個電腦程式原始程式碼,以及具有所述基礎代碼和特徵的至少一個第二代碼集合,所述特徵為碼集。
步驟306,生成多個特徵變化表216。所述特徵變化表216儲存相對於所述代碼集合中的特徵發生變化的特徵的資訊。所述特徵是從一個包括函數、全域變數和結構、常見巨集、內嵌函數、靜態變數以及上述所有的組合的群組中選出。
步驟308,清除電腦程式原始程式碼中的DFM標籤,以生成基礎代碼。所述DFM標籤可以將特徵與所述至少一個電腦程式原始程式碼隔離。在編寫所述電腦程式原始程式碼,或向所述電腦程式原始程式碼添加或更新新代碼的同時,可以添加至少一個標籤。清除所述電腦程式原始程式碼中的至少一個標籤之後,編譯至少一個電腦程式原始程式碼。可以通過上述公開的內置解析器清除電腦程式原始程式碼。
步驟310,編譯代碼集合,以生成多個二進位檔案。
步驟312,通過特徵變化表216,確定每個所述二進位檔案之間的差異,並儲存所述確定的差異。
步驟314,基於儲存的差異,創建一個或多個微分二進位檔案220。
參見圖3,示出了本申請一個實施例的一種動態特徵管理
器的功能。在一種實現中,動態特徵管理器(DFM)可為本發明提供實用程式和框架。DFM可以主要包括如DFM自身的特徵管理實用程式;為開發者和DFM使用者編譯提供介面的DFM編譯打包器;如載入器或DFM載入器的執行時間特徵管理實用程式,說明使用者載入和卸載可插入特徵或運行時創建的可執行二進位檔案;如DFM分離器,幫助DFM識別基於DFM標籤的代碼中發現的微分功能塊。
動態特徵管理器可為使用者提供介面206,說明標記和維護代碼,以及提交該代碼進行編譯。該特徵可包含一個編輯器和圖形實用程式供開發者使用,但與本發明的範圍不相關。
DFM編譯打包器即為編譯器模組212,可以作為開發者和編譯器的仲介。編譯打包器也涉及編譯階段,用來提供與編碼中使用的DFM標籤所隱含的限制相關的編譯錯誤和警告。至於編碼中的功能塊,也幫助管理DFM標籤的統計資訊和差異資訊。
DFM載入器即為載入器模組212,可以作為實用程式在運行時管理delta特徵或創建的新二進位檔案的特徵。為使用者提供介面,以在記憶體中動態載入或卸載delta功能塊或可執行二進位檔案。使用現有技術參考檔案所列出的任意普遍應用的熱補丁技術,可載入和卸載記憶體中的動態特徵。
DFM分離器即為分離器模組210,解析代碼中的DFM標籤,至於所發現的每個有效特徵標籤,創建代碼中所觀察的變化分類列表。同時在不同的工作區創建階段式代碼集合,這些工作區用來生成與每個特徵對應的二進位檔案。
本發明使用DFM標籤隔離代碼的附加功能塊。這可能涉
及給特定的語言定義語法和附加構造。下面以使用C語言和Gnu編譯器套裝作為編譯器的細節為例證明該提議的實施性。
可以使用DFM標籤在編寫原始代碼時隔離特定特徵,或者將作為特徵的代碼添加至現有的代碼基庫時。DFM標籤需要遵循DFM_<the feature name>_start和DFM_<the feature name>_end語法來隔離功能塊。可能存在多個功能塊,具有相同特徵並跨越整個代碼基庫,直至每個功能塊清晰地與特定特徵以‘start’標籤和‘end’標籤隔離。也需要確保跨越代碼基庫的相同特徵的特徵標籤集合沒有將不一致帶入現有代碼或附加代碼中。
作為描述特徵疊加的例子,通過DFM標籤,提供原始代碼片段和一小部分附加代碼(表示附加特徵):原始代碼,只需輸入並顯示數字:
如果add sum是一個特徵,採用DFM_SUM_start和DFM_SUM_end作為標籤:
鑒於本文將進一步地包含細節,DFM管理器將為每個特徵(或特徵集合)在內部創建工作區,所談及的基礎二進位檔案叫做Bb,附加特徵叫做f1,f2等。
這是理解整個過程最簡單的示例,且不應限制本發明的
範圍,當使用代碼集合這一術語時,指對檔案、資料夾和相關性不造成限制的代碼基庫。
可以嵌套DFM標籤以建立特徵的疊加,從而使DFM能夠創建多個delta二進位檔案,該二進位檔案可在運行時按需接連相互載入。DFM特徵的嵌套應遵循一個簡單的規則,即相應的特徵‘end’標籤與出現的每個特徵的‘start’標籤相匹配。例如,下面為代表多個互相嵌套特徵的代碼片段:因此,除SUM外,引進另一個名為DEBUGPRINT的特徵。
DFM_DEBUGPRINT_start和DFM_DEBUGPRINT_end用作標籤:
參見圖4,示出了本申請一個實施例的二進位檔案的編譯、生成以及更新。在一種實現中,在最初編寫代碼時,或在向一開始沒有緊跟DFM標籤的現有代碼基庫中添加新特徵時,開發者可能需要使用DFM標籤將特徵與基庫隔離。開發者也應當遵從前面部分所列舉的匹配標籤和管理疊加特徵的準則。可以接著提
交代碼進行編譯,編譯時使用表示隔離疊加的特徵的標誌;或者提交代碼用於生成預設二進位檔案。根據本發明,下列語法可以用來將標誌提交至DFM:為特徵f1至fn生成可執行基礎二進位檔案和附加二進位檔案:使用標誌-dfm_overlay f1 f2…fn
生成一個單一可執行二進位檔案:刪除標誌-dfm_overlay
圖5A和圖5B演示了運行時二進位檔案的編譯、生成和更新,該流程描述如下:下面說明的是DFM分離器以及如何從代碼中提取特徵資訊。
在一種實現中,根據為編譯過程提供的特徵標籤,並使用-dfm_overlay標誌的參數,附加代碼分離器隔離代碼基庫。該分離器使用下列方法:創建基礎代碼集合,清除其中的包括標籤的任何DFM標籤中所有代碼。
解析代碼原始原本,搜索標籤使用和任何嵌套的合法性;如果發現非法使用或非法嵌套標籤,向使用者返回錯誤並停止進一步解析。
隨後創建嵌套標籤的層級樹,所有不相關標籤在最高層級中,所有子標籤和/或兄弟標籤作為層級樹中的下層節點。
在步驟1創建的基礎代碼集合基礎上,使用從廣度上優先遍歷的層級樹的每個節點添加的代碼創建代碼集合,隨後疊加
在創建的每一上級代碼集合上。在創建這些集合時,可以通過給層級樹的每個節點分配獨立工作區來完成,且可在工作區內管理具有合適變化的代碼檔案集。
與上述步驟並行的是,向標準編譯器提交每個節點代碼集合,以進行編譯。每個集合的編譯可以同時進行,因為代碼邏輯上是隔離的。如果任何編譯步驟返回錯誤,向使用者返回該錯誤並停止下一步。
上述提及的演算法可能是實現代碼層級特徵隔離的最簡單方法,憑直覺便可以推斷出許多優化方法,例如,將層級樹同一層級的多個特徵合併到單一特徵集合中。
結合上述公開的實現,下面說明的是微分二進位檔案的創建以及所生成的二進位檔案的佈局。
動態特徵管理器瞭解提交給自身的標籤和代碼,可具備一個非常簡單的解析器,可以是分離器的一部分。根據上一實施例所列的演算法,分離器可以使用該解析器來隔離代碼並生成微分代碼集合。在不同工作區創建的代碼集合可以提交至標準編譯器,以進行編譯。成功編譯所有集合後,在同等數量的工作區可總共生成n+1個二進位檔案,其中,n為所出現的不同特徵標籤的數量。除向編譯器提交代碼集合外,該分離器也可生成特徵變化表。這些表可以儲存每個特徵的字串變化。這些表將儲存關於函數、全域變數和結構、常見巨集、內嵌函數、靜態變數等資訊,相對於所述代碼集合中的特徵發生變化或新引入的特徵的資訊。一個表格可以對應添加至對應基礎代碼集合頂部的特徵之間的差異。
動態特徵管理器可以採用下列方法生成微分二進位檔案,該方法使用ELF檔案格式作為參考,但不僅限於該格式:將Bb作為生成的基礎二進位檔案,[Bb+f1]作為使用基礎代碼集合和特徵1代碼生成的二進位檔案,[Bb+f1+f2]作為使用基礎代碼集合、特徵1代碼和特徵2代碼生成的二進位檔案,以此類推。
1. Bb為基礎二進位檔案,使用時將不做改變。
2. 對於特徵1,查看表格T1(關於基礎集合和具有基址和特徵1的代碼集合之間變化的清單)。
打開新的二進位檔案進行編寫(微分二進位目的檔案一Bf1);儲存具有DFM資訊的elf頭結構。
關於T1列表中每個變化條目:
a. 在二進位elf檔案中搜索對應生成的目標代碼。需要查閱的部分將對應於文本和資料。
b. 如果該變化清單關於函數,為新微分二進位目的檔案Bf1中的文本儲存程式頭結構。從[Bb+f1]的文本部分提取更新函數的全部佔用空間,並將其存入與該程式頭對應的部分。
c.如果該變化清單關於全域結構或全域變數,引用相同的全域結構或全域變數的所有函數需按照上一步驟儲存進Bf1中。需要為更新的資料添加附加程式頭和相應的節段。單一資料段可以儲存全域資料中的所有變化。圖5B示出了elf檔案的微分二進位檔案的示例格式。
d. 如果該變化清單關於巨集或內嵌函數,引用相同的巨集或內嵌函數的所有函數需按照第二步儲存進Bf1中。
3. 可以按照所述生成特徵1的相同步驟,生成隨後的特徵2、特徵3等和Bf2、Bf3等的微分二進位檔案。
本領域的技術人員應理解,在新函數佔用空間中,資料和調用函數的外部符號引用需要在創建的基礎二進位檔案中編址。因此,例如Bf1中的儲存段和所有連續的微分二進位檔案也應處理所述外部符號編址。在記憶體中加載重定位條目和修補時,也需要編址。為詳細說明使用ELF檔案示例,在基礎二進位檔案的.rel.txt和.rela.txt的elf部分識別所有代碼重定位。新函數佔用空間中的外部符號引用應該在儲存進微分二進位檔案前更新為正確的位址。同樣,如果該符號來自動態載入的共用目標,則修補位址為基礎二進位檔案的PLT(過程鏈接表)中的對應條目,且應在新函數佔用空間中正確更新。
關於全域變數和結構的資料段更新更為複雜,尤其因為與每個及局部更新相關的類型可能在結構中生成。儘管可以實現更新,為行文簡潔,此處不再說明elf格式的實現例子。
應理解的是,上面提供的例子為具體實現的示例,且旨在使本發明清晰。進一步地,值得注意的是,本發明並未在現有編譯器中引入任何變化,且提交至DFM的標誌僅為該DFM所使用。
參見圖5A,示出了本申請一個實施例的標準ELF檔案內容。
圖5B示出了本申請一個實施例的示例性的微分二進位檔案內容。
雖然已經用結構特徵和/或方法特有的語言描述了為現有
二進位檔案創建具有較少開銷和更短升級時間的可執行二進位檔案的實現方式,應理解的是,申請專利範圍並不局限於所述具體特徵和方法。相反,公開所述具體特徵和方法,用來作為實現為現有二進位檔案創建具有較少開銷和更短更新時間的可執行二進位檔案的例子。
在一個例子中,通過特徵變化表216,可提取所儲存的每個所述二進位檔案之間的差異,並按照某一elf檔案格式和系統命名法儲存到新的檔中。這就是微分二進位檔案,並將作為可執行微分二進位檔案220。
上述示例實施例可以具有某些優點。儘管不需要實現本發明公開的各方面,但這些優點可以包括:
1. 本發明以命令式以及某種程度的物件導向語言的目標二進位目標的形式,提供了一種動態二進位檔案特徵更新以及特徵隔離的機制(物件導向程式設計語言不具備這種機制)。
2. 本發明將有助於使用這些語言編寫和維護代碼,尤其對此類語言的遺留代碼無疑有利。
3. 本發明提供了可更新版本的附加特徵,以及較新版本的所述特徵的執行時間。
4. 本發明公開了一種可解析電腦程式代碼和理解特徵標籤的解析器。
5. 本發明提供了按需動態載入和卸載微分特徵的方法。
最後應理解的是,以上實施例僅用以說明,而非限制本申請的技術方案。儘管本申請的詳細描述參照上述優選實施例,應當理解的是,在不脫離本申請和申請專利範圍所覆蓋的範圍條
件下,本領域技術人員依然可以做出各種修改、改變或者等同替換。
Claims (28)
- 一種電腦系統,其特徵在於,具有非臨時性電腦可讀媒體,所述電腦可讀媒體上包括已編碼的電腦程式邏輯,當在所述電腦系統上執行時提供一種創建並管理一個或多個可執行微分二進位檔案的機制,使所述電腦系統執行以下操作:解析至少一個電腦程式原始程式碼,其中所述電腦程式原始程式碼具有至少一個動態特徵管理器(DFM)標籤;基於所述DFM標籤創建多個代碼集合,其中,所述代碼集合包括:具有基礎代碼的第一代碼集合,所述基礎代碼為無任何DFM標籤的所述至少一個電腦程式原始程式碼,以及具有所述基礎代碼和特徵的至少一個第二代碼集合,所述特徵為碼集;生成一個或多個特徵變化表,所述特徵變化表儲存相對於所述代碼集合中的特徵發生變化的特徵的資訊;清除電腦程式原始程式碼中的所述DFM標籤,以生成所述基礎代碼,所述DFM標籤用於表示所述特徵與所述至少一個電腦程式原始程式碼隔離;編譯所述代碼集合,以生成多個二進位檔案;通過所述特徵變化表,確定所述多個二進位檔案中任意兩個二進位檔案之間的差異;以及基於所述確定的差異,創建一個或多個微分二進位檔案,所述一個或多個可執行微分二進位檔案包括所述創建的一個或多個微分二進位檔案。
- 如申請專利範圍第1項所述的電腦系統,其中所述DFM標籤遵循DFM_<the feature name>_start和DFM_<the feature name>_end語法來隔離所述特徵。
- 如申請專利範圍第1項或第2項所述的電腦系統,其中在編寫所述電腦程式原始程式碼時添加所述DFM標籤。
- 如申請專利範圍第1項或第2項所述的電腦系統,其中在向所述電腦程式原始程式碼添加或更新新代碼時增加所述DFM標籤。
- 如申請專利範圍第1項或第2項所述的電腦系統,其中所述特徵是從一個包括函數、全域變數和結構、常見巨集、內嵌函數、靜態變數、以及上述的組合的群組中選出。
- 如申請專利範圍第1項或第2項所述的電腦系統,其中在所述解析至少一個具有至少一個DFM標籤的電腦程式原始程式碼時,所述電腦系統更用於執行以下操作:解析至少一個具有至少一個DFM標籤的電腦程式原始程式碼,以檢查所述DFM標籤的嵌套,並創建所述電腦程式原始程式碼的層級樹,其中,所述層級樹包括設置在最高層級的DFM無關標籤,以及作為所述層級樹中的下層節點的子標籤和/或兄弟標籤。
- 如申請專利範圍第1項所述的電腦系統,其中所述變化的特徵是從一個包括函數、全域變數和結構、常見巨集、內嵌函數、靜態變數、和/或上述的組合的群組中選出,所述變化的特徵是相對於所述代碼集合中的特徵發生變化或新引入或更新的特徵。
- 如申請專利範圍第1項或第2項所述的電腦系統,其中所述DFM標籤遵循規則,其中每個特徵相應的‘end’DFM標籤與‘start’DFM標籤相匹配。
- 如申請專利範圍第1項所述的電腦系統,所述電腦系統更 用於執行以下操作:將所述一個或多個微分二進位檔案載入到記憶體中,並將所述一個或多個微分二進位檔案映射到執行中的二進位檔案。
- 一種創建並管理至少一個可執行微分二進位檔案的方法,包括:解析至少一個具有至少一個動態特徵管理器(DFM)標籤的電腦程式原始程式碼;基於所述DFM標籤創建多個代碼集合,其中,所述代碼集合包括:具有基礎代碼的第一代碼集合,所述基礎代碼為無任何DFM標籤的所述至少一個電腦程式原始程式碼,以及具有所述基礎代碼和特徵的至少一個第二代碼集合,所述特徵為碼集;生成一個或多個特徵變化表,所述特徵變化表儲存相對於所述代碼集合中的特徵發生變化的特徵的資訊;清除所述電腦程式原始程式碼中的所述DFM標籤,以生成基礎代碼,其中所述DFM標籤用於表示所述特徵與所述至少一個電腦程式原始程式碼隔離;編譯所述代碼集合,以生成多個二進位檔案;通過所述特徵變化表,確定所述多個二進位檔案中任意兩個二進位檔案之間的差異;以及基於所述確定的差異,創建一個或多個微分二進位檔案,所述一個或多個可執行微分二進位檔案包括所述創建的一個或多個微分二進位檔案。
- 如申請專利範圍第10項所述的創建並管理至少一個可執行微分二進位檔案的方法,其中所述DFM標籤采遵循DFM_<the feature name>_start和DFM_<the feature name>_end語法來隔離所述特徵。
- 如申請專利範圍第10項或第11項所述的創建並管理至少一個可執行微分二進位檔案的方法,其中在編寫所述電腦程式原始程式碼時添加所述DFM標籤。
- 如申請專利範圍第10項或第11項所述的創建並管理至少一個可執行微分二進位檔案的方法,其中在向所述電腦程式原始程式碼添加或更新新代碼時增加所述DFM標籤。
- 如申請專利範圍第10項或第11項所述的創建並管理至少一個可執行微分二進位檔案的方法,其中所述特徵是從一個包括函數、全域變數和結構、常見巨集、內嵌函數、靜態變數、以及上述的組合的群組中選出。
- 如申請專利範圍第10項或第11項所述的創建並管理至少一個可執行微分二進位檔案的方法,其中,所述解析至少一個具有至少一個DFM標籤的電腦程式原始程式碼包括:解析至少一個具有至少一個DFM標籤的電腦程式原始程式碼,以檢查所述DFM標籤的嵌套,並創建所述電腦程式原始程式碼的層級樹,其中,所述層級樹包括設置在最高層級的DFM無關標籤,以及作為所述層級樹中的下層節點的子標籤和/或兄弟標籤。
- 如申請專利範圍第11項所述的創建並管理至少一個可執行微分二進位檔案的方法,其中所述變化的特徵是從一個包括函數、全域變數和結構、常見巨集、內嵌函數、靜態變數、和/或上述的組合的群組中選出,所述變化的特徵是相對於所述代碼集合 中的特徵發生變化或新引入或更新的特徵。
- 如申請專利範圍第10項或第11項所述的創建並管理至少一個可執行微分二進位檔案的方法,其中所述DFM標籤遵循規則,其中每個特徵相應的‘end’DFM標籤與‘start’DFM標籤相匹配。
- 如申請專利範圍第10項所述的創建並管理至少一個可執行微分二進位檔案的方法,其中所述方法更包括:將所述一個或多個微分二進位檔案載入到記憶體中,並將所述一個或多個微分二進位檔案映射到執行中的二進位檔案。
- 一種創建並管理至少一個可執行微分二進位檔案的電腦系統,包括:處理器和耦合至所述處理器的記憶體,該處理器用於執行多個模組和所述記憶體中的多個指令,其中,所述多個模組包括:分離器模組,用於:解析至少一個具有至少一個動態特徵管理器(DFM)標籤的電腦程式原始程式碼;基於所述DFM標籤創建多個代碼集合,其中,所述代碼集合包括:具有基礎代碼的第一代碼集合,所述基礎代碼為無任何DFM標籤的所述至少一個電腦程式原始程式碼,以及具有所述基礎代碼和特徵的至少一個第二代碼集合,所述特徵為碼集;生成多個特徵變化表,所述程式變化表儲存相對於所述第一代碼集合和所述第二代碼集合中的特徵發生變化的特徵的資訊;清除所述電腦程式原始程式碼中的所述DFM標籤,以生成基 礎代碼,所述DFM標籤用於表示將所述特徵與所述至少一個電腦程式原始程式碼隔離;以及編譯器打包器模組,用於編譯所述第一代碼集合和所述第二代碼集合,以生成多個二進位檔案;其中所述多個指令用於:通過所述特徵變化表,確定所述多個二進位檔案中任意兩個二進位檔案之間的差異;基於所述確定的差異,創建一個或多個微分二進位檔案,所述一個或多個可執行微分二進位檔案包括所述創建的一個或多個微分二進位檔案。
- 如申請專利範圍第19項所述的創建並管理至少一個可執行微分二進位檔案的電腦系統,更包括:載入器模組,用於管理所述一個或多個微分二進位檔案,其中,通過載入所述一個或多個微分二進位檔案至所述記憶體,以及將所述一個或多個微分二進位檔案映射到執行中的二進位檔案,管理所述所述一個或多個微分二進位檔案。
- 如申請專利範圍第19項或第20項所述的創建並管理至少一個可執行微分二進位檔案的電腦系統,更包括:載入器模組,用於管理所述一個或多個微分二進位檔案,其中,通過從所述記憶體中卸載所述一個或多個微分二進位檔案,管理所述一個或多個微分二進位檔案。
- 如申請專利範圍第19項所述的創建並管理至少一個可執行微分二進位檔案的電腦系統,其中所述DFM標籤遵循DFM_<the feature name>_start和DFM_<the feature name>_end語法來隔離所述特徵。
- 如申請專利範圍第19項或第22項所述的創建並管理至 少一個可執行微分二進位檔案的電腦系統,其中在編寫所述電腦程式原始程式碼時增加所述DFM標籤。
- 如申請專利範圍第19項或第22項所述的電腦系統,其中在向所述電腦程式原始程式碼添加或更新新代碼時增加所述DFM標籤。
- 如申請專利範圍第19項或第22項所述的創建並管理至少一個可執行微分二進位檔案的電腦系統,其中所述特徵是從一個包括函數、全域變數和結構、常見巨集、內嵌函數、靜態變數、以及上述的組合的群組中選出。
- 如申請專利範圍第19項或第22項所述的創建並管理至少一個可執行微分二進位檔案的電腦系統,其中在所述解析至少一個具有至少一個DFM標籤的電腦程式原始程式碼時,所述分離器模組更用於解析至少一個具有至少一個DFM標籤的電腦程式原始程式碼,以檢查所述DFM標籤的嵌套,並創建所述電腦程式原始程式碼的層級樹,其中,所述層級樹包括設置在最高層級的DFM無關標籤,以及作為所述層級樹中的下層節點的子標籤和/或兄弟標籤。
- 如申請專利範圍第19項所述的創建並管理至少一個可執行微分二進位檔案的電腦系統,其中所述變化的特徵是從一個包括函數、全域變數和結構、常見巨集、內嵌函數、靜態變數、和/或上述的組合的群組中選出,所述變化的特徵是相對於所述代碼集合中的特徵發生變化或新引入或更新的特徵。
- 如申請專利範圍第19項或第22項所述的創建並管理至少一個可執行微分二進位檔案的電腦系統,其中所述DFM標籤遵 循規則,其中每個特徵相應的‘end’DFM標籤與‘start’DFM標籤相匹配。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
IN2531CH2014 | 2014-05-21 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201545067A true TW201545067A (zh) | 2015-12-01 |
TWI566180B TWI566180B (zh) | 2017-01-11 |
Family
ID=54553356
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW104115142A TWI566180B (zh) | 2014-05-21 | 2015-05-13 | 一種動態創建可附加和可拆除二進位檔案的系統和方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20150339119A1 (zh) |
EP (1) | EP2987079A4 (zh) |
TW (1) | TWI566180B (zh) |
WO (1) | WO2015176492A1 (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9952857B2 (en) * | 2015-10-05 | 2018-04-24 | International Business Machines Corporation | Cross-validation based code feature tagging |
US9904543B2 (en) * | 2015-10-26 | 2018-02-27 | Hewlett-Packard Development Company, L.P. | Setting a build indicator to enable or disable a feature |
US11593342B2 (en) | 2016-02-01 | 2023-02-28 | Smartshift Technologies, Inc. | Systems and methods for database orientation transformation |
US10452428B2 (en) * | 2016-03-14 | 2019-10-22 | International Business Machines Corporation | Application execution with optimized code for use profiles |
US10585655B2 (en) | 2016-05-25 | 2020-03-10 | Smartshift Technologies, Inc. | Systems and methods for automated retrofitting of customized code objects |
US10089103B2 (en) | 2016-08-03 | 2018-10-02 | Smartshift Technologies, Inc. | Systems and methods for transformation of reporting schema |
CA2999581A1 (en) | 2017-03-28 | 2018-09-28 | Walmart Apollo, Llc | Systems and methods for computer assisted database change documentation |
US10528479B2 (en) * | 2017-06-02 | 2020-01-07 | Huawei Technologies Co., Ltd. | Global variable migration via virtual memory overlay technique for multi-version asynchronous dynamic software update |
US10558456B2 (en) | 2017-06-27 | 2020-02-11 | Red Hat, Inc. | Constructing build environments for software |
US10664262B2 (en) * | 2017-08-29 | 2020-05-26 | Crowdstrike, Inc. | Binary suppression and modification for software upgrades |
US10698674B2 (en) | 2018-02-06 | 2020-06-30 | Smartshift Technologies, Inc. | Systems and methods for entry point-based code analysis and transformation |
US10740075B2 (en) * | 2018-02-06 | 2020-08-11 | Smartshift Technologies, Inc. | Systems and methods for code clustering analysis and transformation |
US10528343B2 (en) | 2018-02-06 | 2020-01-07 | Smartshift Technologies, Inc. | Systems and methods for code analysis heat map interfaces |
WO2019199950A1 (en) * | 2018-04-11 | 2019-10-17 | Walmart Apollo, Llc | Software artifact management systems and methods |
US10769055B2 (en) | 2018-08-24 | 2020-09-08 | Red Hat Israel, Ltd. | Dynamically revising an in-process build |
CN115756552B (zh) * | 2023-01-06 | 2023-04-28 | 山东矩阵软件工程股份有限公司 | 一种应用系统功能自配置方法、系统及存储介质 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5978586A (en) * | 1997-11-26 | 1999-11-02 | Unisys Corp. | Method for tracking changes in source locations in a compiler |
US7519953B2 (en) * | 2003-09-30 | 2009-04-14 | Microsoft Corporation | Method and system for automatically testing a software build |
US7512936B2 (en) * | 2004-12-17 | 2009-03-31 | Sap Aktiengesellschaft | Code diversification |
US7945904B2 (en) * | 2005-08-22 | 2011-05-17 | Microsoft Corporation | Embedding expression in XML literals |
US7747633B2 (en) * | 2007-07-23 | 2010-06-29 | Microsoft Corporation | Incremental parsing of hierarchical files |
US8468516B1 (en) * | 2008-12-19 | 2013-06-18 | Juniper Networks, Inc. | Creating hot patches for embedded systems |
US8701104B2 (en) * | 2009-12-14 | 2014-04-15 | Opera Software Asa | System and method for user agent code patch management |
US8656377B2 (en) * | 2010-06-10 | 2014-02-18 | Microsoft Corporation | Tracking variable information in optimized code |
CN101963914B (zh) * | 2010-11-12 | 2013-02-27 | 南京大学 | 一种基于字节码文件重构的Java类在线更新方法 |
US9342285B2 (en) * | 2012-11-30 | 2016-05-17 | Huawei Technologies Co., Ltd. | Method and apparatus for detecting code change |
CN103279377A (zh) * | 2013-05-09 | 2013-09-04 | 北京百度网讯科技有限公司 | 代码差异度比较方法及装置 |
CN103559449B (zh) * | 2013-11-15 | 2016-09-21 | 华为技术有限公司 | 一种代码改动的检测方法及装置 |
-
2014
- 2014-10-29 WO PCT/CN2014/089761 patent/WO2015176492A1/en active Application Filing
- 2014-10-29 EP EP14814726.7A patent/EP2987079A4/en not_active Withdrawn
-
2015
- 2015-05-13 TW TW104115142A patent/TWI566180B/zh active
- 2015-05-26 US US14/721,541 patent/US20150339119A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
EP2987079A4 (en) | 2016-04-06 |
EP2987079A1 (en) | 2016-02-24 |
US20150339119A1 (en) | 2015-11-26 |
WO2015176492A1 (en) | 2015-11-26 |
TWI566180B (zh) | 2017-01-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI566180B (zh) | 一種動態創建可附加和可拆除二進位檔案的系統和方法 | |
US8954939B2 (en) | Extending a development environment | |
US8984502B2 (en) | Systems and methods for composing or decomposing a composite image for firmware update images | |
CN102402427B (zh) | 一种Java应用程序的更新方法及装置 | |
US8255363B2 (en) | Methods, systems, and computer program products for provisioning software using dynamic tags to identify and process files | |
Dietrich et al. | Broken promises: An empirical study into evolution problems in java programs caused by library upgrades | |
US8793654B2 (en) | Method and a system for generating a software product | |
CN108139891B (zh) | 用于生成建议以纠正未定义标记错误的方法和系统 | |
US20060288054A1 (en) | Methods, systems, and computer program products for provisioning software via a file repository in which a version string is used to identify branches of a tree structure | |
WO2019005228A1 (en) | AUTOMATED ADAPTATION OF A SOURCE CODE IN ORDER TO INJECT FUNCTIONS BETWEEN VERSIONS OF A PLATFORM | |
US10248409B1 (en) | Limiting the effects of source code patches on corresponding native-code patches | |
EP3698241A1 (en) | Using semantic annotations to control compatibility behaviors | |
US11561790B2 (en) | Orchestrating multi-level tools for the deployment of a network product | |
CN102364433B (zh) | 在ARM处理器上实现Wine构建工具移植的方法 | |
US11379465B2 (en) | Autonomous self-healing application data validation using database configurations | |
CN103645888A (zh) | 一种自动构建操作系统的系统及方法 | |
CN111435312A (zh) | 应用程序管理方法、装置及电子设备 | |
CN104380250B (zh) | 一种动态创建可附加和可拆除二进制文件的系统和方法 | |
US9405739B1 (en) | Source code format for IDE code development with embedded objects | |
Ketkar et al. | A Lightweight Polyglot Code Transformation Language | |
Berglund | Gradle Beyond the Basics: Customizing Next-Generation Builds | |
Lebanon et al. | A Few More Things About Programming | |
US8453108B1 (en) | Static, configurable kernel interface | |
Martin | Creating an Operator with Kubebuilder | |
Michel | Redesign and enhancement of the Katja system |