新四季網

將可執行代碼編譯到較不可信的地址空間中的製作方法

2023-06-24 23:48:51 2

專利名稱:將可執行代碼編譯到較不可信的地址空間中的製作方法
將可執行代碼編譯到較不可信的地址空間中
背景
隨著計算機化系統的日益普及,在這些計算機化系統上使用的各種應用程 序也日益增加。具體而言,現在存在出於任何數量的目的配置的各種各樣的應 用程序,無論是用作複雜的作業系統、資料庫等,還是用作單個計算器。在許 多情況下,軟體開發者將使用任何數量的適當的語言在腦海中了解特定操作系 統的情況下編寫新的應用程式。 一旦軟體完成,開發者就將該應用程式編譯成 機器可執行代碼,其然後可被安裝在具有適當的作業系統的計算機系統上。
因此,可以理解,存在作業系統以及各個應用程式的開發者通常必須考慮
的多個考慮事項。這些關注事項中的許多甚至可能是競爭的。例如,許多應用
程序開發者所關注的可能是敏捷且快速的操作,而許多作業系統開發者所關注
的可能是安全性和穩定性。在某些情況下,安全性和穩定性要求可導致某些應 用程序具有較慢的執行和/或較低的性能。
例如,作業系統可被配置成使應用程式以較不可信的"用戶"級運行,而使 其他系統組件以可信的"內核"級運行。結果,以用戶級運行的應用程式可能只 能夠通過經中間可信組件請求給定功能來執行特定類型的功能。該中間組件然 後可確認該請求並且然後將對該功能的請求傳遞給內核級組件,該組件然後可 執行該請求。
管理安全性的其他方法是將各種應用程式和組件限於特定可讀、可寫和/ 或可執行許可空間。例如,作業系統可允許某些應用程式只在讀/執行地址空間 中運行。這可允許這些應用程式執行任何現有指令,但將禁止應用程式執行任 何寫入操作。相反,該作業系統可允許其他敏感的系統組件只在讀/寫地址空間
中操作。這可允許這些敏感組件做出新的寫入,但將禁止執行這些寫入。
在還有一些情況下,作業系統可只允許符合特定代碼標準的特定類型的應 用程序在可讀、可寫及可執行空間中運行。例如,作業系統可只允許"類型安 全"應用程式在讀/寫/執行地址空間中運行。類型安全規則的一個示例可能是要 求整數值只被加到其他整數值而不是浮點值。然後可使用類型安全編譯器來只編譯該類型安全的可執行程序代碼,並由此受到作業系統信任。
不幸的是,某些最近的應用程式開發趨勢使得以上提到的安全管理方法的 各方面複雜化。例如,各種各樣的應用程式開發者現在正使用"託管代碼"來創 建視頻遊戲應用程式。 一般而言,託管代碼包括可執行程序代碼以及可在按需 的基礎上編譯的中間語言代碼。例如,應用程式的開發者可能包括對中間代碼 的一個或多個引用(在經編譯的、可執行代碼中)。因此,當可執行代碼來到 其需要使用僅在中間語言代碼中可用的函數的時刻時,使用JIT (即時)編譯 器來將特定中間語言代碼編譯成可執行指令。
因此,可以理解,作業系統有時將對託管代碼的使用限於類型安全應用程 序。具體而言,因為JIT編譯器將需要寫入,並且因為該應用程式將需要執行, 並且還因為該應用程式將需要訪問該JIT編譯器所編寫的經編譯的代碼,所以
該JIT編譯器和正在執行的應用程式通常將在可讀、可寫及可執行的同一地址
空間中操作。由此,如果中間語言代碼不是類型安全的(或符合某些其他程序
代碼限制),則惡意方可欺騙JIT編譯器生成可執行的有害指令。
不幸的是,諸如類型安全等程序代碼限制通常被認為與速度和性能考慮衝 突。這對於其中速度和性能考慮處於非常寶貴的地位的視頻遊戲應用程式而言 可能尤其成問題。因此,在某些情況下,視頻遊戲應用程式的開發者可發現忽 略諸如類型安全等特定代碼規約是更佳且更高效的。
簡要概述
本發明的各實現提供了被配置成允許在作業系統中使用託管代碼的系統、 方法和電腦程式產品,其中該託管代碼可能未必符合任何特定代碼標準。例 如,在一個實現中,作業系統提供在兩個不同的地址空間中對存儲器位置的訪 問並且設置這些地址空間中的許可,使得該存儲器位置可從這兩個不同的地址 空間以不同的許可來訪問。在一個實現中,在一個地址空間中操作的JIT編譯 器將經編譯的代碼傳遞到共享存儲器堆中。可執行程序代碼進而從該存儲器堆 訪問該經編譯的代碼,並在另一個存儲器地址空間中執行該經編譯的代碼。
例如,一種執行託管代碼以使得不可信程序代碼能夠以不威脅或以其他方 式損害系統安全性的方式來編譯和執行的方法可涉及在存儲器位置的第一地址空間中執行應用程式。該方法還可涉及從應用程式接收編譯一個或多個中間 語言指令集的一個或多個請求。另外,該方法可涉及使用在該存儲器位置的第 二地址空間中運行的JIT編譯器來將該一個或多個中間語言指令集編譯成新編 譯的代碼。此外,該方法可涉及將該新編譯的代碼傳遞給共享存儲器堆。該應 用程序然後可將該新編譯的代碼從該共享存儲器堆中取到該第一地址空間中。
類似地,另一種以使用JIT編譯而同時避免安全性違反的方式生成計算機 可執行程序代碼的方法可涉及接收包括可執行代碼和將要編譯的代碼在內的 應用程式代碼。該方法還可涉及在較低特權模式中並在第一地址空間中執行該 可執行代碼。另外,該方法可涉及標識該可執行代碼中指向將要編譯的至少某 些代碼的一個或多個指針。此外,該方法可涉及切換至較高特權模式。此外, 該方法可涉及在不同的地址空間中使用以該較高特權模式操作的編譯器來編 譯該至少某些代碼。
提供本概述以便以簡化的形式介紹將在以下詳細描述中進一步描述的一 些概念。該概述不旨在標識所要求保護的主題的關鍵特徵或必要特徵,也不旨 在用於幫助確定所要求保護的主題的範圍。
本發明的附加特徵和優點將在以下描述中敘述,且其一部分根據本描述將 是顯而易見的,或可通過對本發明的實踐來獲知。本發明的特徵和優點可通過 在所附權利要求書中特別指出的手段和組合來實現和獲得。本發明的這些和其 他特徵將通過以下描述和所附權利要求書而變得更加完全明顯,或可通過對下 文中所述的本發明的實踐來獲知。
附圖簡述
為了描述可獲得本發明的上述和其它優點和特徵的方式,將通過參考附圖 中示出的本發明的具體實施例來呈現以上簡要描述的本發明的更具體描述。可 以理解,這些附圖僅描述本發明的典型實施例,從而不被認為是對其範圍的限 制,本發明將通過使用附圖用附加特徵和細節來描述和說明,附圖中


