專利名稱:將可執(zhí)行代碼編譯到較不可信的地址空間中的制作方法
將可執(zhí)行代碼編譯到較不可信的地址空間中
背景
隨著計(jì)算機(jī)化系統(tǒng)的日益普及,在這些計(jì)算機(jī)化系統(tǒng)上使用的各種應(yīng)用程 序也日益增加。具體而言,現(xiàn)在存在出于任何數(shù)量的目的配置的各種各樣的應(yīng) 用程序,無(wú)論是用作復(fù)雜的操作系統(tǒng)、數(shù)據(jù)庫(kù)等,還是用作單個(gè)計(jì)算器。在許 多情況下,軟件開(kāi)發(fā)者將使用任何數(shù)量的適當(dāng)?shù)恼Z(yǔ)言在腦海中了解特定操作系 統(tǒng)的情況下編寫(xiě)新的應(yīng)用程序。 一旦軟件完成,開(kāi)發(fā)者就將該應(yīng)用程序編譯成 機(jī)器可執(zhí)行代碼,其然后可被安裝在具有適當(dāng)?shù)牟僮飨到y(tǒng)的計(jì)算機(jī)系統(tǒng)上。
因此,可以理解,存在操作系統(tǒng)以及各個(gè)應(yīng)用程序的開(kāi)發(fā)者通常必須考慮
的多個(gè)考慮事項(xiàng)。這些關(guān)注事項(xiàng)中的許多甚至可能是競(jìng)爭(zhēng)的。例如,許多應(yīng)用
程序開(kāi)發(fā)者所關(guān)注的可能是敏捷且快速的操作,而許多操作系統(tǒng)開(kāi)發(fā)者所關(guān)注
的可能是安全性和穩(wěn)定性。在某些情況下,安全性和穩(wěn)定性要求可導(dǎo)致某些應(yīng) 用程序具有較慢的執(zhí)行和/或較低的性能。
例如,操作系統(tǒng)可被配置成使應(yīng)用程序以較不可信的"用戶"級(jí)運(yùn)行,而使 其他系統(tǒng)組件以可信的"內(nèi)核"級(jí)運(yùn)行。結(jié)果,以用戶級(jí)運(yùn)行的應(yīng)用程序可能只 能夠通過(guò)經(jīng)中間可信組件請(qǐng)求給定功能來(lái)執(zhí)行特定類型的功能。該中間組件然 后可確認(rèn)該請(qǐng)求并且然后將對(duì)該功能的請(qǐng)求傳遞給內(nèi)核級(jí)組件,該組件然后可 執(zhí)行該請(qǐng)求。
管理安全性的其他方法是將各種應(yīng)用程序和組件限于特定可讀、可寫(xiě)和/ 或可執(zhí)行許可空間。例如,操作系統(tǒng)可允許某些應(yīng)用程序只在讀/執(zhí)行地址空間 中運(yùn)行。這可允許這些應(yīng)用程序執(zhí)行任何現(xiàn)有指令,但將禁止應(yīng)用程序執(zhí)行任 何寫(xiě)入操作。相反,該操作系統(tǒng)可允許其他敏感的系統(tǒng)組件只在讀/寫(xiě)地址空間
中操作。這可允許這些敏感組件做出新的寫(xiě)入,但將禁止執(zhí)行這些寫(xiě)入。
在還有一些情況下,操作系統(tǒng)可只允許符合特定代碼標(biāo)準(zhǔn)的特定類型的應(yīng) 用程序在可讀、可寫(xiě)及可執(zhí)行空間中運(yùn)行。例如,操作系統(tǒng)可只允許"類型安 全"應(yīng)用程序在讀/寫(xiě)/執(zhí)行地址空間中運(yùn)行。類型安全規(guī)則的一個(gè)示例可能是要 求整數(shù)值只被加到其他整數(shù)值而不是浮點(diǎn)值。然后可使用類型安全編譯器來(lái)只編譯該類型安全的可執(zhí)行程序代碼,并由此受到操作系統(tǒng)信任。
不幸的是,某些最近的應(yīng)用程序開(kāi)發(fā)趨勢(shì)使得以上提到的安全管理方法的 各方面復(fù)雜化。例如,各種各樣的應(yīng)用程序開(kāi)發(fā)者現(xiàn)在正使用"托管代碼"來(lái)創(chuàng) 建視頻游戲應(yīng)用程序。 一般而言,托管代碼包括可執(zhí)行程序代碼以及可在按需 的基礎(chǔ)上編譯的中間語(yǔ)言代碼。例如,應(yīng)用程序的開(kāi)發(fā)者可能包括對(duì)中間代碼 的一個(gè)或多個(gè)引用(在經(jīng)編譯的、可執(zhí)行代碼中)。因此,當(dāng)可執(zhí)行代碼來(lái)到 其需要使用僅在中間語(yǔ)言代碼中可用的函數(shù)的時(shí)刻時(shí),使用JIT (即時(shí))編譯 器來(lái)將特定中間語(yǔ)言代碼編譯成可執(zhí)行指令。
因此,可以理解,操作系統(tǒng)有時(shí)將對(duì)托管代碼的使用限于類型安全應(yīng)用程 序。具體而言,因?yàn)镴IT編譯器將需要寫(xiě)入,并且因?yàn)樵搼?yīng)用程序?qū)⑿枰獔?zhí)行, 并且還因?yàn)樵搼?yīng)用程序?qū)⑿枰L問(wèn)該JIT編譯器所編寫(xiě)的經(jīng)編譯的代碼,所以
該JIT編譯器和正在執(zhí)行的應(yīng)用程序通常將在可讀、可寫(xiě)及可執(zhí)行的同一地址
空間中操作。由此,如果中間語(yǔ)言代碼不是類型安全的(或符合某些其他程序
代碼限制),則惡意方可欺騙JIT編譯器生成可執(zhí)行的有害指令。
不幸的是,諸如類型安全等程序代碼限制通常被認(rèn)為與速度和性能考慮沖 突。這對(duì)于其中速度和性能考慮處于非常寶貴的地位的視頻游戲應(yīng)用程序而言 可能尤其成問(wèn)題。因此,在某些情況下,視頻游戲應(yīng)用程序的開(kāi)發(fā)者可發(fā)現(xiàn)忽 略諸如類型安全等特定代碼規(guī)約是更佳且更高效的。
簡(jiǎn)要概述
本發(fā)明的各實(shí)現(xiàn)提供了被配置成允許在操作系統(tǒng)中使用托管代碼的系統(tǒng)、 方法和計(jì)算機(jī)程序產(chǎn)品,其中該托管代碼可能未必符合任何特定代碼標(biāo)準(zhǔn)。例 如,在一個(gè)實(shí)現(xiàn)中,操作系統(tǒng)提供在兩個(gè)不同的地址空間中對(duì)存儲(chǔ)器位置的訪 問(wèn)并且設(shè)置這些地址空間中的許可,使得該存儲(chǔ)器位置可從這兩個(gè)不同的地址 空間以不同的許可來(lái)訪問(wèn)。在一個(gè)實(shí)現(xiàn)中,在一個(gè)地址空間中操作的JIT編譯 器將經(jīng)編譯的代碼傳遞到共享存儲(chǔ)器堆中??蓤?zhí)行程序代碼進(jìn)而從該存儲(chǔ)器堆 訪問(wèn)該經(jīng)編譯的代碼,并在另一個(gè)存儲(chǔ)器地址空間中執(zhí)行該經(jīng)編譯的代碼。
例如,一種執(zhí)行托管代碼以使得不可信程序代碼能夠以不威脅或以其他方 式損害系統(tǒng)安全性的方式來(lái)編譯和執(zhí)行的方法可涉及在存儲(chǔ)器位置的第一地址空間中執(zhí)行應(yīng)用程序。該方法還可涉及從應(yīng)用程序接收編譯一個(gè)或多個(gè)中間 語(yǔ)言指令集的一個(gè)或多個(gè)請(qǐng)求。另外,該方法可涉及使用在該存儲(chǔ)器位置的第 二地址空間中運(yùn)行的JIT編譯器來(lái)將該一個(gè)或多個(gè)中間語(yǔ)言指令集編譯成新編 譯的代碼。此外,該方法可涉及將該新編譯的代碼傳遞給共享存儲(chǔ)器堆。該應(yīng) 用程序然后可將該新編譯的代碼從該共享存儲(chǔ)器堆中取到該第一地址空間中。
類似地,另一種以使用JIT編譯而同時(shí)避免安全性違反的方式生成計(jì)算機(jī) 可執(zhí)行程序代碼的方法可涉及接收包括可執(zhí)行代碼和將要編譯的代碼在內(nèi)的 應(yīng)用程序代碼。該方法還可涉及在較低特權(quán)模式中并在第一地址空間中執(zhí)行該 可執(zhí)行代碼。另外,該方法可涉及標(biāo)識(shí)該可執(zhí)行代碼中指向?qū)⒁幾g的至少某 些代碼的一個(gè)或多個(gè)指針。此外,該方法可涉及切換至較高特權(quán)模式。此外, 該方法可涉及在不同的地址空間中使用以該較高特權(quán)模式操作的編譯器來(lái)編 譯該至少某些代碼。
提供本概述以便以簡(jiǎn)化的形式介紹將在以下詳細(xì)描述中進(jìn)一步描述的一 些概念。該概述不旨在標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨 在用于幫助確定所要求保護(hù)的主題的范圍。
本發(fā)明的附加特征和優(yōu)點(diǎn)將在以下描述中敘述,且其一部分根據(jù)本描述將 是顯而易見(jiàn)的,或可通過(guò)對(duì)本發(fā)明的實(shí)踐來(lái)獲知。本發(fā)明的特征和優(yōu)點(diǎn)可通過(guò) 在所附權(quán)利要求書(shū)中特別指出的手段和組合來(lái)實(shí)現(xiàn)和獲得。本發(fā)明的這些和其 他特征將通過(guò)以下描述和所附權(quán)利要求書(shū)而變得更加完全明顯,或可通過(guò)對(duì)下 文中所述的本發(fā)明的實(shí)踐來(lái)獲知。
附圖簡(jiǎn)述
為了描述可獲得本發(fā)明的上述和其它優(yōu)點(diǎn)和特征的方式,將通過(guò)參考附圖 中示出的本發(fā)明的具體實(shí)施例來(lái)呈現(xiàn)以上簡(jiǎn)要描述的本發(fā)明的更具體描述???以理解,這些附圖僅描述本發(fā)明的典型實(shí)施例,從而不被認(rèn)為是對(duì)其范圍的限 制,本發(fā)明將通過(guò)使用附圖用附加特征和細(xì)節(jié)來(lái)描述和說(shuō)明,附圖中
圖1A示出了根據(jù)本發(fā)明的一實(shí)現(xiàn)的概略示意圖,其中以較不可信的安全 模式運(yùn)行的應(yīng)用程序調(diào)用由JIT編譯器在可信安全模式中編譯的托管代碼。
圖1B示出了其中由操作系統(tǒng)管理的存儲(chǔ)器位置可由具有用于訪問(wèn)該存儲(chǔ)器位置的不同許可的兩個(gè)不同地址空間中的組件來(lái)訪問(wèn)的示意圖。
圖2示出了根據(jù)本發(fā)明的一實(shí)現(xiàn)的其中JIT編譯器接收并處理對(duì)中間語(yǔ)言 指令的一個(gè)或多個(gè)請(qǐng)求的動(dòng)作序列的流程圖;以及
圖3示出了其中操作系統(tǒng)接收包括對(duì)托管代碼的一個(gè)或多個(gè)引用的應(yīng)用 程序,并根據(jù)一個(gè)或多個(gè)安全機(jī)制來(lái)執(zhí)行該應(yīng)用程序的概略動(dòng)作序列的流程 圖。
詳細(xì)描述
本發(fā)明的各實(shí)現(xiàn)涉及被配置成允許在操作系統(tǒng)中使用托管代碼的系統(tǒng)、方 法和計(jì)算機(jī)程序產(chǎn)品,其中該托管代碼可能未必符合任何特定代碼標(biāo)準(zhǔn)。例如,
在一個(gè)實(shí)現(xiàn)中,操作系統(tǒng)提供在兩個(gè)不同的地址空間中對(duì)存儲(chǔ)器位置的訪問(wèn)并 且設(shè)置這些地址空間中的許可,使得該存儲(chǔ)器位置可從這兩個(gè)不同的地址空間 以不同的許可來(lái)訪問(wèn)。在一個(gè)實(shí)現(xiàn)中,在一個(gè)地址空間中操作的JIT編譯器將 經(jīng)編譯的代碼傳遞到共享存儲(chǔ)器堆中。可執(zhí)行程序代碼進(jìn)而從該存儲(chǔ)器堆訪問(wèn) 該經(jīng)編譯的代碼,并在另一個(gè)存儲(chǔ)器地址空間中執(zhí)行該經(jīng)編譯的代碼。
如將在此處更全面理解的,本發(fā)明的各實(shí)現(xiàn)可提供安全的系統(tǒng)而未必需要 驗(yàn)證所生成的代碼不違反該系統(tǒng)的安全約束。這可至少部分地通過(guò)"沙箱化
(sandbox)"經(jīng)編譯的代碼以及正在執(zhí)行的任何其他代碼來(lái)完成。具體而言, 本發(fā)明的各實(shí)現(xiàn)可定義一"沙箱",其本質(zhì)上是任何類型的代碼都可在其中執(zhí)行 的一組預(yù)定義邊界。具體地,此處所描述的沙箱邊界將導(dǎo)致執(zhí)行代碼所做出的 惡意請(qǐng)求或者被操作系統(tǒng)(如來(lái)自用戶模式的組件)拒絕,或者被限于只在預(yù) 定義許可中的動(dòng)作或功能(例如,拒絕對(duì)讀/執(zhí)行地址空間的寫(xiě)入)。
結(jié)果,由JIT編譯器(例如,105)或甚至最終調(diào)用該JIT編譯器的應(yīng)用 程序(例如,110)來(lái)編譯的代碼能夠在未必是"類型安全的"或符合某一其他 安全考慮事項(xiàng)的情況下在該沙箱中執(zhí)行??梢岳斫猓@可解放給定開(kāi)發(fā)者以便 以比先前可能的可能更少約束的且可能更快的且性能驅(qū)動(dòng)的方式編寫(xiě)應(yīng)用程 序代碼。
除了確保代碼被正確地執(zhí)行之外,本發(fā)明的各實(shí)現(xiàn)還提供確保JIT編譯器 本身諸如在接收和編譯中間語(yǔ)言代碼時(shí)無(wú)法被"劫持"的機(jī)制。具體而言,本發(fā)明的各實(shí)現(xiàn)包括被配置成類型安全執(zhí)行,而不是一定檢査傳入代碼的類型安全性或只編譯類型安全代碼的JIT編譯器。由此,可針對(duì)將導(dǎo)致JIT編譯器本身 違反安全定義(例如,類型安全定義)的請(qǐng)求保護(hù)根據(jù)本發(fā)明的各實(shí)現(xiàn)的JIT編譯器。例如,在一個(gè)實(shí)現(xiàn)中,JIT編譯器可用類型安全定義來(lái)配置,該類型安全 定義限制該JIT編譯器到達(dá)其自己的數(shù)據(jù)結(jié)構(gòu)或被定義為系統(tǒng)100運(yùn)行時(shí)環(huán)境 的一部分的數(shù)據(jù)結(jié)構(gòu)之外。例如,JIT編譯器可被配置成執(zhí)行一系列檢査以確 保只要執(zhí)行從一種類型到另一種類型的強(qiáng)制轉(zhuǎn)換就只執(zhí)行有效的強(qiáng)制轉(zhuǎn)換。類 似地,JIT編譯器可被配置成只要被要求從數(shù)組中讀取,該JIT編譯器就執(zhí)行 一個(gè)或多個(gè)邊界檢査以確保該JIT編譯器處于該數(shù)組的界限內(nèi)。例如,對(duì)于在 C編程語(yǔ)言中使用,JIT編譯器還可被配置成確保只要使用"共用體",該JIT編 譯器就對(duì)該共用體的適當(dāng)部分進(jìn)行讀寫(xiě)。此外,JIT編譯器可被配置成確保該 JIT編譯器在讀取或?qū)懭腩愋蜅?該JIT編譯器中的類型棧)時(shí)從不上溢或下溢o一般而言,JIT編譯器的類型棧是一般對(duì)于維持正確性等而言是重要的內(nèi) 部數(shù)據(jù)結(jié)構(gòu)。例如,中間語(yǔ)言代碼通常是其中JIT編譯器按序?qū)V械膶?duì)象操 作并按序?qū)⒔Y(jié)果放回到該棧中的基于棧的系統(tǒng)。根據(jù)本發(fā)明的各實(shí)現(xiàn)的JIT編 譯器由此被配置成模擬棧以確保該JIT編譯器如所期望地操作。例如,JIT編 譯器能夠在編譯中間語(yǔ)言代碼時(shí)執(zhí)行棧模擬。如果所模擬的棧顯著地偏離JIT 編譯器所得到的饋送,則該JIT編譯器可退出編譯或生成一錯(cuò)誤。這幫助JIT 編譯器確保其在規(guī)定的邊界內(nèi)操作,并由此受到保護(hù)以免違反一個(gè)或多個(gè)安全 規(guī)則。圖1A示出了其中正在執(zhí)行應(yīng)用程序(即,110)的計(jì)算機(jī)化系統(tǒng)100 (例 如,視頻游戲操作系統(tǒng))的概略示意圖。在一個(gè)實(shí)現(xiàn)中,應(yīng)用程序110是視頻 游戲應(yīng)用程序,但可以理解,應(yīng)用程序110可以是任何類型的可執(zhí)行程序代碼。 在任何情況下,圖1A還示出應(yīng)用程序110包括一個(gè)或多個(gè)可執(zhí)行指令集,諸 如包括指向中間語(yǔ)言("IL")代碼120的指針140的經(jīng)編譯的代碼135等。類 似地,圖1A示出應(yīng)用程序110包括經(jīng)編譯的代碼145,其包括指向中間語(yǔ)言 代碼125的指針150。中間語(yǔ)言代碼125進(jìn)而包括諸如代碼120、 125和130等在可被執(zhí)行前需要進(jìn)一步編譯的若干不同的組件或模塊。存在應(yīng)用程序110將或能在計(jì)算機(jī)系統(tǒng)100中執(zhí)行的任何數(shù)量的不同方 式。例如,用戶可將存儲(chǔ)設(shè)備加載到系統(tǒng)100被安裝在其上的另一設(shè)備上。該存儲(chǔ)設(shè)備可包括用于應(yīng)用程序110的二進(jìn)制可執(zhí)行代碼以及中間語(yǔ)言代碼115 形式的托管代碼。應(yīng)用程序110的可執(zhí)行代碼和中間語(yǔ)言代碼兩者然后可被加 載到計(jì)算機(jī)化系統(tǒng)100中。在其他情況下,諸如開(kāi)發(fā)者等用戶可通過(guò)網(wǎng)絡(luò)連接 來(lái)上傳包括中間語(yǔ)言代碼115的應(yīng)用程序110。在這種情況下,該用戶可能正 在執(zhí)行應(yīng)用程序110以測(cè)試新開(kāi)發(fā)的應(yīng)用程序(例如,110)。在任何情況下,圖1A還示出應(yīng)用程序IIO正以較低特權(quán)模式(例如,"用 戶"模式)執(zhí)行,而JIT編譯器105正以較高特權(quán)模式(例如,"內(nèi)核"模式)操 作。例如,圖1A示出應(yīng)用程序IIO正以具有用戶特權(quán)的用戶模式113操作, 而JIT編譯器105正以具有相應(yīng)內(nèi)核特權(quán)的內(nèi)核模式103操作。另外,圖1A 示出中間語(yǔ)言代碼115由具有內(nèi)核103級(jí)特權(quán)的一個(gè)或多個(gè)組件來(lái)訪問(wèn)。相反, 并且如將在此更全面理解的,可執(zhí)行代碼將只由以用戶113級(jí)特權(quán)操作的組件 來(lái)訪問(wèn)。因此,由于用于應(yīng)用程序110的運(yùn)行時(shí)環(huán)境在用戶113模式中執(zhí)行經(jīng)編譯 的指令135、 145中的每一個(gè),因此該運(yùn)行時(shí)環(huán)境將遇到指向中間語(yǔ)言代碼的 一個(gè)或多個(gè)指針中的任一個(gè)。例如,在執(zhí)行期間,用于應(yīng)用程序110的運(yùn)行時(shí) 環(huán)境遇到指向中間語(yǔ)言代碼120的指針140。因?yàn)橹羔?40引用只可在內(nèi)核103 模式中訪問(wèn)的代碼,所以運(yùn)行時(shí)環(huán)境將擺脫用戶模式并且系統(tǒng)IOO將切換到內(nèi) 核103模式。請(qǐng)求143然后將由以內(nèi)核103模式操作的安全組件155來(lái)處理。一般而言, 安全組件155可包括被配置成接收用戶模式113組件請(qǐng)求(例如,143)并且 然后確認(rèn)該請(qǐng)求是否是適當(dāng)?shù)娜魏螖?shù)量或類型的組件或模塊。這樣做是因?yàn)橛?戶模式113不可信并且因?yàn)閼?yīng)用程序110可表示或不表示(或以其他方式包括) 危險(xiǎn)或惡意代碼。因此,為了確保來(lái)自用戶模式113執(zhí)行的請(qǐng)求不會(huì)破壞系統(tǒng)100,安全組 件155可執(zhí)行任何數(shù)量或類型的確認(rèn)功能。例如,安全組件55可審閱消息143 以査找任何數(shù)量的句柄、標(biāo)記等。此外,安全組件155可審閱請(qǐng)求143以查找可用于損害系統(tǒng)100的應(yīng)用程序指令,諸如特定存儲(chǔ)器地址請(qǐng)求或可導(dǎo)致緩沖區(qū)超限的請(qǐng)求等。在確認(rèn)請(qǐng)求143后,安全組件155能夠以內(nèi)核模式啟動(dòng)JIT 編譯器105。一旦以內(nèi)核模式操作,JIT編譯器然后就可被饋送所請(qǐng)求的代碼(即,120) 并開(kāi)始編譯。例如,圖1A示出安全組件155執(zhí)行使得JIT編譯器105接收并 編譯中間語(yǔ)言代碼120的一個(gè)或多個(gè)請(qǐng)求147。在將代碼120編譯成可執(zhí)行二 進(jìn)制指令(即,經(jīng)編譯的代碼123)之后,圖1A還示出JIT編譯器105然后 可將代碼123傳遞到存儲(chǔ)器堆160中。如將參考圖1B更全面理解的,存儲(chǔ)器堆160跨越用戶模式113和內(nèi)核模 式103操作之間的邊界。實(shí)際上,存儲(chǔ)器堆160擔(dān)當(dāng)可由以內(nèi)核模式103和/ 或用戶模式113操作的組件來(lái)訪問(wèn)的跨許可/跨邊界存儲(chǔ)。 一旦完成編譯,系統(tǒng) 100就可切換回到用戶模式并繼續(xù)執(zhí)行應(yīng)用程序110。具體而言,以用戶模式 操作的應(yīng)用程序110能夠在經(jīng)編譯的代碼123 —旦可用時(shí)就拉取它,并開(kāi)始在 用戶模式113中執(zhí)行經(jīng)編譯的代碼123。因此,可以理解,存儲(chǔ)器堆160可用 于通過(guò)允許JIT編譯器105和用戶113在沒(méi)有直接通信的情況下以不同的特權(quán) 模式獨(dú)立地運(yùn)行來(lái)幫助維持這兩個(gè)安全層之間的安全邊界。圖1B示出了關(guān)于可如何實(shí)現(xiàn)或以其他方式維持JIT編譯器105和應(yīng)用程 序IIO之間的安全邊界的附加細(xì)節(jié)。具體而言,圖1B示出了其中JIT編譯器 105和應(yīng)用程序110對(duì)同一特定存儲(chǔ)器位置(雖然具有不同的許可集)操作的 一實(shí)現(xiàn)。具體而言,圖1B示出了其中同一存儲(chǔ)器位置可由具有一個(gè)地址空間 中的一個(gè)許可集的一個(gè)地址空間中的組件來(lái)訪問(wèn),并且可由具有不同的許可集 的另一個(gè)地址空間中的不同的組件來(lái)訪問(wèn)的一實(shí)現(xiàn)。例如,圖1B示出存儲(chǔ)器 位置160在具有讀/寫(xiě)許可的地址空間170,以及具有讀/執(zhí)行許可的地址空間 165中可用。一般而言,操作系統(tǒng)100的一個(gè)或多個(gè)內(nèi)核層103組件將維護(hù)用于任何給 定地址位置和相應(yīng)地址空間的存儲(chǔ)器頁(yè)表180。例如,圖1B示出存儲(chǔ)器頁(yè)表 180在系統(tǒng)100的內(nèi)核103層(即, 一個(gè)或多個(gè)內(nèi)核模式組件)中維護(hù)。存儲(chǔ) 器頁(yè)表180由內(nèi)核103模式組件來(lái)維護(hù)的一個(gè)原因是確保不可信應(yīng)用程序(即, 以用戶模式操作的)無(wú)法訪問(wèn)或以其他方式不適當(dāng)?shù)夭倏v該頁(yè)表。在任何情況下,圖IB示出頁(yè)表180將存儲(chǔ)器位置160和165與地址空間170、 175、 190和195相關(guān)。例如,存儲(chǔ)器位置160是共享存儲(chǔ)器堆,而存儲(chǔ)器位置165是加載應(yīng)用程序110以便執(zhí)行的位置。另外,頁(yè)表180映射存儲(chǔ)器位置160和165的訪問(wèn)許可,使得地址空間170和190分別具有對(duì)位置160或165的"讀/寫(xiě)"訪問(wèn)。類似地,頁(yè)表180將地址空間175或195對(duì)存儲(chǔ)器位置160和165的許可分別映射為"讀/執(zhí)行"。因此,當(dāng)安全組件155 (圖1A)從用戶模式113組件接收請(qǐng)求(例如,143)時(shí),安全組件155可將發(fā)起該請(qǐng)求(例如,143)的組件的地址空間與用于JIT編譯器輸出的地址空間(例如,123)相關(guān)。
如先前所提到的,系統(tǒng)100可強(qiáng)制實(shí)施許可和安全層邊界的方式中的一種是通過(guò)跨越所描述的安全/許可邊界的存儲(chǔ)器堆160。 一般而言,"存儲(chǔ)器堆"包括系統(tǒng)100在運(yùn)行時(shí)期間或在此之前留出的一組存儲(chǔ)器地址。在該特定示例中,系統(tǒng)100可分配和配置存儲(chǔ)器堆160以使得僅內(nèi)核層組件(例如,JIT編譯器105)可對(duì)存儲(chǔ)器堆160寫(xiě)入(例如,經(jīng)由頁(yè)表180),而用戶層組件只可從存儲(chǔ)器堆160讀取。結(jié)果,應(yīng)用程序110無(wú)法在存儲(chǔ)器堆160中執(zhí)行來(lái)自JIT編譯器105的任何經(jīng)編譯的代碼,而僅在地址空間175中必須這樣做。
因此,可以理解,"沙箱"可通過(guò)要求應(yīng)用程序的操作只處于用戶模式中并通過(guò)要求應(yīng)用程序和JIT編譯器從與不同的許可集相關(guān)聯(lián)的存儲(chǔ)器地址訪問(wèn)特定組件或數(shù)據(jù)結(jié)構(gòu)來(lái)設(shè)置。因此,圖1A-1B及相應(yīng)文本示出可用于以安全的方式訪問(wèn)和/或執(zhí)行包括托管代碼在內(nèi)的實(shí)際上任何類型的可執(zhí)行代碼的多個(gè)不同的體系結(jié)構(gòu)組件。具體而言,圖1A-1B及相應(yīng)文本示出應(yīng)用程序可如何在用戶113模式中執(zhí)行并訪問(wèn)只具有對(duì)JIT編譯的代碼的讀或讀/執(zhí)行許可的存儲(chǔ)器堆。另外,各附圖及相應(yīng)文本示出應(yīng)用程序可如何在具有對(duì)存儲(chǔ)器堆160的讀/寫(xiě)許可的不同的地址空間170中調(diào)用一個(gè)或多個(gè)內(nèi)核層組件并可由此編譯托管代碼并將其傳遞給存儲(chǔ)器堆160而不執(zhí)行它。
如先前所提到的,這種類型的分布式地址空間配置可為程序執(zhí)行和開(kāi)發(fā)提供多個(gè)不同的益處。例如,最初,應(yīng)用程序開(kāi)發(fā)者可編寫(xiě)實(shí)際上任何類型的代碼而不擔(dān)心安全考慮事項(xiàng)(例如,類型安全)。另外,操作系統(tǒng)開(kāi)發(fā)者無(wú)需將消耗性資源花費(fèi)在開(kāi)發(fā)將強(qiáng)制所有執(zhí)行的程序代碼是安全的(例如,類型安全)的運(yùn)行時(shí)驗(yàn)證代碼上。
除了上述內(nèi)容之外,本發(fā)明的各實(shí)現(xiàn)還可以按照具有用于實(shí)現(xiàn)特定結(jié)果的方法中的一個(gè)或多個(gè)動(dòng)作的流程圖來(lái)描述。具體而言,圖2和3及相應(yīng)文本示出了用于執(zhí)行托管代碼以使得能夠在不威脅或損害安全性的情況下執(zhí)行安全
和不安全的應(yīng)用程序代碼的一個(gè)或多個(gè)動(dòng)作的流程圖。圖2和3所示的方法在以下參考圖1A-1B的組件和圖來(lái)描述。
因此,圖2示出從客戶計(jì)算機(jī)系統(tǒng)的觀點(diǎn)來(lái)看的方法可包括在第一地址空間中執(zhí)行應(yīng)用程序的動(dòng)作200.動(dòng)作200包括在存儲(chǔ)器位置的第一地址空間中執(zhí)行應(yīng)用程序。例如,圖1B示出應(yīng)用程序110正從具有用于訪問(wèn)存儲(chǔ)器位置160的讀/執(zhí)行許可的地址空間175 (SP, JIT編譯的代碼將被放置并由此被指定為讀/執(zhí)行的地方)執(zhí)行。
圖2還示出該方法可包括從應(yīng)用程序接收對(duì)中間語(yǔ)言指令的請(qǐng)求的動(dòng)作210。動(dòng)作210可包括從應(yīng)用程序接收編譯一個(gè)或多個(gè)中間語(yǔ)言指令集的一個(gè)或多個(gè)請(qǐng)求。例如,用于應(yīng)用程序110的運(yùn)行時(shí)環(huán)境遇到指向只可在內(nèi)核103模式中訪問(wèn)的中間語(yǔ)言代碼120的指針140.由此,該運(yùn)行時(shí)環(huán)境將該指針120作為消息143傳遞給安全組件155,該組件在內(nèi)核模式中處理該請(qǐng)求。
另外,圖2示出該方法可包括在第二地址空間中編譯中間語(yǔ)言指令的動(dòng)作220。動(dòng)作220包括使用在第二地址空間中運(yùn)行的JIT編譯器來(lái)將一個(gè)或多個(gè)中間語(yǔ)言指令集編譯成新編譯的代碼。例如,在確認(rèn)請(qǐng)求143后,安全組件155準(zhǔn)備并執(zhí)行將所請(qǐng)求的中間語(yǔ)言代碼傳遞給JIT編譯器105的一個(gè)或多個(gè)請(qǐng)求147。 JIT編譯器105然后在第二地址空間170 (在本圖示中具備對(duì)共享存儲(chǔ)器堆160的讀/寫(xiě)許可)中編譯中間語(yǔ)言代碼120。
此外,圖2示出該方法可包括將經(jīng)編譯的代碼傳遞給共享存儲(chǔ)器堆的動(dòng)作230。動(dòng)作230包括將新編譯的代碼傳遞給共享存儲(chǔ)器堆,其中應(yīng)用程序可將該新編譯的代碼取到第一地址空間中。例如,圖1A和1B示出JIT編譯器105以及應(yīng)用程序110可訪問(wèn)存儲(chǔ)器堆160.具體而言,JIT編譯器105可對(duì)存儲(chǔ)器堆160寫(xiě)入(但不在其中執(zhí)行),而應(yīng)用程序110只可從存儲(chǔ)器堆160讀取和執(zhí)行。因此,當(dāng)JIT編譯器105編譯并創(chuàng)建代碼123時(shí),用于應(yīng)用程序110的運(yùn)行時(shí)環(huán)境可將經(jīng)編譯的代碼123取到地址空間175中,并在用戶模式中執(zhí)行該代碼。
除了上述內(nèi)容之外,圖3示出根據(jù)本發(fā)明的一實(shí)現(xiàn)的、以使用JIT編譯而同時(shí)避免安全性違反的方式生成用于計(jì)算機(jī)系統(tǒng)的計(jì)算機(jī)可執(zhí)行程序代碼的
方法可包括接收可執(zhí)行代碼和將要編譯的代碼的動(dòng)作300.動(dòng)作300包括接收包括可執(zhí)行代碼和將要編譯的代碼的程序代碼。例如,操作系統(tǒng)100接收一個(gè)或多個(gè)存儲(chǔ)介質(zhì)和/或接收應(yīng)用程序110的基于網(wǎng)絡(luò)的上傳。應(yīng)用程序110包括可執(zhí)行程序代碼以及由一個(gè)或多個(gè)內(nèi)核層103組件來(lái)單獨(dú)訪問(wèn)的中間語(yǔ)言代碼115。
圖3還示出該方法可包括在較低特權(quán)模式中執(zhí)行可執(zhí)行代碼的動(dòng)作310.動(dòng)作310包括在較低特權(quán)模式中并在第一地址空間中執(zhí)行可執(zhí)行代碼。例如,圖1A示出應(yīng)用程序110的可執(zhí)行部分僅在用戶模式113中訪問(wèn)或以其他方式執(zhí)行,而中間語(yǔ)言代碼115只由內(nèi)核模式組件來(lái)訪問(wèn)。
另外,圖3示出該方法可包括接收指向?qū)⒁幾g的代碼的指針的動(dòng)作310。動(dòng)作310包括接收可執(zhí)行代碼中指向?qū)⒁幾g的至少某些代碼的一個(gè)或多個(gè)指針。例如,圖1A-1B示出以用戶模式113并在/從地址空間175中操作的應(yīng)用程序110包括經(jīng)編譯的代碼135、指向中間語(yǔ)言代碼120的指針140、經(jīng)編譯的代碼145以及指向中間語(yǔ)言代碼125的指針150。當(dāng)在用戶模式中執(zhí)行應(yīng)用程序110時(shí),將進(jìn)而標(biāo)識(shí)指針140和/或150。
此外,圖3示出該方法可包括切換到較高特權(quán)模式的動(dòng)作330.例如,用于應(yīng)用程序110的運(yùn)行時(shí)環(huán)境在執(zhí)行期間標(biāo)識(shí)指針140,并標(biāo)識(shí)將需要啟動(dòng)JIT編譯器105.因?yàn)镴IT編譯器105將需要以內(nèi)核模式操作,所以系統(tǒng)100暫時(shí)暫停執(zhí)行應(yīng)用程序IIO,從用戶模式切換到內(nèi)核模式并且然后啟動(dòng)JIT編譯器105作為內(nèi)核模式103組件。然后將包括指針140的消息143傳遞給內(nèi)核模式103安全組件155。以內(nèi)核模式操作的安全組件155然后評(píng)估該請(qǐng)求以確保該請(qǐng)求143是正確地形成的和/或包括適當(dāng)?shù)木浔?、安全?biāo)示符等。
此外,圖3示出該方法可包括在較高特權(quán)模式中編譯所請(qǐng)求的代碼的動(dòng)作340。動(dòng)作340包括使用以較高特權(quán)模式操作的編譯器來(lái)在不同的地址空間中編譯所請(qǐng)求的代碼。例如,圖1A和1B示出在較高特權(quán)內(nèi)核層103中操作的JIT編譯器105可在一個(gè)地址空間(地址空間170)中編譯代碼120,并且還將經(jīng)編譯的代碼123傳遞給該JIT編譯器具有讀/寫(xiě)訪問(wèn)的存儲(chǔ)器堆160。在切換 回到用戶模式后,應(yīng)用程序110然后可訪問(wèn)經(jīng)編譯的代碼123并從具有對(duì)存儲(chǔ) 器堆160的讀/執(zhí)行許可的不同的地址空間(地址空間175)執(zhí)行該代碼。
由此,圖1A-2及相應(yīng)文本提供了可用于在不犧牲重要的安全保證的情況 下執(zhí)行包括托管代碼在內(nèi)的不可信代碼的多個(gè)組件、模塊和機(jī)制。如先前所提 到的,這可至少部分地通過(guò)在用于同一程序的單獨(dú)地址空間中分離中間語(yǔ)言代 碼的編譯和二進(jìn)制代碼的執(zhí)行來(lái)實(shí)現(xiàn)。另外,這可用編譯中間代碼并將所編譯 的代碼傳遞到共享存儲(chǔ)器堆中的類型安全JIT編譯器來(lái)實(shí)現(xiàn)。類型安全JIT編 譯器被配置成雖然它可接受并編譯不是類型安全的代碼,但該JIT編譯器本身 被阻止在特定規(guī)定的類型安全邊界之外操作。此外,這可通過(guò)確保可執(zhí)行代碼 僅由以用戶模式操作的組件來(lái)訪問(wèn),并且中間語(yǔ)言代碼僅由以內(nèi)核模式操作的 組件在讀/寫(xiě)地址空間中訪問(wèn)來(lái)實(shí)現(xiàn)。
本發(fā)明的各實(shí)施例可以包括含有各種計(jì)算機(jī)硬件的專用或通用計(jì)算機(jī),這 將在以下做出進(jìn)一步討論。本發(fā)明的范圍內(nèi)的各實(shí)施例還包括用于承載或其上 儲(chǔ)存有計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)的計(jì)算機(jī)可讀介質(zhì)。這樣的計(jì)算機(jī)可讀介 質(zhì)可以是可由通用或?qū)S糜?jì)算機(jī)訪問(wèn)的任何可用介質(zhì)。
作為示例而非限制,這樣的計(jì)算機(jī)可讀介質(zhì)可包括RAM、 ROM、 EEPROM、 CD-ROM或其它光盤(pán)存儲(chǔ)、磁盤(pán)存儲(chǔ)或其它磁存儲(chǔ)設(shè)備、或可用 于承載或存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置且可由 通用或?qū)S糜?jì)算機(jī)訪問(wèn)的任何其它介質(zhì)。當(dāng)信息通過(guò)網(wǎng)絡(luò)或另一通信連接(硬 連線、無(wú)線或硬連線或無(wú)線的組合)傳輸或提供給計(jì)算機(jī)時(shí),該計(jì)算機(jī)將該連 接適當(dāng)?shù)匾暈橛?jì)算機(jī)可讀介質(zhì)。因此,任何這樣的連接被適當(dāng)?shù)胤Q為計(jì)算機(jī)可 讀介質(zhì)。以上的組合也應(yīng)包括在計(jì)算機(jī)可讀介質(zhì)的范圍之內(nèi)。
計(jì)算機(jī)可執(zhí)行指令包括例如,使通用計(jì)算機(jī)、專用計(jì)算機(jī)、或?qū)S锰幚碓O(shè)
備執(zhí)行某一功能或某組功能的指令和數(shù)據(jù)。盡管用對(duì)結(jié)構(gòu)特征和/或方法動(dòng)作專 用的語(yǔ)言描述了本主題,但可以理解,所附權(quán)利要求書(shū)中定義的主題不必限于 上述具體特征或動(dòng)作。相反,上述具體特征和動(dòng)作是作為實(shí)現(xiàn)權(quán)利要求的示例 形式公開(kāi)的。
本發(fā)明可具體化為其它具體形式而不背離其精神或本質(zhì)特征。所述實(shí)施例在所有方面都應(yīng)被認(rèn)為僅是說(shuō)明性而非限制性的。從而,本發(fā)明的范圍由所附 權(quán)利要求書(shū)而非前述描述指示。落入權(quán)利要求書(shū)的等效方式的含義和范圍內(nèi)的 所有改變應(yīng)被權(quán)利要求書(shū)的范圍涵蓋。
權(quán)利要求
1.一種在計(jì)算機(jī)化環(huán)境中的執(zhí)行托管代碼以使得能夠以不威脅或以其他方式損害系統(tǒng)安全性的方式編譯并執(zhí)行不可信程序代碼的方法,所述計(jì)算機(jī)化環(huán)境包括存儲(chǔ)器、以及JIT編譯器和加載在所述存儲(chǔ)器中的一個(gè)或多個(gè)應(yīng)用程序,所述方法包括從被設(shè)置成具有用于訪問(wèn)共享存儲(chǔ)器堆的第一許可集的第一地址空間執(zhí)行應(yīng)用程序;從所述應(yīng)用程序接收編譯一個(gè)或多個(gè)中間語(yǔ)言指令集的一個(gè)或多個(gè)請(qǐng)求;使用在具有用于訪問(wèn)所述共享存儲(chǔ)器堆的第二許可集的第二地址空間中運(yùn)行的JIT編譯器來(lái)將所述一個(gè)或多個(gè)中間語(yǔ)言指令集編譯成新編譯的代碼;以及將所述新編譯的代碼傳遞給所述共享存儲(chǔ)器堆,其中所述應(yīng)用程序可取出所述新編譯的代碼并從所述第一地址空間執(zhí)行所述新編譯的代碼。
2. 如權(quán)利要求l所述的方法,其特征在于,還包括在接收到所述新編 譯的代碼已被傳遞給所述共享存儲(chǔ)器堆的指示后,從內(nèi)核模式切換到用戶模 式操作級(jí)的動(dòng)作。
3. 如權(quán)利要求2所述的方法,其特征在于,還包括所述應(yīng)用程序取出 經(jīng)編譯的代碼并從所述第一地址空間執(zhí)行所述經(jīng)編譯的代碼的動(dòng)作。
4. 如權(quán)利要求l所述的方法,其特征在于,所述第一地址空間被配置 成具有對(duì)于訪問(wèn)所述共享存儲(chǔ)器堆的讀/執(zhí)行許可,使得沒(méi)有在所述第一地址空間中操作的組件能夠?qū)λ龉蚕泶鎯?chǔ)器堆寫(xiě)入。
5. 如權(quán)利要求1所述的方法,其特征在于,所述第二地址空間被配置 成以讀/寫(xiě)許可訪問(wèn)所述存儲(chǔ)器堆,使得沒(méi)有在所述第二地址空間中操作的 組件能夠在所述存儲(chǔ)器堆中執(zhí)行代碼。
6. 如權(quán)利要求l所述的方法,其特征在于,所述JIT編譯器以較高特 權(quán)模式操作并且所述應(yīng)用程序以較低特權(quán)模式運(yùn)行。
7. 如權(quán)利要求l所述的方法,其特征在于,所述JIT編譯器被約束在 一個(gè)或多個(gè)類型安全約束中執(zhí)行,但被配置成接受并編譯不是類型安全的中 間語(yǔ)言語(yǔ)言代碼。
8. 如權(quán)利要求7所述的方法,其特征在于,所述JIT編譯器執(zhí)行以下 動(dòng)作接收?qǐng)?zhí)行違反對(duì)所述JIT編譯器的安全約束的功能的一個(gè)或多個(gè)請(qǐng) 求;以及拒絕執(zhí)行所述功能的所述一個(gè)或多個(gè)請(qǐng)求,或停止編譯所述一個(gè)或 多個(gè)中間語(yǔ)言指令集。
9. 如權(quán)利要求1所述的方法,其特征在于,還包括在從所述應(yīng)用程序 接收到所述一個(gè)或多個(gè)請(qǐng)求后,激活內(nèi)核模式操作級(jí)。
10. 如權(quán)利要求9所述的方法,其特征在于,所述激活內(nèi)核模式操作級(jí) 的動(dòng)作包括啟動(dòng)內(nèi)核模式安全組件的動(dòng)作。
11. 如權(quán)利要求10所述的方法,其特征在于,所述來(lái)自應(yīng)用程序的一 個(gè)或多個(gè)請(qǐng)求由內(nèi)核模式安全組件來(lái)接收。
12. 如權(quán)利要求11所述的方法,其特征在于,還包括所述內(nèi)核模式安 全組件確認(rèn)所述來(lái)自應(yīng)用程序的一個(gè)或多個(gè)請(qǐng)求的動(dòng)作。
13. 如權(quán)利要求12所述的方法,其特征在于,所述確認(rèn)一個(gè)或多個(gè)請(qǐng) 求的動(dòng)作包括確定所述一個(gè)或多個(gè)請(qǐng)求中所包括的句柄是否有效的動(dòng)作。
14. 一種在計(jì)算機(jī)化環(huán)境中的以使用JIT編譯而同時(shí)避免安全性違反的 方式生成計(jì)算機(jī)可執(zhí)行程序代碼的方法,所述計(jì)算機(jī)化環(huán)境包括存儲(chǔ)、JIT編譯器以及加載在存儲(chǔ)器中的一個(gè)或多個(gè)請(qǐng)求應(yīng)用程序,所述方法包括接收包括可執(zhí)行代碼和將要編譯的代碼的應(yīng)用程序代碼; 在較低特權(quán)模式中并在第一地址空間中執(zhí)行所述可執(zhí)行代碼; 標(biāo)識(shí)所述可執(zhí)行代碼中指向?qū)⒁幾g的至少某些代碼的一個(gè)或多個(gè) 指針;切換到較高特權(quán)模式;以及使用以所述較高特權(quán)模式操作的編譯器來(lái)在不同的地址空間中編譯 所述至少某些代碼。
15. 如權(quán)利要求14所述的方法,其特征在于,所述應(yīng)用程序代碼包括 視頻游戲應(yīng)用程序中從所述存儲(chǔ)接收到視頻游戲操作系統(tǒng)中的部分。
16. 如權(quán)利要求14所述的方法,其特征在于,所述編譯器是被配置成 只處理類型安全請(qǐng)求,但卻被配置成編譯類型安全或非類型安全中間語(yǔ)言代 碼的類型安全JIT編譯器。
17. 如權(quán)利要求14所述的方法,其特征在于,所述較高特權(quán)模式是內(nèi) 核模式操作級(jí),而所述較低特權(quán)模式是用戶操作級(jí)。
18. 如權(quán)利要求14所述的方法,其特征在于,所述第一地址空間被配 置成以讀/執(zhí)行許可來(lái)訪問(wèn)存儲(chǔ)器堆,而所述第二地址空間被配置成以讀/寫(xiě) 許可來(lái)訪問(wèn)所述存儲(chǔ)器堆。
19. 如權(quán)利要求14所述的方法,其特征在于,還包括以下動(dòng)作 在標(biāo)識(shí)所述至少某些代碼已被編譯后切換到所述較低特權(quán)模式;以及在所述第一地址空間中執(zhí)行經(jīng)編譯的至少某些代碼。
20. —種在計(jì)算機(jī)化環(huán)境中的計(jì)算機(jī)程序存儲(chǔ)產(chǎn)品,所述計(jì)算機(jī)化環(huán)境 包括存儲(chǔ)器、JIT編譯器以及加載在所述存儲(chǔ)器中的一個(gè)或多個(gè)請(qǐng)求應(yīng)用程 序,所述計(jì)算機(jī)程序存儲(chǔ)產(chǎn)品具有存儲(chǔ)在其上的、在被執(zhí)行時(shí)使得一個(gè)或多 個(gè)處理器執(zhí)行一種方法的計(jì)算機(jī)可執(zhí)行指令,所述方法包括從被設(shè)置成具有用于訪問(wèn)共享存儲(chǔ)器堆的第一許可集的第一地址空 間執(zhí)行應(yīng)用程序;從所述應(yīng)用程序接收編譯一個(gè)或多個(gè)中間語(yǔ)言指令集的一個(gè)或多個(gè) 請(qǐng)求;使用在具有用于訪問(wèn)所述共享存儲(chǔ)器堆的第二許可集的第二地址空 間中運(yùn)行的JIT編譯器來(lái)將所述一個(gè)或多個(gè)中間語(yǔ)言指令集編譯成新編譯 的代碼;以及將所述新編譯的代碼傳遞給所述共享存儲(chǔ)器堆,其中所述應(yīng)用程 序可取出所述新編譯的代碼并從所述第一地址空間執(zhí)行所述新編譯的 代碼。
全文摘要
實(shí)現(xiàn)托管代碼的不安全的應(yīng)用程序能夠以安全的方式來(lái)執(zhí)行。具體而言,操作系統(tǒng)可被配置成在用戶模式中執(zhí)行應(yīng)用程序,但通過(guò)以內(nèi)核模式操作的類型安全JIT編譯器來(lái)處理托管代碼編譯。操作系統(tǒng)還可將單個(gè)存儲(chǔ)器位置指定為通過(guò)具有不同許可集的多個(gè)地址空間來(lái)訪問(wèn)。以用戶模式操作的應(yīng)用程序能夠在讀/執(zhí)行地址空間中執(zhí)行,而JIT編譯器在讀/寫(xiě)地址空間中操作。當(dāng)遇到指向中間語(yǔ)言代碼的一個(gè)或多個(gè)指針時(shí),應(yīng)用程序運(yùn)行時(shí)環(huán)境可將一個(gè)或多個(gè)編譯請(qǐng)求發(fā)送到內(nèi)核模式安全組件,該組件確認(rèn)這些請(qǐng)求。如果得到確認(rèn),則JIT編譯器將編譯所請(qǐng)求的中間語(yǔ)言代碼,并且應(yīng)用程序可從共享存儲(chǔ)器堆訪問(wèn)所編譯的代碼。
文檔編號(hào)G06F9/45GK101553784SQ200780043929
公開(kāi)日2009年10月7日 申請(qǐng)日期2007年11月27日 優(yōu)先權(quán)日2006年11月28日
發(fā)明者D·C·賴頓, R·S·烏諾基 申請(qǐng)人:微軟公司