欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種虛擬機(jī)管理器的客戶操作系統(tǒng)內(nèi)核代碼動(dòng)態(tài)替換方法

文檔序號(hào):6484238閱讀:216來源:國(guó)知局
專利名稱:一種虛擬機(jī)管理器的客戶操作系統(tǒng)內(nèi)核代碼動(dòng)態(tài)替換方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種虛擬化技術(shù),特別是涉及一種虛擬機(jī)管理器的客戶操作系統(tǒng)內(nèi)核代碼 動(dòng)態(tài)替換方法,屬于計(jì)算機(jī)軟件技術(shù)領(lǐng)域。
背景技術(shù)
虛擬機(jī)(Virtual Machine, VM)技術(shù)源于上世紀(jì)60年代,其核心思想是在一臺(tái)物 理主機(jī)上虛擬出多個(gè)虛擬計(jì)算機(jī)(VM),其上能同時(shí)運(yùn)行多個(gè)獨(dú)立的操作系統(tǒng),這些客 戶操作系統(tǒng)(Guest OS)通過虛擬機(jī)管理器(Virtual Machine Monitor, VMM)訪問實(shí)際的 物理資源。當(dāng)前存在幾種不同的虛擬技術(shù) 一種是半虛擬化技術(shù)(Paravirtualization),需要 對(duì)Guest OS的源代碼做一些修改;另一種是全虛擬化技術(shù)(Full Virtualization), Guest OS 無需任何修改。
我們知道,半虛擬化通過修改Guest OS源代碼可以獲得很好的性能,而全虛擬化技術(shù) 則是以降低性能來提高兼容性(無需修改Guest OS的源代碼)。近來新處理器的開發(fā)縮短 了這方面的差距,如Intel VT(虛擬技術(shù),Virtualization Technology)和AMD SVM(安全虛擬 機(jī),Secure Virtual Machine)芯片從硬件上支持了虛擬技術(shù),試圖取代半虛擬化技術(shù)。
以Intel VT為例,它增加了在虛擬狀態(tài)下的兩種處理器工作模式Root操作模式和 Non-root操作模式。VMM運(yùn)行在Root操作模式下,Guest OS運(yùn)行在Non-root操作模式下。 開始時(shí)通過執(zhí)行VMXON指令進(jìn)入虛擬化狀態(tài),處理器運(yùn)行在Root操作模式下,執(zhí)行VMM 的代碼,當(dāng)VMM要運(yùn)行一個(gè)VM時(shí),執(zhí)行VMLAUNCH指令使處理器發(fā)生VM entry, 進(jìn)入Non-root操作模式,運(yùn)行Guest OS指令。此時(shí),若遇到敏感指令,處理器會(huì)發(fā)生 VM-VMM切換,回到Root操作模式,由VMM進(jìn)行處理。處理完成后,通過VMRESUME 指令,再次發(fā)生VM entry,進(jìn)入Non-root操作模式繼續(xù)運(yùn)行Guest OS的指令。硬件輔助 虛擬化技術(shù)很好地支持了全虛擬化(不修改Guest OS源碼)并降低了 VMM的實(shí)現(xiàn)難度(不 需要?jiǎng)討B(tài)二進(jìn)制翻譯)。
但是加入了硬件輔助的全虛擬化性能仍然和半虛擬化技術(shù)有一定差距。其主要原因是 Guest OS仍然有過多的VM-VMM切換,頻繁從Non-root模式切換到Root模式,使得虛 擬化的開銷太大。經(jīng)過測(cè)試,每次VM-VMM切換導(dǎo)致的系統(tǒng)開銷達(dá)到幾千個(gè)CPU時(shí)鐘周期。特別是在客戶虛擬機(jī)存在大量頁表操作和I/O操作的時(shí)候,會(huì)產(chǎn)生大量的VM-VMM 切換,性能下降尤其明顯。
半虛擬化技術(shù)可以達(dá)到很好的性能,它可以通過修改Guest OS的源代碼來避免 VM-VMM切換。但是因?yàn)槠湟薷目蛻舨僮飨到y(tǒng)的源代碼,使得它無法運(yùn)行那些流行的 非開源操作系統(tǒng),比如Window系列操作系統(tǒng)。而且由于用戶需要獲取和安裝修改過的客 戶操作系統(tǒng),使得這個(gè)安裝和配置過程過于繁瑣,不利于在非專業(yè)用戶中普及。
全虛擬化技術(shù)雖然無需修改客戶操作系統(tǒng),但是由于VM-VMM切換的大量存在,使 得全虛擬化的性能指標(biāo)不甚理想。性能指標(biāo)的限制,使得全虛擬化技術(shù)在性能要求較高的 場(chǎng)合下難以發(fā)揮作用。比如在數(shù)據(jù)中心和網(wǎng)絡(luò)服務(wù)中,全虛擬化技術(shù)帶來的性能損失是無 法接受的。
一個(gè)合理的做法就是將半虛擬化和全虛擬化技術(shù)結(jié)合起來,在不修改Guest OS內(nèi)核 源代碼的前提下,在二進(jìn)制代碼層面上,動(dòng)態(tài)替換Guest OS的內(nèi)核代碼,達(dá)到和半虛擬化 方法相似的效果。要達(dá)到這個(gè)目標(biāo),有兩件事情需要完成 一是如何動(dòng)態(tài)替換Guest的內(nèi) 核代碼,二是替換成怎樣的代碼。本發(fā)明主要是為解決第一個(gè)問題而提出。