圖1A示出了根據本發明的一實現的概略示意圖,其中以較不可信的安全 模式運行的應用程式調用由JIT編譯器在可信安全模式中編譯的託管代碼。
圖1B示出了其中由作業系統管理的存儲器位置可由具有用於訪問該存儲器位置的不同許可的兩個不同地址空間中的組件來訪問的示意圖。
圖2示出了根據本發明的一實現的其中JIT編譯器接收並處理對中間語言 指令的一個或多個請求的動作序列的流程圖;以及
圖3示出了其中作業系統接收包括對託管代碼的一個或多個引用的應用 程序,並根據一個或多個安全機制來執行該應用程式的概略動作序列的流程 圖。
詳細描述
本發明的各實現涉及被配置成允許在作業系統中使用託管代碼的系統、方 法和電腦程式產品,其中該託管代碼可能未必符合任何特定代碼標準。例如,
在一個實現中,作業系統提供在兩個不同的地址空間中對存儲器位置的訪問並 且設置這些地址空間中的許可,使得該存儲器位置可從這兩個不同的地址空間 以不同的許可來訪問。在一個實現中,在一個地址空間中操作的JIT編譯器將 經編譯的代碼傳遞到共享存儲器堆中。可執行程序代碼進而從該存儲器堆訪問 該經編譯的代碼,並在另一個存儲器地址空間中執行該經編譯的代碼。
如將在此處更全面理解的,本發明的各實現可提供安全的系統而未必需要 驗證所生成的代碼不違反該系統的安全約束。這可至少部分地通過"沙箱化
(sandbox)"經編譯的代碼以及正在執行的任何其他代碼來完成。具體而言, 本發明的各實現可定義一"沙箱",其本質上是任何類型的代碼都可在其中執行 的一組預定義邊界。具體地,此處所描述的沙箱邊界將導致執行代碼所做出的 惡意請求或者被作業系統(如來自用戶模式的組件)拒絕,或者被限於只在預 定義許可中的動作或功能(例如,拒絕對讀/執行地址空間的寫入)。
結果,由JIT編譯器(例如,105)或甚至最終調用該JIT編譯器的應用 程序(例如,110)來編譯的代碼能夠在未必是"類型安全的"或符合某一其他 安全考慮事項的情況下在該沙箱中執行。可以理解,這可解放給定開發者以便 以比先前可能的可能更少約束的且可能更快的且性能驅動的方式編寫應用程 序代碼。
除了確保代碼被正確地執行之外,本發明的各實現還提供確保JIT編譯器 本身諸如在接收和編譯中間語言代碼時無法被"劫持"的機制。具體而言,本發明的各實現包括被配置成類型安全執行,而不是一定檢査傳入代碼的類型安全性或只編譯類型安全代碼的JIT編譯器。由此,可針對將導致JIT編譯器本身 違反安全定義(例如,類型安全定義)的請求保護根據本發明的各實現的JIT編譯器。例如,在一個實現中,JIT編譯器可用類型安全定義來配置,該類型安全 定義限制該JIT編譯器到達其自己的數據結構或被定義為系統100運行時環境 的一部分的數據結構之外。例如,JIT編譯器可被配置成執行一系列檢査以確 保只要執行從一種類型到另一種類型的強制轉換就只執行有效的強制轉換。類 似地,JIT編譯器可被配置成只要被要求從數組中讀取,該JIT編譯器就執行 一個或多個邊界檢査以確保該JIT編譯器處於該數組的界限內。例如,對於在 C程式語言中使用,JIT編譯器還可被配置成確保只要使用"共用體",該JIT編 譯器就對該共用體的適當部分進行讀寫。此外,JIT編譯器可被配置成確保該 JIT編譯器在讀取或寫入類型棧(該JIT編譯器中的類型棧)時從不上溢或下溢o一般而言,JIT編譯器的類型棧是一般對於維持正確性等而言是重要的內 部數據結構。例如,中間語言代碼通常是其中JIT編譯器按序對棧中的對象操 作並按序將結果放回到該棧中的基於棧的系統。根據本發明的各實現的JIT編 譯器由此被配置成模擬棧以確保該JIT編譯器如所期望地操作。例如,JIT編 譯器能夠在編譯中間語言代碼時執行棧模擬。如果所模擬的棧顯著地偏離JIT 編譯器所得到的饋送,則該JIT編譯器可退出編譯或生成一錯誤。這幫助JIT 編譯器確保其在規定的邊界內操作,並由此受到保護以免違反一個或多個安全 規則。圖1A示出了其中正在執行應用程式(即,110)的計算機化系統100 (例 如,視頻遊戲作業系統)的概略示意圖。在一個實現中,應用程式110是視頻 遊戲應用程式,但可以理解,應用程式110可以是任何類型的可執行程序代碼。 在任何情況下,圖1A還示出應用程式110包括一個或多個可執行指令集,諸 如包括指向中間語言("IL")代碼120的指針140的經編譯的代碼135等。類 似地,圖1A示出應用程式110包括經編譯的代碼145,其包括指向中間語言 代碼125的指針150。中間語言代碼125進而包括諸如代碼120、 125和130等在可被執行前需要進一步編譯的若干不同的組件或模塊。存在應用程式110將或能在計算機系統100中執行的任何數量的不同方 式。例如,用戶可將存儲設備加載到系統100被安裝在其上的另一設備上。該存儲設備可包括用於應用程式110的二進位可執行代碼以及中間語言代碼115 形式的託管代碼。應用程式110的可執行代碼和中間語言代碼兩者然後可被加 載到計算機化系統100中。在其他情況下,諸如開發者等用戶可通過網絡連接 來上傳包括中間語言代碼115的應用程式110。在這種情況下,該用戶可能正 在執行應用程式110以測試新開發的應用程式(例如,110)。在任何情況下,圖1A還示出應用程式IIO正以較低特權模式(例如,"用 戶"模式)執行,而JIT編譯器105正以較高特權模式(例如,"內核"模式)操 作。例如,圖1A示出應用程式IIO正以具有用戶特權的用戶模式113操作, 而JIT編譯器105正以具有相應內核特權的內核模式103操作。另外,圖1A 示出中間語言代碼115由具有內核103級特權的一個或多個組件來訪問。相反, 並且如將在此更全面理解的,可執行代碼將只由以用戶113級特權操作的組件 來訪問。因此,由於用於應用程式110的運行時環境在用戶113模式中執行經編譯 的指令135、 145中的每一個,因此該運行時環境將遇到指向中間語言代碼的 一個或多個指針中的任一個。例如,在執行期間,用於應用程式110的運行時 環境遇到指向中間語言代碼120的指針140。因為指針140引用只可在內核103 模式中訪問的代碼,所以運行時環境將擺脫用戶模式並且系統IOO將切換到內 核103模式。請求143然後將由以內核103模式操作的安全組件155來處理。一般而言, 安全組件155可包括被配置成接收用戶模式113組件請求(例如,143)並且 然後確認該請求是否是適當的任何數量或類型的組件或模塊。這樣做是因為用 戶模式113不可信並且因為應用程式110可表示或不表示(或以其他方式包括) 危險或惡意代碼。因此,為了確保來自用戶模式113執行的請求不會破壞系統100,安全組 件155可執行任何數量或類型的確認功能。例如,安全組件55可審閱消息143 以査找任何數量的句柄、標記等。此外,安全組件155可審閱請求143以查找可用於損害系統100的應用程式指令,諸如特定存儲器地址請求或可導致緩衝區超限的請求等。在確認請求143後,安全組件155能夠以內核模式啟動JIT 編譯器105。一旦以內核模式操作,JIT編譯器然後就可被饋送所請求的代碼(即,120) 並開始編譯。例如,圖1A示出安全組件155執行使得JIT編譯器105接收並 編譯中間語言代碼120的一個或多個請求147。在將代碼120編譯成可執行二 進位指令(即,經編譯的代碼123)之後,圖1A還示出JIT編譯器105然後 可將代碼123傳遞到存儲器堆160中。如將參考圖1B更全面理解的,存儲器堆160跨越用戶模式113和內核模 式103操作之間的邊界。實際上,存儲器堆160擔當可由以內核模式103和/ 或用戶模式113操作的組件來訪問的跨許可/跨邊界存儲。 一旦完成編譯,系統 100就可切換回到用戶模式並繼續執行應用程式110。具體而言,以用戶模式 操作的應用程式110能夠在經編譯的代碼123 —旦可用時就拉取它,並開始在 用戶模式113中執行經編譯的代碼123。因此,可以理解,存儲器堆160可用 於通過允許JIT編譯器105和用戶113在沒有直接通信的情況下以不同的特權 模式獨立地運行來幫助維持這兩個安全層之間的安全邊界。圖1B示出了關於可如何實現或以其他方式維持JIT編譯器105和應用程 序IIO之間的安全邊界的附加細節。具體而言,圖1B示出了其中JIT編譯器 105和應用程式110對同一特定存儲器位置(雖然具有不同的許可集)操作的 一實現。具體而言,圖1B示出了其中同一存儲器位置可由具有一個地址空間 中的一個許可集的一個地址空間中的組件來訪問,並且可由具有不同的許可集 的另一個地址空間中的不同的組件來訪問的一實現。例如,圖1B示出存儲器 位置160在具有讀/寫許可的地址空間170,以及具有讀/執行許可的地址空間 165中可用。一般而言,作業系統100的一個或多個內核層103組件將維護用於任何給 定地址位置和相應地址空間的存儲器頁表180。例如,圖1B示出存儲器頁表 180在系統100的內核103層(即, 一個或多個內核模式組件)中維護。存儲 器頁表180由內核103模式組件來維護的一個原因是確保不可信應用程式(即, 以用戶模式操作的)無法訪問或以其他方式不適當地操縱該頁表。在任何情況下,圖IB示出頁表180將存儲器位置160和165與地址空間170、 175、 190和195相關。例如,存儲器位置160是共享存儲器堆,而存儲器位置165是加載應用程式110以便執行的位置。另外,頁表180映射存儲器位置160和165的訪問許可,使得地址空間170和190分別具有對位置160或165的"讀/寫"訪問。類似地,頁表180將地址空間175或195對存儲器位置160和165的許可分別映射為"讀/執行"。因此,當安全組件155 (圖1A)從用戶模式113組件接收請求(例如,143)時,安全組件155可將發起該請求(例如,143)的組件的地址空間與用於JIT編譯器輸出的地址空間(例如,123)相關。
如先前所提到的,系統100可強制實施許可和安全層邊界的方式中的一種是通過跨越所描述的安全/許可邊界的存儲器堆160。 一般而言,"存儲器堆"包括系統100在運行時期間或在此之前留出的一組存儲器地址。在該特定示例中,系統100可分配和配置存儲器堆160以使得僅內核層組件(例如,JIT編譯器105)可對存儲器堆160寫入(例如,經由頁表180),而用戶層組件只可從存儲器堆160讀取。結果,應用程式110無法在存儲器堆160中執行來自JIT編譯器105的任何經編譯的代碼,而僅在地址空間175中必須這樣做。
因此,可以理解,"沙箱"可通過要求應用程式的操作只處於用戶模式中並通過要求應用程式和JIT編譯器從與不同的許可集相關聯的存儲器地址訪問特定組件或數據結構來設置。因此,圖1A-1B及相應文本示出可用於以安全的方式訪問和/或執行包括託管代碼在內的實際上任何類型的可執行代碼的多個不同的體系結構組件。具體而言,圖1A-1B及相應文本示出應用程式可如何在用戶113模式中執行並訪問只具有對JIT編譯的代碼的讀或讀/執行許可的存儲器堆。另外,各附圖及相應文本示出應用程式可如何在具有對存儲器堆160的讀/寫許可的不同的地址空間170中調用一個或多個內核層組件並可由此編譯託管代碼並將其傳遞給存儲器堆160而不執行它。
如先前所提到的,這種類型的分布式地址空間配置可為程序執行和開發提供多個不同的益處。例如,最初,應用程式開發者可編寫實際上任何類型的代碼而不擔心安全考慮事項(例如,類型安全)。另外,作業系統開發者無需將消耗性資源花費在開發將強制所有執行的程序代碼是安全的(例如,類型安全)的運行時驗證代碼上。
除了上述內容之外,本發明的各實現還可以按照具有用於實現特定結果的方法中的一個或多個動作的流程圖來描述。具體而言,圖2和3及相應文本示出了用於執行託管代碼以使得能夠在不威脅或損害安全性的情況下執行安全
和不安全的應用程式代碼的一個或多個動作的流程圖。圖2和3所示的方法在以下參考圖1A-1B的組件和圖來描述。
因此,圖2示出從客戶計算機系統的觀點來看的方法可包括在第一地址空間中執行應用程式的動作200.動作200包括在存儲器位置的第一地址空間中執行應用程式。例如,圖1B示出應用程式110正從具有用於訪問存儲器位置160的讀/執行許可的地址空間175 (SP, JIT編譯的代碼將被放置並由此被指定為讀/執行的地方)執行。
圖2還示出該方法可包括從應用程式接收對中間語言指令的請求的動作210。動作210可包括從應用程式接收編譯一個或多個中間語言指令集的一個或多個請求。例如,用於應用程式110的運行時環境遇到指向只可在內核103模式中訪問的中間語言代碼120的指針140.由此,該運行時環境將該指針120作為消息143傳遞給安全組件155,該組件在內核模式中處理該請求。
另外,圖2示出該方法可包括在第二地址空間中編譯中間語言指令的動作220。動作220包括使用在第二地址空間中運行的JIT編譯器來將一個或多個中間語言指令集編譯成新編譯的代碼。例如,在確認請求143後,安全組件155準備並執行將所請求的中間語言代碼傳遞給JIT編譯器105的一個或多個請求147。 JIT編譯器105然後在第二地址空間170 (在本圖示中具備對共享存儲器堆160的讀/寫許可)中編譯中間語言代碼120。
此外,圖2示出該方法可包括將經編譯的代碼傳遞給共享存儲器堆的動作230。動作230包括將新編譯的代碼傳遞給共享存儲器堆,其中應用程式可將該新編譯的代碼取到第一地址空間中。例如,圖1A和1B示出JIT編譯器105以及應用程式110可訪問存儲器堆160.具體而言,JIT編譯器105可對存儲器堆160寫入(但不在其中執行),而應用程式110隻可從存儲器堆160讀取和執行。因此,當JIT編譯器105編譯並創建代碼123時,用於應用程式110的運行時環境可將經編譯的代碼123取到地址空間175中,並在用戶模式中執行該代碼。
除了上述內容之外,圖3示出根據本發明的一實現的、以使用JIT編譯而同時避免安全性違反的方式生成用於計算機系統的計算機可執行程序代碼的
方法可包括接收可執行代碼和將要編譯的代碼的動作300.動作300包括接收包括可執行代碼和將要編譯的代碼的程序代碼。例如,作業系統100接收一個或多個存儲介質和/或接收應用程式110的基於網絡的上傳。應用程式110包括可執行程序代碼以及由一個或多個內核層103組件來單獨訪問的中間語言代碼115。
圖3還示出該方法可包括在較低特權模式中執行可執行代碼的動作310.動作310包括在較低特權模式中並在第一地址空間中執行可執行代碼。例如,圖1A示出應用程式110的可執行部分僅在用戶模式113中訪問或以其他方式執行,而中間語言代碼115隻由內核模式組件來訪問。
另外,圖3示出該方法可包括接收指向將要編譯的代碼的指針的動作310。動作310包括接收可執行代碼中指向將要編譯的至少某些代碼的一個或多個指針。例如,圖1A-1B示出以用戶模式113並在/從地址空間175中操作的應用程式110包括經編譯的代碼135、指向中間語言代碼120的指針140、經編譯的代碼145以及指向中間語言代碼125的指針150。當在用戶模式中執行應用程式110時,將進而標識指針140和/或150。
此外,圖3示出該方法可包括切換到較高特權模式的動作330.例如,用於應用程式110的運行時環境在執行期間標識指針140,並標識將需要啟動JIT編譯器105.因為JIT編譯器105將需要以內核模式操作,所以系統100暫時暫停執行應用程式IIO,從用戶模式切換到內核模式並且然後啟動JIT編譯器105作為內核模式103組件。然後將包括指針140的消息143傳遞給內核模式103安全組件155。以內核模式操作的安全組件155然後評估該請求以確保該請求143是正確地形成的和/或包括適當的句柄、安全標示符等。
此外,圖3示出該方法可包括在較高特權模式中編譯所請求的代碼的動作340。動作340包括使用以較高特權模式操作的編譯器來在不同的地址空間中編譯所請求的代碼。例如,圖1A和1B示出在較高特權內核層103中操作的JIT編譯器105可在一個地址空間(地址空間170)中編譯代碼120,並且還將經編譯的代碼123傳遞給該JIT編譯器具有讀/寫訪問的存儲器堆160。在切換 回到用戶模式後,應用程式110然後可訪問經編譯的代碼123並從具有對存儲 器堆160的讀/執行許可的不同的地址空間(地址空間175)執行該代碼。
由此,圖1A-2及相應文本提供了可用於在不犧牲重要的安全保證的情況 下執行包括託管代碼在內的不可信代碼的多個組件、模塊和機制。如先前所提 到的,這可至少部分地通過在用於同一程序的單獨地址空間中分離中間語言代 碼的編譯和二進位代碼的執行來實現。另外,這可用編譯中間代碼並將所編譯 的代碼傳遞到共享存儲器堆中的類型安全JIT編譯器來實現。類型安全JIT編 譯器被配置成雖然它可接受並編譯不是類型安全的代碼,但該JIT編譯器本身 被阻止在特定規定的類型安全邊界之外操作。此外,這可通過確保可執行代碼 僅由以用戶模式操作的組件來訪問,並且中間語言代碼僅由以內核模式操作的 組件在讀/寫地址空間中訪問來實現。
本發明的各實施例可以包括含有各種計算機硬體的專用或通用計算機,這 將在以下做出進一步討論。本發明的範圍內的各實施例還包括用於承載或其上 儲存有計算機可執行指令或數據結構的計算機可讀介質。這樣的計算機可讀介 質可以是可由通用或專用計算機訪問的任何可用介質。
作為示例而非限制,這樣的計算機可讀介質可包括RAM、 ROM、 EEPROM、 CD-ROM或其它光碟存儲、磁碟存儲或其它磁存儲設備、或可用 於承載或存儲計算機可執行指令或數據結構形式的所需程序代碼裝置且可由 通用或專用計算機訪問的任何其它介質。當信息通過網絡或另一通信連接(硬 連線、無線或硬連線或無線的組合)傳輸或提供給計算機時,該計算機將該連 接適當地視為計算機可讀介質。因此,任何這樣的連接被適當地稱為計算機可 讀介質。以上的組合也應包括在計算機可讀介質的範圍之內。
計算機可執行指令包括例如,使通用計算機、專用計算機、或專用處理設
備執行某一功能或某組功能的指令和數據。儘管用對結構特徵和/或方法動作專 用的語言描述了本主題,但可以理解,所附權利要求書中定義的主題不必限於 上述具體特徵或動作。相反,上述具體特徵和動作是作為實現權利要求的示例 形式公開的。
本發明可具體化為其它具體形式而不背離其精神或本質特徵。所述實施例在所有方面都應被認為僅是說明性而非限制性的。從而,本發明的範圍由所附 權利要求書而非前述描述指示。落入權利要求書的等效方式的含義和範圍內的 所有改變應被權利要求書的範圍涵蓋。
權利要求
1.一種在計算機化環境中的執行託管代碼以使得能夠以不威脅或以其他方式損害系統安全性的方式編譯並執行不可信程序代碼的方法,所述計算機化環境包括存儲器、以及JIT編譯器和加載在所述存儲器中的一個或多個應用程式,所述方法包括從被設置成具有用於訪問共享存儲器堆的第一許可集的第一地址空間執行應用程式;從所述應用程式接收編譯一個或多個中間語言指令集的一個或多個請求;使用在具有用於訪問所述共享存儲器堆的第二許可集的第二地址空間中運行的JIT編譯器來將所述一個或多個中間語言指令集編譯成新編譯的代碼;以及將所述新編譯的代碼傳遞給所述共享存儲器堆,其中所述應用程式可取出所述新編譯的代碼並從所述第一地址空間執行所述新編譯的代碼。
2. 如權利要求l所述的方法,其特徵在於,還包括在接收到所述新編 譯的代碼已被傳遞給所述共享存儲器堆的指示後,從內核模式切換到用戶模 式操作級的動作。
3. 如權利要求2所述的方法,其特徵在於,還包括所述應用程式取出 經編譯的代碼並從所述第一地址空間執行所述經編譯的代碼的動作。
4. 如權利要求l所述的方法,其特徵在於,所述第一地址空間被配置 成具有對於訪問所述共享存儲器堆的讀/執行許可,使得沒有在所述第一地址空間中操作的組件能夠對所述共享存儲器堆寫入。
5. 如權利要求1所述的方法,其特徵在於,所述第二地址空間被配置 成以讀/寫許可訪問所述存儲器堆,使得沒有在所述第二地址空間中操作的 組件能夠在所述存儲器堆中執行代碼。
6. 如權利要求l所述的方法,其特徵在於,所述JIT編譯器以較高特 權模式操作並且所述應用程式以較低特權模式運行。
7. 如權利要求l所述的方法,其特徵在於,所述JIT編譯器被約束在 一個或多個類型安全約束中執行,但被配置成接受並編譯不是類型安全的中 間語言語言代碼。
8. 如權利要求7所述的方法,其特徵在於,所述JIT編譯器執行以下 動作接收執行違反對所述JIT編譯器的安全約束的功能的一個或多個請 求;以及拒絕執行所述功能的所述一個或多個請求,或停止編譯所述一個或 多個中間語言指令集。
9. 如權利要求1所述的方法,其特徵在於,還包括在從所述應用程式 接收到所述一個或多個請求後,激活內核模式操作級。
10. 如權利要求9所述的方法,其特徵在於,所述激活內核模式操作級 的動作包括啟動內核模式安全組件的動作。
11. 如權利要求10所述的方法,其特徵在於,所述來自應用程式的一 個或多個請求由內核模式安全組件來接收。
12. 如權利要求11所述的方法,其特徵在於,還包括所述內核模式安 全組件確認所述來自應用程式的一個或多個請求的動作。
13. 如權利要求12所述的方法,其特徵在於,所述確認一個或多個請 求的動作包括確定所述一個或多個請求中所包括的句柄是否有效的動作。
14. 一種在計算機化環境中的以使用JIT編譯而同時避免安全性違反的 方式生成計算機可執行程序代碼的方法,所述計算機化環境包括存儲、JIT編譯器以及加載在存儲器中的一個或多個請求應用程式,所述方法包括接收包括可執行代碼和將要編譯的代碼的應用程式代碼; 在較低特權模式中並在第一地址空間中執行所述可執行代碼; 標識所述可執行代碼中指向將要編譯的至少某些代碼的一個或多個 指針;切換到較高特權模式;以及使用以所述較高特權模式操作的編譯器來在不同的地址空間中編譯 所述至少某些代碼。
15. 如權利要求14所述的方法,其特徵在於,所述應用程式代碼包括 視頻遊戲應用程式中從所述存儲接收到視頻遊戲作業系統中的部分。
16. 如權利要求14所述的方法,其特徵在於,所述編譯器是被配置成 只處理類型安全請求,但卻被配置成編譯類型安全或非類型安全中間語言代 碼的類型安全JIT編譯器。
17. 如權利要求14所述的方法,其特徵在於,所述較高特權模式是內 核模式操作級,而所述較低特權模式是用戶操作級。
18. 如權利要求14所述的方法,其特徵在於,所述第一地址空間被配 置成以讀/執行許可來訪問存儲器堆,而所述第二地址空間被配置成以讀/寫 許可來訪問所述存儲器堆。
19. 如權利要求14所述的方法,其特徵在於,還包括以下動作 在標識所述至少某些代碼已被編譯後切換到所述較低特權模式;以及在所述第一地址空間中執行經編譯的至少某些代碼。
20. —種在計算機化環境中的電腦程式存儲產品,所述計算機化環境 包括存儲器、JIT編譯器以及加載在所述存儲器中的一個或多個請求應用程 序,所述電腦程式存儲產品具有存儲在其上的、在被執行時使得一個或多 個處理器執行一種方法的計算機可執行指令,所述方法包括從被設置成具有用於訪問共享存儲器堆的第一許可集的第一地址空 間執行應用程式;從所述應用程式接收編譯一個或多個中間語言指令集的一個或多個 請求;使用在具有用於訪問所述共享存儲器堆的第二許可集的第二地址空 間中運行的JIT編譯器來將所述一個或多個中間語言指令集編譯成新編譯 的代碼;以及將所述新編譯的代碼傳遞給所述共享存儲器堆,其中所述應用程 序可取出所述新編譯的代碼並從所述第一地址空間執行所述新編譯的 代碼。
全文摘要
實現託管代碼的不安全的應用程式能夠以安全的方式來執行。具體而言,作業系統可被配置成在用戶模式中執行應用程式,但通過以內核模式操作的類型安全JIT編譯器來處理託管代碼編譯。作業系統還可將單個存儲器位置指定為通過具有不同許可集的多個地址空間來訪問。以用戶模式操作的應用程式能夠在讀/執行地址空間中執行,而JIT編譯器在讀/寫地址空間中操作。當遇到指向中間語言代碼的一個或多個指針時,應用程式運行時環境可將一個或多個編譯請求發送到內核模式安全組件,該組件確認這些請求。如果得到確認,則JIT編譯器將編譯所請求的中間語言代碼,並且應用程式可從共享存儲器堆訪問所編譯的代碼。
文檔編號G06F9/45GK101553784SQ200780043929
公開日2009年10月7日 申請日期2007年11月27日 優先權日2006年11月28日
發明者D·C·賴頓, R·S·烏諾基 申請人:微軟公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