專利名稱::程序可執(zhí)行映像加密的制作方法
技術領域:
:本發(fā)明涉及一種用于對可執(zhí)行映像進行加密和執(zhí)行的方法和系統(tǒng)。更具體地,本發(fā)明涉及一種用于對可執(zhí)行映像內容進行加密和加載的方法和系統(tǒng)。
背景技術:
:軟件開發(fā)需要在時間和資金雙方面的相當大的投入,并且諸如未授權的拷貝或共享之類的未授權的軟件使用最終導致了軟件開發(fā)者的收入損失。未授權軟件的示例可以包括由第三方在沒有獲得必需的授權的情況下制造的拷貝,或者通過對等網絡對未授權拷貝的共享。這種軟件還可以包括也需要防止被拷貝的可執(zhí)行的圖像或聲音文件。為了實現這種保護,公知的是使用加密措施來防止軟件的未授權拷貝被執(zhí)行。這種措施典型地包括對軟件的一個或更多個可執(zhí)行部分進行加密,這可以防止完整地運行該軟件,或者禁用該軟件的一個或更多個獨立的功能特征,以使得該軟件非最優(yōu)地運行。作為示例,公知的是在運行之前對可執(zhí)行程序內容進行加密,以保護其中所包含的算法的實現。這種可執(zhí)行內容的示例可以包括在程序文件中包含的編解碼器,例如典型地用于壓縮圖像和聲音文件的JPEG、MP3和WMA格式。編解碼器可以將數據變換為編碼的形式(通常用于傳輸、存儲或加密)以及對該數據進行提取或解碼以便以更適于特定操作的格式來觀看或處理。編解碼器通常用于視頻會議和流媒體解決方案中。作為示例,US-A-2004/0125954公開了一種數據加密/解密系統(tǒng),該系統(tǒng)以加密形式保存軟件程序所需要的數據單元。軟件生產商可以選擇并加密被稱為可執(zhí)行程序中的關鍵數據單元的一個或更多個程序數據節(jié)區(qū)和/或文本節(jié)區(qū)。為了執(zhí)行該軟件,用戶必須獲得許可密鑰,以對該程序所使用的關鍵數據單元進行解密。通過提供不同的許可密鑰,可以提供不同的許可選項,該許可選項允許軟件生產商或供應商根據所提供的許可密鑰啟用的功能來實行對程序的功能等級的控制。然而,由于在執(zhí)行程序映像之前對該可執(zhí)行映像進行解密消耗了寶貴的處理器周期,從而導致了反應較不靈敏的系統(tǒng),因此US-A-2004/0125954中所提供的解決方案導致了較低的處理速度。此外,在US-A-2004/0125954中所提到的關鍵數據節(jié)區(qū)應用于程序代碼自身(例如程序數據節(jié)區(qū)和文本節(jié)區(qū)),而不應用于包含諸如修正表之類的必要信息的程序頭,這使得程序加載器能夠將程序重定位到期望的存儲區(qū)中。公知的是將這種加密技術用于通稱為嵌入式系統(tǒng)的專用計算機系統(tǒng)中。嵌入式系統(tǒng)可以包括被布置用于執(zhí)行預定任務的微處理器或微控制器。在諸如用于消費電子和汽車的那些嵌入式系統(tǒng)之類的嵌入式系統(tǒng)中,典型地需要其組件較小和較便宜。具有片上存儲器管理單元(MMU)的微處理器傾向于較為復雜和昂貴,因此典型地不用于不需要這種復雜性的嵌入式系統(tǒng)。在該處理器內,MMU負責保護系統(tǒng)資源使之免于不需要的訪問,并且還提供了處理虛擬存儲器的能力。為了減少嵌入式系統(tǒng)中的這種組件成本,公知的是使用所謂的"無MMU(MMU-less)"處理器,其示例是PhilipsTriMedia媒體處理器。然而,在將可執(zhí)行文件加載到無MMU處理器時,必須在可以執(zhí)行該可執(zhí)行文件之前,將該可執(zhí)行文件重定位到期望的存儲單元。可以通過使用重定位修正表將映像重定位至存儲器中的新地址,來實現對可執(zhí)行映像的重定位。修正表(也通稱為補丁表)允許修改可執(zhí)行映像,以使得該映像可以在期望的存儲單元處運行。該過程典型地包括以下獨立步驟對修正數據進行加密,對加密的修正數據進行重定位,以及對修正數據進行解密,以產生最終修正的可執(zhí)行映像。然而,該修正或修補過程可能消耗寶貴的處理器周期,從而導致較慢的處理器操作。作為分離的和不同的操作,對可執(zhí)行代碼的解密和重定位可以驗證相對耗時的過程。因此,通過減少操作次數來以較少的時間完成這些操作,可用于產生較快的加載和反應較靈敏的系統(tǒng)。
發(fā)明內容本發(fā)明設法提供一種用于快速且有效地對可執(zhí)行映像進行加密和執(zhí)行的方法和系統(tǒng),其與已知的這種方法和系統(tǒng)相比具有優(yōu)點。根據本發(fā)明的一方面,提供了一種對可執(zhí)行映像進行加密的方法,該方法包括以下步驟使用源文件中的命令來將可執(zhí)行映像的節(jié)區(qū)標記為要被加密,并編譯所述可執(zhí)行映像以生成目標文件,使用鏈接器來鏈接所述可執(zhí)行映像中的一個或更多個,以產生最終的可執(zhí)行映像,以及修正處理,該方法進一步包括以下步驟將所述鏈接的可執(zhí)行映像傳遞至鏈接器之后的加密引擎,以對重定位修正補丁表以及被標記為加密的可執(zhí)行映像的節(jié)區(qū)進行加密,以使得可以在加載時間對該可執(zhí)行映像進行解密、重定位和執(zhí)行。具體地,本發(fā)明設法以克服一個或更多個上述缺點的方式來防止對可執(zhí)行文件的非法使用,具體地是防止對可執(zhí)行文件的非法拷貝。有利地,這允許僅將需要保護的代碼標記為加密,而可以不對較不重要的代碼進行加密。通過僅選擇需要保護的代碼,可以更快地加載可執(zhí)行內容,同時也提供了節(jié)約成本且實現簡單的反應更靈敏的系統(tǒng)。優(yōu)選地,對修正表進行解密的步驟包括組合解密和修正處理的步驟。有利地,這種步驟組合提供了對存儲空間的有效使用,同時還提供了更快響應的系統(tǒng)。優(yōu)選地,將節(jié)區(qū)標記為要被加密的步驟包括,使用編譯器或鏈接器命令,并在源代碼級(sourcelevel)階段命名所述節(jié)區(qū),以使得鏈接器能夠在鏈接或鏈接之后的階段對該節(jié)區(qū)進行加密。此外,通過使用節(jié)區(qū)重命名機制,可以將目標代碼的節(jié)區(qū)標記為指示該節(jié)區(qū)是否要被加密。有利地,這還用于提供對存儲空間的有效使用,同時還提供了更快響應的系統(tǒng)。根據本發(fā)明的另一方面,提供了一種用于對可執(zhí)行映像進行加密的系統(tǒng),該系統(tǒng)包括編譯器,被布置用于將可執(zhí)行映像的節(jié)區(qū)標記為要被加密,并對所述可執(zhí)行映像進行編譯,以生成目標文件,鏈接器,被布置用于鏈接所述目標文件中的一個或更多個,以產生最終的可執(zhí)行映像,還被布置用于通過將所述鏈接的可執(zhí)行映像傳遞至鏈接器之后的加密引擎來處理修正表,其中鏈接器之后的加密引擎被布置用于對重定位修正補丁表和被標記為加密的可執(zhí)行映像的節(jié)區(qū)進行加密,以便在加載時間對該可執(zhí)行映像進行解密、重定位和執(zhí)行。具體地,本發(fā)明設法以克服一個或更多個上述缺點的方式來防止對可執(zhí)行文件的非法使用,具體地是防止對可執(zhí)行文件的非法拷貝。有利地,這允許僅將需要保護的代碼標記為加密,而可以不對較不重要的代碼進行加密。通過僅選擇需要保護的代碼,可以更快地加載系統(tǒng),同時也提供了節(jié)約成本且實現簡單的反應更靈敏的系統(tǒng)。優(yōu)選地,解密裝置被布置用于在處理修正表的同時對該修正表進行解密。有利地,這提供了對存儲空間的有效使用,同時也提供了更快響應的系統(tǒng)。優(yōu)選地,編譯器或鏈接器命令(directive)被布置用于將節(jié)區(qū)標記為要被加密,并且還被布置用于在源代碼級階段命名所述節(jié)區(qū),以使得該鏈接器能夠在鏈接階段或鏈接之后的階段對所標記的節(jié)區(qū)進行加密。此外,通過使用節(jié)區(qū)重命名機制,可以將目標代碼節(jié)區(qū)標記為指示該節(jié)區(qū)是否要被加密。有利地,這允許僅將需要保護的代碼標記為加密,而可以不對較不重要的代碼進行加密。通過僅選擇需要保護的代碼,可以更快地加載系統(tǒng),同時也提供了節(jié)約成本且實現簡單的反應更靈敏的系統(tǒng)。在下文中僅以示例方式參照附圖進一步描述本發(fā)明,在附圖中圖1是包含可由編譯器進行編譯的源代碼部分、文本和數據部分的單個源文件的框圖2是由鏈接器鏈接到一起以產生最終的可執(zhí)行映像的目標文件的框圖;圖3是最終的可執(zhí)行映像的框圖,其中頭部包含可執(zhí)行的格式信息;圖4是被傳遞至鏈接器之后的加密引擎的可執(zhí)行映像的框圖;圖5以方框形式示出了在加載時間對可執(zhí)行映像的解密、重定位和執(zhí)行;以及圖6是根據本發(fā)明的組合的加載器和解密引擎的框圖。具體實施例方式程序的可執(zhí)行映像包含節(jié)區(qū)信息,并且可執(zhí)行映像傳統(tǒng)上具有多個組件或節(jié)區(qū),例如形成可執(zhí)行程序代碼的文本組件、包括針對已初始化的或未初始化的程序靜態(tài)數據的空間的數據組件、以及包括由加載器分配的區(qū)域的塊存儲段(BSS)組件,該區(qū)域包含被初始化為零的靜態(tài)數據。BSS是存儲器映射組件,包含在執(zhí)行時間被分配為二進制映像而分配的數據。系統(tǒng)中的組件越多,該系統(tǒng)的粒度越大并且越靈活。粒度表示系統(tǒng)包含分離組件的程度。例如,PhilipsTriMedia編譯器允許在編譯時間之后以及在將所生成的目標文件鏈接到最終的可執(zhí)行映像中之前,對所生成的目標文件中的節(jié)區(qū)或組件進行重命名。諸如GNUGCCC編譯器之類的編譯器允許在編譯時間使用專用的C擴展名、或者在鏈接時間使用鏈接器文件來對節(jié)區(qū)進行標注。利用GNUGCC編譯器,可以通過在編譯時間的專用命令向節(jié)區(qū)提供除了標準文本、數據和隨TriMediaC編譯器一起使用的BSS標題之外的標題,例如利用指定節(jié)區(qū)名稱將指定了遵從編譯器命令的代碼的內聯(lián)匯編程序命令節(jié)區(qū)放置在目標代碼中。這是使用由鏈接器施加到目標文件的專用鏈接器重命名標記來執(zhí)行的,該目標文件是根據來自GNUGCC編譯器的已編譯的C源代碼而生成的。利用節(jié)區(qū)重命名機制,可以通過專用命名慣例來標記目標代碼的節(jié)區(qū),以指示該節(jié)區(qū)是否將被加密。因此,針對較大的應用程序,僅需要將重要代碼(例如受專利或著作權保護的代碼)或者包含機密信息的代碼標記為加密,而可以不對較不重要的代碼(例如C庫)進行加密。由編譯器產生的目標代碼通常被放置在標記的節(jié)區(qū)中。如下面更詳細地討論地,針對CUNIX或Linux系統(tǒng),這些節(jié)區(qū)傳統(tǒng)地被加上文本、數據和bss的標題。然而,一旦目標代碼被命名,則無法對其進行重命名以將其標記為加密??偠灾?,本發(fā)明提供了一種用于對可執(zhí)行映像進行加密和執(zhí)行的方法和系統(tǒng),其中可使用諸如修正表之類的設備來將程序的可執(zhí)行映像重定位到用于處理的存儲單元。修正表包含針對包含相對地址的地址的指針列表。當文件被加載到存儲器中時,編譯器訪問具有指針的每個地址,并將程序的起始指令的絕對地址與程序中的相對地址相加。這允許加載器對可執(zhí)行映像進行修補或重定位,以便修補可執(zhí)行映像中對地址的引用,以與重定位的可執(zhí)行映像的期望地址相匹配。使用加密機制來在鏈接時間或鏈接時間之后對部分可執(zhí)行程序進行加密。其中鏈接時間是將從不同的源模塊編譯的文件鏈接到單個程序中的時間。鏈接器所作出的判決受到所編譯的代碼的約束,并最終受限于源代碼中包含的信息。然后對修正表進行加密,以防止該映像在沒有首先對修正表進行解密的情況下被重定位。將所要保護的可執(zhí)行代碼的節(jié)區(qū)放入加密的專用文本(和數據)節(jié)區(qū)中。不對所有其他代碼和數據進行加密。使用解密機制來在映像可以運行之前的加載時間處對加密的修正表和專門加密的文本(和數據)節(jié)區(qū)進行解密。在操作中,在編譯時間,編譯器將程序源代碼編譯到目標代碼中。使用源代碼中的專用的編譯器派生(derivative)或命令,或者通過在編譯源代碼之后修改目標代碼,來標記需要被保護的程序源代碼的節(jié)區(qū)。在編譯時間作出的判決受到被編碼在源文件中的信息的數量和種類的約束。編譯器命令是被添加到程序中的專用注釋,其允許編譯器執(zhí)行特定的操作,并且可以包括開啟或關閉編譯器特征的切換命令、指定影響編譯的參數的參數命令、以及控制部分源文本的有條件的編譯的條件命令。編譯器命令是不可執(zhí)行的聲明,其不能被直接翻譯為可執(zhí)行代碼。修正表可以包含需要被修補或重定位的數據在可執(zhí)行映像中的位置。需要被修補的數據是l.指示程序中的位置的程序指令,該位置需要被修改以與新的重定位地址相匹配。例如,跳轉地址、指示指令中的程序地址的加載/存儲指令。需要修改指令代碼中的操作數,例如,jmp—mainloadsome—table->reg0。2.諸如指針之類的、指示程序中的特定位置的數據。這些指針需要被修改以與新的重定位地址相匹配。例如,針對數據結構的指針、或者需要被改變以與可執(zhí)行映像的新的重定位地址相匹配的函數。假設可執(zhí)行映像已被編譯為起始于存儲器中的位置0處。將該可執(zhí)行映像重定位到新的固定的存儲單元N處。因此,必須將偏移量N與該可執(zhí)行映像中的每個地址基準相加,以將該可執(zhí)行映像軍定位到起始地址N處。首先,將解密的程序拷貝到起始于地址N處的新的存儲器地址空間。然后對修正表進行解密,并逐個條目地對該修正表進行處理。每個條目都包含需要偏移N的可執(zhí)行映像中的指令或指令操作數的位置L以及數據(例如指針)。然后,如下地變換在地址L+N處的程序代碼或數據。將位置L+N處的內容讀入變量X,以便通過重定位偏移量N來改變X,也就是說,X=X+N,并且將X寫回到位置L+N中。針對修正表中的所有條目重復上述。然后處理修正表,一旦完成了修正,由于不再被需要,因此將該修正表返回至空閑的存儲分配器。例如,PhilipsTriMediaC編譯器允許重命名編譯的目標代碼,同時GNUGCCC編譯器的使用允許用于對源代碼自身中的節(jié)區(qū)進行重命名的命令。例如,使用已知的命名慣例,給節(jié)區(qū)加上諸如"一encrypt—"之類的字符串前綴可以允許最終的鏈接階段確定鏈接器所產生的最終可執(zhí)行映像中的哪些節(jié)區(qū)需要加密。本領域的技術人員將理解,可以使用任意適當的編譯器來實現本發(fā)明,并且本發(fā)明可以使用任意適當的過程來將源代碼編譯為目標代碼。圖1示出了包含源代碼部分A、B、C和文本或數據部分D、E的單個源文件,該源文件的各個部分是由C編譯器CC編譯的。通過源代碼中的編譯器命令來將源代碼B和數據D標記為要被加密。編譯器所生成的作為結果的目標代碼包含被標記為要被加密的文本和數據節(jié)區(qū)B,和D,、以及正常的文本和數據節(jié)區(qū)A'、C,和E'。然后通過鏈接器將一個或更多個目標文件鏈接到一起,以產生如圖2所示的最終可執(zhí)行映像。該可執(zhí)行映像包含文本、數據和BSS段,如上文所討論的,通過編譯器命令將其中一些節(jié)區(qū)標記為加密。該標記節(jié)區(qū)的方法取決于實施方式,并且基于編譯器和/或鏈接器的特性。圖3示出了最終可執(zhí)行映像的示例,其中頭部301包含可執(zhí)行格式信息,例如工業(yè)標準ELF(可執(zhí)行鏈接格式)、COFF(常用目標文件格式)或"a.out"可執(zhí)行映像格式。重定位修正補丁表302包含用于允許加載器重定位和修補可執(zhí)行映像的信息,以使得可執(zhí)行映像中對地址的引用被修補成指向新的重定位的可執(zhí)行地址。每個ELF文件可以由一個ELF頭部以及隨后的零個或更多個段和零個或更多個節(jié)區(qū)組成。段包含對于文件的運行時間執(zhí)行而言必需的信息。然而,由于COFF格式允許目標文件中的多個命名的節(jié)區(qū),因此COFF格式是優(yōu)選的。文本部分303包含正常的可執(zhí)行程序代碼,同時將要被加密的文本節(jié)區(qū)304包含將要通過加密保護的可執(zhí)行代碼。數據節(jié)區(qū)305包含正常的程序數據,同時將要被加密的數據節(jié)區(qū)306包含將要通過加密保護的程序數據。BSS節(jié)區(qū)307包含將在程序啟動時被歸零的數據。如圖4所示,當形成了可執(zhí)行映像401時,將該可執(zhí)行映像401傳遞至鏈接器之后的加密引擎。然后加密引擎402讀取該可執(zhí)行映像,并對重定位修正補丁表以及任何被標記為加密的文本或數據節(jié)區(qū)進行加密。當圖像應被加載時,在加載時間,如圖5所示地對可執(zhí)行映像進行解密、修補/重定位、以及執(zhí)行。由解密引擎G對可執(zhí)行映像的加密節(jié)區(qū)進行解密,以產生可執(zhí)行映像,加載器J可重定位該可執(zhí)行映像,以產生最終的運行時間映像L。本領域的技術人員將理解,可以通過任意適當的裝置來實現上述的加密和解密步驟。然而,為了實現本發(fā)明,加密裝置必需能夠理解最終輸出的可執(zhí)行目標格式,以使得加密裝置能夠處理該可執(zhí)行目標代碼,并確定需要加密的節(jié)區(qū)。實際上,可以組合鏈接和產生最終可執(zhí)行映像的步驟,從而消除對用于理解執(zhí)行鏈接之后的處理和加密的鏈接之后的可執(zhí)行目標代碼的裝置的需要。在如圖6所示的本發(fā)明的另一實施例中,可以將加載器優(yōu)化為包括解密引擎,該解密引擎使得加載器能夠以一個組合的操作來讀取、解密和處理解密的修正補丁表,從而消除對在將解密的修正傳遞至加載器之前存儲該解密的修正的需要。由第一解密引擎601來對可執(zhí)行映像的數據和文本部分進行解密。加載器內部的第二解密引擎602僅對修正補丁表進行解密。如圖6所示,將對修正表的解密與一個不同步驟中的修正處理相組合。對修正表的解密將采用加密的修正表信息,并將該信息解密到解密的修正表條目中。一旦可以從解密引擎獲取解密的修正表條目,則可以使用該修正表條目來修補可執(zhí)行代碼。與必須將解密的修正條目存儲回修正表中、然后將該數據傳遞至讀取回該數據的修正處理的分離的解密和修正處理階段相比,這是一種節(jié)省。因此,對于每個修正條目,可能省去將解密的修正數據寫回到存儲器以及從存儲器讀取回解密的修正數據。由于存儲器的讀/寫過程與處理器速度相比較慢,因此如果修正表較大,則這將導致相當大的節(jié)省,因此節(jié)省了大量的存儲器帶寬并防止數據高速緩存停滯。此外,如果將解密引擎與修正處理代碼足夠緊密地結合,則可以使得解密和修正處理適合處理器指令高速緩存,并且由于保持指令高速緩存停滯的次數較少,因此減少了處理時間。利用這種方式存儲器帶寬節(jié)省和減少處理時間,使得在利用諸如TriMedia之類的具有較小指令和數據高速緩存的處理器時加速操作。因此,可以看到,本發(fā)明提供了一種節(jié)約成本且實現簡單的較快加載、反應較靈敏的系統(tǒng),該系統(tǒng)防止對可執(zhí)行文件的非法使用。權利要求1.一種用于對可執(zhí)行映像進行加密的方法,包括以下步驟使用源文件中的命令來把可執(zhí)行映像的節(jié)區(qū)標記為要被加密并對所述可執(zhí)行映像進行編譯,以生成目標文件;使用鏈接器來鏈接所述可執(zhí)行映像中的一個或更多個,以產生最終的可執(zhí)行映像;修正處理,進一步包括以下步驟將所述鏈接的可執(zhí)行映像傳遞至鏈接器之后的加密引擎,以對重定位修正補丁表以及為加密而標記的可執(zhí)行映像的節(jié)區(qū)進行加密,從而在加載時間對所述可執(zhí)行映像進行解密、重定位和執(zhí)行。2.根據權利要求1所述的方法,其中,將所述對修正表進行解密的步驟與所述修正處理步驟進行組合。3.根據權利要求1所述的方法,其中,將節(jié)區(qū)標記為要被加密的步驟包括使用編譯器或鏈接器命令,并在源代碼級階段命名所述節(jié)區(qū),以使得所述鏈接器能夠在鏈接階段或鏈接之后的階段對所述標記節(jié)區(qū)進行加密。4.根據權利要求1所述的方法,其中,標記節(jié)區(qū)的步驟包括標記程序可執(zhí)行映像的頭部節(jié)區(qū)的步驟。5.根據權利要求4所述的方法,其中,所述頭部節(jié)區(qū)包含針對程序可執(zhí)行映像的修正表。6.根據權利要求1所述的方法,其中,對所述重定位修正表進行加密,以防止在未對所述修正表進行解密的情況下重定位所述可執(zhí)行映像。7.根據權利要求1所述的方法,其中,加密引擎使用包含在源文件中的命令來對所述程序可執(zhí)行映像的標記節(jié)區(qū)進行加密。8.根據權利要求l-7所述的方法,其中,所述標記源代碼的節(jié)區(qū)的步驟包括,對可執(zhí)行代碼節(jié)區(qū)、數據節(jié)區(qū)和/或塊存儲段節(jié)區(qū)中的一個或更多個進行標記。9.根據權利要求1-8所述的方法,其中,所述標記步驟是使用包含在源代碼中的命令或者通過在鏈接階段使用鏈接器標記來執(zhí)行的。10.根據權利要求1所述的方法,其中,通過解密引擎來對可執(zhí)行映像的加密節(jié)區(qū)進行解密來產生可執(zhí)行映像,以形成運行時間映像。11.根據權利要求1所述的方法,其中,所述解密引擎使用解密機制來在加載時間對加密的修正表和可執(zhí)行代碼節(jié)區(qū)進行解密。12.根據權利要求10和11所述的方法,其中,加載器產生可執(zhí)行映像,以在運行時間處產生最終映像。13.—種計算機可執(zhí)行程序,包括用于使微處理器執(zhí)行根據權利要求1-12中任一項所述的方法的指令。14.根據權利要求13所述的計算機可執(zhí)行程序,存儲在計算機可讀介質上。15.—種用于對可執(zhí)行映像進行加密的系統(tǒng),包括編譯器,被布置用于將可執(zhí)行映像的節(jié)區(qū)標記要被加密并對所述可執(zhí)行映像進行編譯,以生成目標文件;鏈接器,被布置用于鏈接所述目標文件中的一個或更多個,以產生最終的可執(zhí)行映像,還被布置用于通過將所述鏈接的可執(zhí)行映像傳遞至鏈接器之后的加密引擎來處理修正表,其中,所述鏈接器之后的加密引擎被布置用于對重定位修正補丁表和為加密而標記的可執(zhí)行映像的節(jié)區(qū)進行加密,以便在加載時間對所述可執(zhí)行映像進行解密、重定位和執(zhí)行。16.根據權利要求15所述的系統(tǒng),其中,所述解密裝置被布置用于,在處理修正表的同時對所述修正表進行解密。17.根據權利要求15所述的系統(tǒng),其中,編譯器或鏈接器命令被布置用于將節(jié)區(qū)標記要被加密,并且還被布置用于在源代碼級階段命名所述節(jié)區(qū),以使得鏈接器能夠在鏈接階段或鏈接之后的階段對所述標記節(jié)區(qū)進行加密。18.根據權利要求15所述的系統(tǒng),其中,所述標記節(jié)區(qū)包括程序可執(zhí)行映像中的標記的頭部節(jié)區(qū)。19.根據權利要求18所述的系統(tǒng),其中,所述頭部節(jié)區(qū)包含用于程序可執(zhí)行映像的修正表。20.根據權利要求15所述的系統(tǒng),其中,加密引擎被布置用于,使用包含在源文件中的命令或者在鏈接階段使用鏈接器標記來對對可執(zhí)行映像的標記節(jié)區(qū)進行加密。21.根據權利要求15-20所述的系統(tǒng),其中,所述標記的源代碼的節(jié)區(qū)包括可執(zhí)行代碼節(jié)區(qū)、數據節(jié)區(qū)和/或塊存儲段節(jié)區(qū)中的一個或更多個。22.根據權利要求15-21所述的系統(tǒng),其中,包含在源代碼中的命令被布置用于標記所述節(jié)區(qū)。23.根據權利要求15所述的系統(tǒng),其中,可執(zhí)行映像的加密節(jié)區(qū)被布置用于由解密引擎進行解密,以產生可執(zhí)行映像,從而形成運行時間映像。24.根據權利要求13所述的系統(tǒng),其中,所述解密引擎被布置用于,使用解密機制在加載時間對加密的修正表以及可執(zhí)行代碼節(jié)區(qū)進行解密。25.根據權利要求23和24所述的系統(tǒng),其中,所述加載器被布置用于產生可執(zhí)行映像,以在運行時間產生最終映像。26.根據權利要求15和17-22所述的系統(tǒng),其中,所述節(jié)區(qū)包括可執(zhí)行程序代碼節(jié)區(qū)、數據節(jié)區(qū)和塊存儲段節(jié)區(qū)。27.根據權利要求15所述的系統(tǒng),其中,所述加密引擎被布置用于對重定位修正表進行加密,以防止在未對所述修正表進行解密的情況下重定位所述可執(zhí)行映像。28.根據權利要求15所述的系統(tǒng),其中,所述加密引擎是鏈接器之后的加密引擎。29.—種微處理器,包含根據權利要求15-28所述的系統(tǒng)。全文摘要本發(fā)明提供了一種對可執(zhí)行映像進行加密和執(zhí)行的方法,包括通過使用源文件中的命令來將可執(zhí)行映像的節(jié)區(qū)標記為要被加密,并編譯所述可執(zhí)行映像以生成目標文件,使用鏈接器來鏈接所述可執(zhí)行映像中的一個或更多個,以產生最終的可執(zhí)行映像,將所述鏈接的可執(zhí)行映像傳遞至鏈接器之后的加密引擎,以對重定位修正補丁表以及被標記為加密的可執(zhí)行映像的節(jié)區(qū)進行加密,并在加載時間對該可執(zhí)行映像進行解密、重定位和執(zhí)行。文檔編號G06F21/12GK101288083SQ200680038390公開日2008年10月15日申請日期2006年10月10日優(yōu)先權日2005年10月17日發(fā)明者科林·金申請人:Nxp股份有限公司