發(fā)明內(nèi)容
本發(fā)明的目的是要在全虛擬化技術(shù)的基礎(chǔ)之上,提出一種虛擬機(jī)管理器的客戶操作系 統(tǒng)內(nèi)核代碼動(dòng)態(tài)替換方法,以解決全虛擬化方法無法修改Guest OS的問題。此項(xiàng)發(fā)明使得 將半虛擬化方法的優(yōu)勢(shì)融入全虛擬化技術(shù)之中成為可能,可以在二進(jìn)制層面對(duì)Guest OS內(nèi) 核代碼做動(dòng)態(tài)替換,從而避免了半虛擬化方法必須修改Guest OS源代碼的局限。
針對(duì)以上問題,本發(fā)明提出了虛擬機(jī)Guest OS的內(nèi)核代碼動(dòng)態(tài)替換方法。虛擬機(jī)Guest OS內(nèi)核代碼動(dòng)態(tài)替換允許VMM在虛擬機(jī)運(yùn)行時(shí),動(dòng)態(tài)地替換虛擬機(jī)Guest OS的內(nèi)核代 碼。從而能夠在虛擬機(jī)正常和正確運(yùn)行的情況下,改變虛擬機(jī)代碼執(zhí)行路徑。
虛擬機(jī)內(nèi)核代碼動(dòng)態(tài)替換方案主要涉及如何將替換代碼植入Guest OS之中,使得新的 代碼片段能夠替代原有的內(nèi)核代碼片段,即代碼植入機(jī)制。VMWare虛擬機(jī)在用戶態(tài)下, 可以動(dòng)態(tài)地翻譯和執(zhí)行Guest OS代碼參考Vmware white paper 2008: Performance of VMwareVMI第l頁,不同的是我們的內(nèi)核代碼植入機(jī)制是建立在硬件虛擬化基礎(chǔ)之 上的,并不改變內(nèi)核代碼的執(zhí)行環(huán)境,并且我們提供的機(jī)制能夠?yàn)橛脩籼峁┐a替換的接 口。用戶可以利用這個(gè)機(jī)制,將Guest OS中的代碼片段替換成任何自己想要的代碼。代碼 植入的主要流程如圖1所示。我們首先在虛擬機(jī)管理器(VMM)中增加了一個(gè)代碼替換引擎,它可以打開或關(guān)閉代 碼替換機(jī)制、收集需要替換的代碼信息,同時(shí)也可以修改客戶操作系統(tǒng)(Guest OS)的頁 表,輔助完成代碼的植入。然后我們又在宿主操作系統(tǒng)(Host OS)中增加了一個(gè)代碼植入 守護(hù)進(jìn)程CID (Code Implantation Daemon),這是一個(gè)用于完成代碼分析和植入替換代碼 的用戶態(tài)進(jìn)程。CID進(jìn)程通過IOCTL等系統(tǒng)調(diào)用與VMM進(jìn)行交互,以取得所需替換代碼 的信息。隨后CID將對(duì)需要替換的代碼替換成用戶指定的代碼。我們?cè)贑ID的進(jìn)程空間分 配一段物理內(nèi)存區(qū)以容納植入的替換代碼,然后通過代碼替換引擎修改Guest OS的頁表, 將這段內(nèi)存映射到Guest OS的內(nèi)核進(jìn)程空間。CID還會(huì)分析需要替換代碼處的函數(shù)調(diào)用堆 棧,從而能改變Guest OS的函數(shù)調(diào)用路徑,使得我們植入的代碼可以被執(zhí)行。 本發(fā)明的技術(shù)方案為-
一種虛擬機(jī)管理器的客戶操作系統(tǒng)內(nèi)核代碼動(dòng)態(tài)替換方法,其步驟為
1) 在宿主操作系統(tǒng)中加入一代碼植入守護(hù)進(jìn)程CID;
2) 在CID的進(jìn)程空間分配一植入代碼空間以容納植入的替換代碼,然后全虛擬化虛擬 機(jī)管理器將植入代碼空間映射到Guest OS的內(nèi)核進(jìn)程空間;
3) 全虛擬化虛擬機(jī)管理器根據(jù)CID的輸入指令搜集所需替換的代碼片斷,并將統(tǒng)計(jì)結(jié) 果返回給CID進(jìn)程;所述統(tǒng)計(jì)結(jié)果包括所需替換代碼的位置、替換代碼處的二進(jìn) 制代碼片段信息;
4) CID根據(jù)所需替換代碼的二進(jìn)制代碼片斷類型,為其生成或指定一段替換代碼;
5) 將生成或指定的替換代碼寫入植入代碼空間,并在CID進(jìn)程中做相應(yīng)的記錄;同時(shí) 根據(jù)所需替換代碼在Guest OS中的代碼地址,獲取所需替換代碼所處的調(diào)用堆棧;
6) CID通過調(diào)用堆棧信息,找到所需替換代碼在Guest OS中的調(diào)用點(diǎn),全虛擬化虛擬 機(jī)管理器將調(diào)用點(diǎn)的跳轉(zhuǎn)地址改為所生成或指定的替換代碼的偏移地址。
所述搜集所需替換的代碼片斷的方法為在全虛擬化虛擬機(jī)管理器中,按照陷入代碼 在GuestOS中的位置,對(duì)其做統(tǒng)計(jì)計(jì)數(shù),找出導(dǎo)致大量VM-VMM切換的代碼片段。
所述方法的步驟2)中,通過全虛擬化虛擬機(jī)管理器修改Guest OS的頁表,將植入代 碼空間映射到Guest OS的內(nèi)核進(jìn)程空間。
所述CID記錄所有替換代碼的替換,以及替換代碼調(diào)用點(diǎn)的修改,以便將虛擬機(jī)切換 回原有的模式。
所述將生成或指定的替換代碼寫入植入代碼空間時(shí),首先判斷所述植入代碼空間大小是否滿足所述生成或指定的替換代碼;如果滿足則直接寫入;如果不滿足則以函數(shù)為基本 單位,對(duì)所需替換代碼所在的函數(shù)體取出,并用所述生成或指定的替換代碼替換原有的代 碼片段,得到一個(gè)新的函數(shù)體。
所述方法中,如果所述植入代碼空間滿足所述生成或指定的替換代碼,則所述CID記 錄對(duì)應(yīng)的所需替換代碼的代碼片段位置、長(zhǎng)度和內(nèi)容;如果所述植入代碼空間小于所述生 成或指定的替換代碼,則所述CID記錄對(duì)應(yīng)的函數(shù)替換,以及函數(shù)調(diào)用點(diǎn)的修改。
所述植入代碼空間由全虛擬化虛擬機(jī)管理器監(jiān)控,當(dāng)VMM發(fā)現(xiàn)Guest OS使用了所述 植入代碼空間,由VMM取消代碼植入,并嘗試尋找新的空閑空間做再次植入。
本發(fā)明的過程有以下幾點(diǎn)需要說明
1. 植入代碼必須映射到Guest OS中不會(huì)使用的地址空間
這是為了保證植入代碼和Guest OS的完整性。如果Guest OS修改了植入代碼,或者植 入代碼映射時(shí)破壞了 Guest OS原有的數(shù)據(jù),都會(huì)導(dǎo)致Guest OS無法正常運(yùn)行。我們采取 的方法是,在Guest OS中預(yù)留出一段空閑的內(nèi)核地址空間,植入的代碼放在內(nèi)核地址空間 內(nèi)。為此,需要根據(jù)具體Guest OS的特點(diǎn),在Guest OS的內(nèi)核地址空間中找一塊Guest OS 不經(jīng)常訪問的空間,由VMM監(jiān)控以保證Guest OS只會(huì)按我們的安排訪問這段空間。當(dāng) VMM發(fā)現(xiàn)Guest OS違背我們的安排時(shí),由VMM取消代碼植入,并嘗試尋找新的空閑空 間做再次植入。比如,對(duì)于Guest OS為32位Linux系統(tǒng)來說,進(jìn)程虛擬地址的范圍是0 到4G,其中分配給內(nèi)核地址空間的范圍是3G至4G。而對(duì)于低于896M的物理內(nèi)存來說, Linux采用"直接映射"的方式。也就是將0至896M的物理內(nèi)存映射到3G至3G+896M 的虛擬地址空間,我們將這個(gè)空間稱作"內(nèi)核直接映射空間"。如果我們給Guest OS配置 的物理內(nèi)存小于896M,則Linux會(huì)在"內(nèi)核直接映射空間"中留出一個(gè)空洞,而這個(gè)空 洞即為我們要尋找的GuestOS不經(jīng)常訪問的空間。我們可以將代碼植入到此空間中,以使 Guest OS能夠執(zhí)行所植入的代碼。
2. 代碼替換可以以函數(shù)為替換的基本單位
如果生成的新的替換代碼和舊的代碼片段長(zhǎng)度不一致,直接對(duì)舊代碼做本地替換,原 來代碼空間內(nèi)一般無法容下替換后的代碼,并且一旦做了代碼替換,還可能對(duì)原代碼所在 函數(shù)內(nèi)所有代碼的布局產(chǎn)生影響,從而引起原函數(shù)代碼復(fù)雜的變化。為了避免本地代碼替 換帶來的復(fù)雜性,我們采用了一種以函數(shù)為基本替換單元的代碼替換方法。我們?cè)谶M(jìn)行代碼替換時(shí),會(huì)把所需替換代碼所在的函數(shù)體取出,并用新的指令片段替換原有的代碼片段, 得到一個(gè)新的函數(shù)體。這個(gè)新的函數(shù)體映射到Guest OS中后,我們修改所有已經(jīng)探知的對(duì) 原函數(shù)體的調(diào)用,使之調(diào)用植入的新函數(shù)。這樣做的另一個(gè)好處是如果我們要取消植入, 只需要先把所有修改的函數(shù)調(diào)用點(diǎn)恢復(fù),在確保Guest OS不再訪問植入代碼時(shí),把植入代 碼從Guest OS中清除。 一般來說,修改調(diào)用點(diǎn)不會(huì)引起函數(shù)調(diào)用指令代碼長(zhǎng)度的變化
3. 分析函數(shù)調(diào)用堆棧,獲得被替換函數(shù)的在客戶操作系統(tǒng)內(nèi)核中的調(diào)用點(diǎn) 由于要修改對(duì)原函數(shù)體的調(diào)用處的Call指令的偏移地址,首先我們必須找到被替換的
函數(shù)調(diào)用堆棧,也就是我們平時(shí)稱作的Call Stack。由于函數(shù)調(diào)用時(shí)會(huì)返回地址壓棧,我們 可以取出GuestOS執(zhí)行到需替換代碼處的堆棧,通過指令分析,從堆棧中找到各級(jí)返回地 址,從而找出各級(jí)函數(shù)調(diào)用關(guān)系。獲得這些函數(shù)調(diào)用關(guān)系,可以確保我們能做函數(shù)級(jí)的代 碼替換。
4. VMM是CID進(jìn)程和Guest OS之間的橋梁
CID進(jìn)程通過VMM取得所需替換代碼的位置,替換代碼處的二進(jìn)制代碼片段,執(zhí)行 替換代碼的堆棧等信息;并且通過VMM將植入代碼映射到Guest OS的進(jìn)程空間中去。由 于CID進(jìn)程無法和Guest OS直接交互,因此VMM在這里起到了一個(gè)橋梁的作用,這正 是我們?cè)黾哟a替換引擎的原因所在。VMM和CID進(jìn)程之間的交互通過IOCTL等系統(tǒng)調(diào) 用來實(shí)現(xiàn)。
發(fā)明的優(yōu)點(diǎn)與積極效果
本發(fā)明提出的基于虛擬機(jī)管理器的客戶操作系統(tǒng)函數(shù)級(jí)內(nèi)核代碼動(dòng)態(tài)替換方法具有以 下優(yōu)點(diǎn)與積極效果
1. 平臺(tái)無關(guān)性。無需修改Guest OS的源代碼,完全將Guest OS看作一個(gè)黑盒,我們所做 的內(nèi)核代碼動(dòng)態(tài)替換完全是在二進(jìn)制代碼層面上做的。從這點(diǎn)來看,我們遵從了全虛 擬化方法的基本原則,而避免了半虛擬化需要修改Guest OS源代碼的局限性。
2. 通用性。我們提出的內(nèi)核代碼動(dòng)態(tài)替換機(jī)制,可以替換任何我們想要替換的代碼片段。 這種機(jī)制的通用性還可以從另外一個(gè)角度得到體現(xiàn),就是我們并不限制VMM的類型, 凡是支持硬件輔助全虛擬化的VMM,都可以使用我們提出的動(dòng)態(tài)代碼替換機(jī)制。
3. 透明性。我們的代碼替換對(duì)于普通用戶來說完全是透明的,也就是說普通用戶無需知 道任何關(guān)于代碼替換機(jī)制的細(xì)節(jié)。Guest OS啟動(dòng)以后,代碼動(dòng)態(tài)替換會(huì)自動(dòng)的進(jìn)行,
8無需任何用戶干預(yù)。
4.可逆性??梢酝ㄟ^控制CID進(jìn)程,開啟和關(guān)閉代碼替換機(jī)制。這是為了適應(yīng)某些特殊 需求場(chǎng)合,比如要將虛擬機(jī)從一個(gè)引入替換機(jī)制的VMM遷移至一個(gè)未引入替換機(jī)制 的VMM之前,為了保證兩邊虛擬機(jī)狀態(tài)的一致性,應(yīng)先關(guān)閉代碼替換的機(jī)制,隨后 再進(jìn)行遷移。


圖1、代碼植入的主要流程。
具體實(shí)施例方式
下面是本發(fā)明的一個(gè)具體的實(shí)施方案,該實(shí)現(xiàn)是基于開源的全虛擬化虛擬機(jī)管理器 KVM來完成的。
首先需要在KVM中加入一代碼替換引擎,用于打開或關(guān)閉代碼替換機(jī)制、收集需要替 換的代碼信息,同時(shí)也可以修改客戶操作系統(tǒng)(Guest OS)的頁表,輔助完成代碼的植入; 在宿主操作系統(tǒng)中加入一CID,用于完成代碼分析和植入替換代碼的用戶態(tài)進(jìn)程。接下來 按照如下步驟實(shí)施
步驟l:首先啟動(dòng)CID (Code Implantation Daemon)進(jìn)程,我們?cè)贑ID的進(jìn)程空間分 配一段物理內(nèi)存區(qū)域以容納植入的替換代碼,我們將這段物理內(nèi)存區(qū)域稱為植入代碼空 間。然后通過VMM的代碼替換引擎修改Guest OS的頁表,將植入代碼空間映射到Guest OS 的內(nèi)核進(jìn)程空間。
步驟2: CID進(jìn)程通過IOCTL系統(tǒng)調(diào)用通知KVM虛擬機(jī)管理器中的代碼替換引擎, 開始搜集所需替換的代碼片段。 一個(gè)常用的方法是在VMM中,按照陷入代碼在Guest OS 中的位置,對(duì)其做統(tǒng)計(jì)計(jì)數(shù),以便找出那些導(dǎo)致大量VM-VMM切換的代碼片段,因?yàn)檫@ 些代碼片段的執(zhí)行會(huì)造成過多的額外開銷,所以非常有替換價(jià)值。
步驟3:代碼替換引擎統(tǒng)計(jì)出所需替換代碼的位置、替換代碼處的二進(jìn)制代碼片段等信 息。得出統(tǒng)計(jì)結(jié)果后,將需要替換的代碼信息返回給CID進(jìn)程。
步驟4: CID根據(jù)代碼替換引擎報(bào)告的需替換二進(jìn)制代碼片斷的類型,為其生成一段替 換代碼(這不是本發(fā)明關(guān)注的內(nèi)容,現(xiàn)有技術(shù)人員根據(jù)二進(jìn)制代碼可以生成任意的替換代 碼)。由于沒有足夠的空間將替換代碼放在原來的位置,我們將對(duì)需替換代碼所處的函數(shù) 進(jìn)行整體替換。新函數(shù)的二進(jìn)制代碼將寫入植入代碼空間,并在CID進(jìn)程中做相應(yīng)的記錄。
步驟5: CID進(jìn)程獲得需替換代碼在客戶操作系統(tǒng)中的代碼地址后,再次通過代碼替換引擎獲取運(yùn)行時(shí)的堆棧信息,得出需替換代碼所處的調(diào)用堆棧。
步驟6: CID通過步驟5中分析出的調(diào)用堆棧信息,找到被替換函數(shù)在Guest OS中的 調(diào)用點(diǎn),通過代碼替換引擎,將調(diào)用點(diǎn)的跳轉(zhuǎn)地址改為新函數(shù)的偏移地址,以使得植入的 新函數(shù)能夠被替代執(zhí)行。
步驟7: CID將記錄所有的函數(shù)替換,以及函數(shù)調(diào)用點(diǎn)的修改,以便在需要的時(shí)候,能 夠取消內(nèi)核代碼動(dòng)態(tài)替換機(jī)制,將虛擬機(jī)切換回原有的模式。
我們所提出的基于虛擬機(jī)管理器的客戶操作系統(tǒng)函數(shù)級(jí)內(nèi)核代碼動(dòng)態(tài)替換方法,其主 要技術(shù)特征是允許VMM在虛擬機(jī)運(yùn)行時(shí),在二進(jìn)制代碼層面上,動(dòng)態(tài)地替換客戶操作系 統(tǒng)的內(nèi)核代碼,改變客戶操作系^5的某些執(zhí)行行為。因此,凡是符合虛擬機(jī)內(nèi)核代碼動(dòng)態(tài) 替換的虛擬機(jī)技術(shù)都在本專利的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種虛擬機(jī)管理器的客戶操作系統(tǒng)內(nèi)核代碼動(dòng)態(tài)替換方法,其步驟為1)在宿主操作系統(tǒng)中加入一代碼植入守護(hù)進(jìn)程CID;2)在CID的進(jìn)程空間分配一植入代碼空間以容納植入的替換代碼,然后全虛擬化虛擬機(jī)管理器將植入代碼空間映射到Guest OS的內(nèi)核進(jìn)程空間;3)全虛擬化虛擬機(jī)管理器根據(jù)CID的輸入指令搜集所需替換的代碼片斷,并將統(tǒng)計(jì)結(jié)果返回給CID進(jìn)程;所述統(tǒng)計(jì)結(jié)果包括所需替換代碼的位置、替換代碼處的二進(jìn)制代碼片段信息;4)CID根據(jù)所需替換代碼的二進(jìn)制代碼片斷類型,為其生成或指定一段替換代碼;5)將生成或指定的替換代碼寫入植入代碼空間,并在CID進(jìn)程中做相應(yīng)的記錄;同時(shí)根據(jù)所需替換代碼在Guest OS中的代碼地址,獲取所需替換代碼所處的調(diào)用堆棧;6)CID通過調(diào)用堆棧信息,找到所需替換代碼在Guest OS中的調(diào)用點(diǎn),全虛擬化虛擬機(jī)管理器將調(diào)用點(diǎn)的跳轉(zhuǎn)地址改為所生成或指定的替換代碼的偏移地址。
2. 如權(quán)利要求1所述的方法,其特征在于所述搜集所需替換的代碼片斷的方法為在全 虛擬化虛擬機(jī)管理器中,按照陷入代碼在Guest OS中的位置,對(duì)其做統(tǒng)計(jì)計(jì)數(shù),找出 導(dǎo)致大量VM-VMM切換的代碼片段。
3. 如權(quán)利要求l所述的方法,其特征在于所述步驟2)中,通過全虛擬化虛擬機(jī)管理器修 改Guest OS的頁表,將植入代碼空間映射到Guest OS的內(nèi)核進(jìn)程空間。
4. 如權(quán)利要求1所述的方法,其特征在于所述CID記錄所有替換代碼的替換,以及替換 代碼調(diào)用點(diǎn)的修改,以便將虛擬機(jī)切換回原有的模式。
5. 如權(quán)利要求1或4所述的方法,其特征在于所述將生成或指定的替換代碼寫入植入代 碼空間時(shí),首先判斷所述植入代碼空間大小是否滿足所述生成或指定的替換代碼;如 果滿足則直接寫入;如果不滿足則以函數(shù)為基本單位,對(duì)所需替換代碼所在的函數(shù)體 取出,并用所述生成或指定的替換代碼替換原有的代碼片段,得到一個(gè)新的函數(shù)體。
6. 如權(quán)利要求5所述的方法,其特征在于如果所述植入代碼空間滿足所述生成或指定的 替換代碼,則所述CID記錄對(duì)應(yīng)的所需替換代碼的代碼片段位置、長(zhǎng)度和內(nèi)容;如果 所述植入代碼空間小于所述生成或指定的替換代碼,則所述CID記錄對(duì)應(yīng)的函數(shù)替換, 以及函數(shù)調(diào)用點(diǎn)的修改。
7. 如權(quán)利要求1所述的方法,其特征在于所述植入代碼空間由全虛擬化虛擬機(jī)管理器監(jiān)控,當(dāng)VMM發(fā)現(xiàn)Guest OS使用了所述植入代碼空間,由VMM取消代碼植入,并嘗 試尋找新的空閑空間做再次植入。
全文摘要
本發(fā)明公開了一種虛擬機(jī)管理器的客戶操作系統(tǒng)內(nèi)核代碼動(dòng)態(tài)替換方法,屬于軟件技術(shù)領(lǐng)域。本發(fā)明為1)在宿主操作系統(tǒng)中加入一CID進(jìn)程,并分配一植入空間以容納植入的替換代碼,然后VMM將植入空間映射到Guest OS的內(nèi)核進(jìn)程空間;2)VMM統(tǒng)計(jì)所需替換的代碼片斷,3)CID根據(jù)統(tǒng)計(jì)結(jié)果為其指定一段替換代碼;4)將指定的替換代碼寫入植入空間,并獲取其所處的調(diào)用堆棧;5)CID通過調(diào)用堆棧信息,找到所需替換代碼在Guest OS中的調(diào)用點(diǎn),VMM將調(diào)用點(diǎn)的跳轉(zhuǎn)地址改為所指定的替換代碼的偏移地址。本發(fā)明將半虛擬化方法的優(yōu)勢(shì)融入全虛擬化技術(shù)之中成為可能,可以在二進(jìn)制層面對(duì)GuestOS內(nèi)核代碼做動(dòng)態(tài)替換。
文檔編號(hào)G06F9/46GK101539868SQ20091008151
公開日2009年9月23日 申請(qǐng)日期2009年4月10日 優(yōu)先權(quán)日2009年4月10日
發(fā)明者孫逸峰, 宇 李, 李曉明, 汪小林, 羅英偉 申請(qǐng)人:北京大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
武冈市| 铜梁县| 二连浩特市| 新巴尔虎左旗| 泸定县| 榆林市| 禄丰县| 平武县| 南乐县| 江阴市| 涪陵区| 洛隆县| 临夏市| 纳雍县| 通江县| 绥宁县| 临安市| 平定县| 宁陕县| 雷州市| 安化县| 北票市| 东源县| 津南区| 陆河县| 阿坝| 永年县| 三河市| 同江市| 南宫市| 万源市| 崇义县| 隆化县| 阿克陶县| 乌鲁木齐县| 忻城县| 全椒县| 孙吴县| 洛阳市| 禹州市| 虹口区|