專利名稱:計算機(jī)內(nèi)存數(shù)據(jù)準(zhǔn)確采集系統(tǒng)及獲取方法
技術(shù)領(lǐng)域:
本發(fā)明涉及的是一種計算機(jī)應(yīng)用技術(shù)領(lǐng)域的系統(tǒng)及方法,具體是一種計算機(jī)內(nèi)存數(shù)據(jù)準(zhǔn)確采集系統(tǒng)及獲取方法。
背景技術(shù):
內(nèi)存數(shù)據(jù)的獲取常被用于軟件調(diào)試和計算機(jī)取證過程中,已有內(nèi)存數(shù)據(jù)的獲取方法很難在獲取大量數(shù)據(jù)時確保準(zhǔn)確性?,F(xiàn)有的獲取方法分為軟件獲取和硬件獲取兩種,軟件獲取內(nèi)存數(shù)據(jù)又可進(jìn)一步分為基于虛擬機(jī)(Virtual Machine, VM)獲取和本地獲取兩種手段。本地獲取指在目標(biāo)操作系統(tǒng)(Operating System,OS)內(nèi)通過運(yùn)行第三方用戶態(tài)應(yīng)用程序(User-mode Application)或加載內(nèi)核模塊(Kernel Module)的方法來完成計算機(jī)內(nèi)存數(shù)據(jù)的獲取。經(jīng)過對現(xiàn)有的技術(shù)檢索發(fā)現(xiàn),中國專利文獻(xiàn)號CN100414554.記載了一種“用于計算機(jī)的電子數(shù)據(jù)取證方法和系統(tǒng)”,該技術(shù)包括實(shí)時取證過程,也就是在目標(biāo)機(jī)器運(yùn)行時獲取其中選定的內(nèi)存數(shù)據(jù)并進(jìn)而篩選出可能存在的證據(jù),然而由于當(dāng)前操作系統(tǒng)為多進(jìn)程操作系統(tǒng),內(nèi)存數(shù)據(jù)在獲取過程中會發(fā)生改變,因此包括該專利在內(nèi)的本地獲取內(nèi)存數(shù)據(jù)方法均不能保證獲得結(jié)果的準(zhǔn)確率。一種有效的改進(jìn)是在內(nèi)存獲取過程中暫停目標(biāo)機(jī)器的運(yùn)行,在2009年3月份 Computing in Science and Engineering 期干丨J Volume 7 Issue 2 中發(fā)表了一篇名為 Live Analysis progress and Challenges的論文,其中明確提到很難用軟件手段實(shí)現(xiàn)理想的暫停目標(biāo)機(jī)器運(yùn)行的手段,因此這種改進(jìn)出現(xiàn)的可能性極低。另一種軟件獲取手段一基于虛擬機(jī)獲取內(nèi)存內(nèi)容可以準(zhǔn)確獲取目標(biāo)機(jī)器的內(nèi)存數(shù)據(jù),這種方法在2007年 11 月 29 日的 ICISC 2007會議中,Asynchronous Pseudo Physical Memory Snapshot and Forensics on Paravirtualized VMM Using Split Kernel Module 提到通過構(gòu)建虛擬機(jī)來獲取預(yù)先裝入虛擬機(jī)中的目標(biāo)系統(tǒng)的物理內(nèi)存數(shù)據(jù)。而在2008年 5 ^ 22 H ^ SADFE2008Towards the Virtual Memory Space Reconstruction for Windows Live Forensic Purposes論文提出了一種利用虛擬機(jī)準(zhǔn)確獲取裝入虛擬機(jī)中的目標(biāo)系統(tǒng)的虛擬內(nèi)存數(shù)據(jù)方法,進(jìn)而可以分辨和準(zhǔn)確獲取屬于特定進(jìn)程的內(nèi)存內(nèi)容。然而這種方法為了達(dá)到準(zhǔn)確獲取內(nèi)存數(shù)據(jù)的目的,要求把目標(biāo)系統(tǒng)裝載入如VMWare Workstation, Xen或者KVM這樣的虛擬機(jī)內(nèi),這就要求必須重新目標(biāo)系統(tǒng)甚至于重新安裝目標(biāo)系統(tǒng),從而導(dǎo)致完全摧毀目標(biāo)機(jī)器的內(nèi)存數(shù)據(jù),從而在很多場合下不適用。對于現(xiàn)有的基于硬件的內(nèi)存獲取技術(shù),中國專利文獻(xiàn)號CN101419536B記載了 “一種計算機(jī)內(nèi)存數(shù)據(jù)獲取方法與系統(tǒng)”,其通過IEEE 1394接口模擬移動硬盤登錄到待取證計算機(jī)并使待取證計算機(jī)開放DMA功能;進(jìn)而完成內(nèi)存的讀取。其缺點(diǎn)是需要引入專門的硬件設(shè)備并且在2007年的Blackhat會議上Rutkowska Joanna的論文Beyond the CPU Defeating hardware based RAM acquisition中指出可以通過重新配置1/0映射內(nèi)存的方法來欺騙外接設(shè)備看到的內(nèi)存區(qū)域,從而使得基于硬件的內(nèi)存獲取技術(shù)失效。
發(fā)明內(nèi)容
本發(fā)明針對現(xiàn)有技術(shù)存在的上述不足,提供一種計算機(jī)內(nèi)存數(shù)據(jù)準(zhǔn)確采集系統(tǒng)及獲取方法,基于硬件虛擬化技術(shù),在操作系統(tǒng)和應(yīng)用程序運(yùn)行時動態(tài)構(gòu)建虛擬機(jī)監(jiān)控器,從而可在物理機(jī)器正在運(yùn)行時被轉(zhuǎn)換為虛擬機(jī)主機(jī)處的虛擬機(jī)(以下稱為構(gòu)建虛擬機(jī))而不致招致顯著的停機(jī)時間(僅需毫秒級停機(jī)時間),進(jìn)而通過控制虛擬機(jī)物理內(nèi)存到真實(shí)物理內(nèi)存的映射和權(quán)限管理完成對正在改寫內(nèi)存區(qū)域的識別和讀取相應(yīng)和鄰近或非鄰近位置原始內(nèi)存數(shù)據(jù)。這種方法或系統(tǒng)可以準(zhǔn)確獲取指定時刻計算機(jī)內(nèi)存中的數(shù)據(jù)并且對內(nèi)存的改動較小且與已有操作系統(tǒng)和應(yīng)用程序耦合度極低。而在獲取內(nèi)存內(nèi)容任務(wù)完成或需要卸載虛擬機(jī)監(jiān)控器時,本發(fā)明描述的系統(tǒng)及方法可以在操作系統(tǒng)和應(yīng)用程序運(yùn)行時動態(tài)卸載虛擬機(jī)監(jiān)控器,使得之前處于虛擬機(jī)主機(jī)處的虛擬機(jī)在運(yùn)行時被轉(zhuǎn)換為物理機(jī)器(以下稱為卸載虛擬機(jī))繼續(xù)運(yùn)行,同樣不致招致顯著的停機(jī)時間(僅需毫秒級停機(jī)時間)。本發(fā)明不創(chuàng)建任何物理機(jī)器卷磁盤的快照的同時,由于將本地物理機(jī)器在運(yùn)行時轉(zhuǎn)化為虛擬機(jī),因此本發(fā)明無需現(xiàn)有技術(shù)所述任何有關(guān)快照相關(guān)的傳輸。本發(fā)明是通過以下技術(shù)方案實(shí)現(xiàn)的本發(fā)明涉及一種計算機(jī)內(nèi)存數(shù)據(jù)準(zhǔn)確采集系統(tǒng),包括后啟動虛擬機(jī)模塊和虛擬化內(nèi)存獲取模塊,其中虛擬化內(nèi)存獲取模塊訪問目標(biāo)操作系統(tǒng)獲得內(nèi)存設(shè)備信息,后啟動虛擬機(jī)模塊與硬件系統(tǒng)相連接并在操作系統(tǒng)啟動中或完成后驅(qū)動支持硬件虛擬化技術(shù)的硬件平臺完成構(gòu)建后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī)或卸載已構(gòu)建的后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī)、加載或卸載虛擬化內(nèi)存獲取模塊并驅(qū)動CPU攔截虛擬機(jī)內(nèi)發(fā)生的虛擬機(jī)監(jiān)控器指定的虛擬機(jī)事件、異常以及中斷,后啟動虛擬機(jī)模塊與虛擬化內(nèi)存獲取系統(tǒng)相連接并傳輸內(nèi)存獲取控制指令和虛擬機(jī)中內(nèi)存內(nèi)容信息,虛擬化內(nèi)存獲取模塊與后啟動虛擬機(jī)模塊相連接并接受內(nèi)存獲取控制指令和虛擬機(jī)中內(nèi)存內(nèi)容信息。所述的后啟動虛擬機(jī)模塊包括虛擬機(jī)創(chuàng)建卸載子模塊、虛擬機(jī)事件攔截處理子模塊,其中虛擬機(jī)創(chuàng)建和卸載子模塊驅(qū)動支持硬件虛擬化技術(shù)的硬件平臺完成構(gòu)建后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī)或卸載已構(gòu)建的后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī),以及加載/卸載虛擬化內(nèi)存獲取模塊,虛擬機(jī)事件攔截處理子模塊接收并處理硬件攔截到的虛擬機(jī)內(nèi)發(fā)生的虛擬機(jī)監(jiān)控器指定的虛擬機(jī)事件、異常以及中斷并傳輸截獲的內(nèi)存獲取控制指令和虛擬機(jī)中內(nèi)存內(nèi)容到虛擬化內(nèi)存獲取模塊所述的虛擬化內(nèi)存獲取模塊包括內(nèi)存獲取控制子模塊、內(nèi)存內(nèi)容獲取子模塊、結(jié)果輸出子模塊,其中內(nèi)存獲取控制子模塊負(fù)責(zé)監(jiān)聽用戶指令,反饋內(nèi)存獲取狀態(tài)。內(nèi)存內(nèi)容獲取子模塊用于接收虛擬機(jī)中內(nèi)存內(nèi)容信息并控制虛擬機(jī)物理內(nèi)存到真實(shí)物理內(nèi)存的映射和權(quán)限管理。結(jié)果輸出子模塊利用操作系統(tǒng)提供的函數(shù)或自身實(shí)現(xiàn)的功能負(fù)責(zé)將接收到的內(nèi)存數(shù)據(jù)保存到包括內(nèi)存、硬盤、外接硬盤、閃存、網(wǎng)絡(luò)和遠(yuǎn)程設(shè)備等外部設(shè)備。本發(fā)明涉及上述系統(tǒng)的信息獲取方法,通過后啟動虛擬機(jī)模塊構(gòu)建后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī),將目標(biāo)操作系統(tǒng)所在的物理機(jī)器在運(yùn)行時轉(zhuǎn)換為虛擬機(jī)主機(jī)處的虛擬機(jī)并提供虛擬機(jī)事件、異常以及中斷攔截監(jiān)測功能,虛擬化內(nèi)存獲取模塊控制虛擬機(jī)物理內(nèi)存到真實(shí)物理內(nèi)存的映射和權(quán)限管理毫秒級暫停的完成對正在改寫內(nèi)存區(qū)域的識別和準(zhǔn)確獲得相應(yīng)和鄰近或非鄰近位置原始內(nèi)存數(shù)據(jù)。
所述信息獲取方法的具體過程為在操作系統(tǒng)啟動過程中或完成后,通過加載驅(qū)動的方法由后啟動虛擬機(jī)模塊構(gòu)建后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī)并由虛擬化內(nèi)存獲取模塊對本地系統(tǒng)內(nèi)存信息進(jìn)行登記并在需要準(zhǔn)確獲取計算機(jī)內(nèi)存數(shù)據(jù)的時刻,客戶發(fā)出內(nèi)存獲取指令,虛擬化內(nèi)存獲取模塊在收到由后啟動虛擬機(jī)模塊轉(zhuǎn)交的指令后開始獲得相應(yīng)位置原來內(nèi)存數(shù)據(jù)并輸出到外部設(shè)備或指定內(nèi)存區(qū)域中。在獲取內(nèi)存內(nèi)容任務(wù)完成或需要卸載虛擬化內(nèi)存獲取模塊時,后啟動虛擬機(jī)模塊依次卸載已構(gòu)建的后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī)并卸載已加載的虛擬化內(nèi)存獲取模塊,將目標(biāo)操作系統(tǒng)所在的虛擬機(jī)在運(yùn)行時轉(zhuǎn)換為物理機(jī)器并卸載虛擬機(jī)事件、異常以及中斷攔截監(jiān)測功能。
所述的后啟動虛擬機(jī)模塊構(gòu)建后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī)是指步驟1. 1,利用操作系統(tǒng)內(nèi)核態(tài)、用戶態(tài)或內(nèi)核態(tài)混合用戶態(tài)的API調(diào)用,來實(shí)現(xiàn)在各個CPU核心上建立虛擬機(jī)監(jiān)控器,從而適用于多核硬件系統(tǒng);步驟1.2,保存寄存器內(nèi)容,分配內(nèi)存空間用于虛擬機(jī)監(jiān)控器運(yùn)行使用,包括但不限于堆??臻g,設(shè)置關(guān)鍵寄存器,配置輔助結(jié)構(gòu)體,如Intel VT技術(shù)中的VMXON結(jié)構(gòu)體并且修改相應(yīng)MSR的內(nèi)容啟用硬件虛擬化支持;步驟1. 3,進(jìn)行對Intel VT技術(shù)中的VMCS或AMD SVM的VMCB的配置,來建立虛擬機(jī)運(yùn)行環(huán)境并將本地系統(tǒng)裝入稍后運(yùn)行的唯一存在的虛擬機(jī)中,同時配置虛擬機(jī)監(jiān)控器環(huán)境和需要其處理的發(fā)生在虛擬機(jī)中的特殊事件并實(shí)現(xiàn)相應(yīng)處理函數(shù),在VMCS結(jié)構(gòu)體中指定虛擬機(jī)啟動后運(yùn)行的第一條指令為后啟動虛擬機(jī)模塊初始化繼續(xù)執(zhí)行的指令;步驟1. 4,啟動虛擬機(jī)并將處理器控制權(quán)交給虛擬機(jī),使用配置的虛擬機(jī)運(yùn)行環(huán)境并開啟虛擬機(jī)運(yùn)行;步驟1. 5,支持硬件虛擬化的處理器硬件會根據(jù)前述VMCS的配置信息,開始監(jiān)控和攔截需要虛擬機(jī)監(jiān)控器處理的敏感行為,保存虛擬機(jī)狀態(tài)到VMCS以及虛擬機(jī)監(jiān)控器的指定內(nèi)存區(qū)域并調(diào)用指定的處理函數(shù)進(jìn)行處理;步驟1. 6,虛擬機(jī)監(jiān)控層完成對陷入事件的處理后,將處理器控制權(quán)重新轉(zhuǎn)交到虛擬機(jī),虛擬機(jī)中的操作系統(tǒng)繼續(xù)運(yùn)行,回到步驟1. 5并循環(huán)執(zhí)行。所述的后啟動虛擬機(jī)模塊卸載已構(gòu)建的后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī)是指步驟a、卸載后啟動虛擬機(jī)的命令從虛擬機(jī)中對每個CPU發(fā)出,在接收到卸載后啟動虛擬機(jī)的命令后,虛擬機(jī)監(jiān)控器接管控制權(quán),虛擬機(jī)監(jiān)控器所在的CPU的通用寄存器內(nèi)容被保存,之后專門的卸載虛擬機(jī)監(jiān)控器函數(shù)被調(diào)用;步驟b、任何一個CPU卸載后啟動虛擬機(jī)過程如下1)將虛擬機(jī)中該CPU的其余關(guān)鍵寄存器內(nèi)容從VMCS中讀出,然后在虛擬機(jī)監(jiān)控器中寫入CPU真實(shí)寄存器,使得虛擬機(jī)監(jiān)控器中的環(huán)境和虛擬機(jī)中環(huán)境完全相同;2)設(shè)置關(guān)鍵寄存器,關(guān)閉虛擬機(jī)模式;步驟C、當(dāng)所有CPU上的虛擬機(jī)監(jiān)控器卸載后,調(diào)用操作系統(tǒng)函數(shù)釋放創(chuàng)建虛擬機(jī)監(jiān)控器過程中所申請的內(nèi)存,卸載虛擬機(jī)監(jiān)控器所在操作系統(tǒng)驅(qū)動。所述的虛擬化內(nèi)存獲取模塊通過以下方式進(jìn)行加載步驟2. 1,在后啟動虛擬機(jī)模塊構(gòu)建后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī)過程的步驟 1. 3之前開始加載虛擬化內(nèi)存獲取模塊。步驟2. 2,獲取虛擬機(jī)物理內(nèi)存地址和輸入輸出設(shè)備占用內(nèi)存物理地址的范圍,依此對包括但不限于Intel VT技術(shù)中的嵌套頁表技術(shù)(Extended Page Table。EPT)或AMD SVM 的快速虛擬化索引(Rapid Visualization Indexing, RVI)也稱 NPT(Nested Page Table)構(gòu)建全等頁表。需要注意的是,在不支持硬件嵌套頁表翻譯技術(shù)的機(jī)器上,全等頁表的創(chuàng)建也可基于包括但不限于影子頁表(Shadow Page Table,SPT)或直接使用系統(tǒng)當(dāng)前頁表的方法(以下將基于EPT、RVI、NPT、SPT或直接使用系統(tǒng)當(dāng)前頁表的頁表統(tǒng)稱為嵌套頁表)。所述的全等頁表是指操作系統(tǒng)物理地址與真實(shí)物理地址完全相等的一一映射, 但訪問權(quán)限上略有差異,頁面大小為硬件支持的所有可能內(nèi)存頁大小。構(gòu)建該頁表使得在后續(xù)啟動虛擬機(jī)后硬件自動完成從虛擬機(jī)虛擬地址到虛擬機(jī)物理地址到真實(shí)物理地址的翻譯。頁表項(xiàng)的創(chuàng)建或更新可以是通過每次創(chuàng)建或更新一項(xiàng)或多項(xiàng)的形式完成。步驟2. 3,在后啟動虛擬機(jī)模塊構(gòu)建后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī)過程的步驟 1. 3之中注冊構(gòu)建的嵌套頁表的物理地址和嵌套頁面異常處理函數(shù)。修改虛擬機(jī)監(jiān)控器內(nèi)處理虛擬機(jī)經(jīng)常性或周期性發(fā)生事件的函數(shù),如虛擬機(jī)寫CR3寄存器事件的處理函數(shù),使虛擬機(jī)在每次寫CR3寄存器并且需要獲取內(nèi)存內(nèi)容時執(zhí)行獲取內(nèi)存方法。所述的卸載已加載的虛擬化內(nèi)存獲取模塊是指 步驟3. 1,在后啟動虛擬機(jī)模塊卸載后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī)過程的步驟a 之前開始卸載虛擬化內(nèi)存獲取模塊。步驟3. 2,調(diào)用操作系統(tǒng)函數(shù),釋放為存儲嵌套頁表相關(guān)的頁面結(jié)構(gòu)所申請的內(nèi)存。步驟3. 3,刪除VMCS中嵌套頁表的頁表指針,清空VMCS中對嵌套頁表的使用設(shè)置位。所述的獲得相應(yīng)位置原來內(nèi)存數(shù)據(jù)是指步驟4. 1,在接收到獲取內(nèi)存內(nèi)容的命令后,虛擬機(jī)監(jiān)控器接管控制權(quán)。虛擬化內(nèi)存獲取模塊的內(nèi)存獲取控制子模塊接收到該獲取內(nèi)存內(nèi)容的命令后指示內(nèi)存內(nèi)容獲取子模塊進(jìn)行內(nèi)存獲取準(zhǔn)備工作。虛擬化內(nèi)存獲取模塊的內(nèi)存內(nèi)容獲取子模塊在嵌套頁表中指向虛擬機(jī)待獲取物理內(nèi)存地址范圍的頁表項(xiàng)上去掉寫權(quán)限位,使得虛擬機(jī)物理內(nèi)存不可寫。步驟4. 2,設(shè)置權(quán)限完成后,虛擬化內(nèi)存獲取模塊請求虛擬機(jī)監(jiān)控器將處理器控制權(quán)重新轉(zhuǎn)交到虛擬機(jī),虛擬機(jī)中的操作系統(tǒng)和應(yīng)用程序繼續(xù)運(yùn)行。步驟4. 3,支持硬件虛擬化的處理器在虛擬機(jī)中嘗試寫虛擬機(jī)任何物理內(nèi)存時會陷入虛擬機(jī)管理器中并且尚未修改目標(biāo)內(nèi)存內(nèi)容。步驟4. 4,在虛擬機(jī)監(jiān)控器中,虛擬機(jī)事件攔截處理子模塊的嵌套頁表處理函數(shù)首先獲取該頁內(nèi)容并轉(zhuǎn)發(fā)到內(nèi)存內(nèi)容獲取子模塊(也可由嵌套頁表處理函數(shù)通知內(nèi)存內(nèi)容獲取子模塊可獲取的內(nèi)存內(nèi)容地址而由內(nèi)存內(nèi)容獲取子模塊負(fù)責(zé)具體的內(nèi)存內(nèi)容獲取過程)。內(nèi)存內(nèi)容獲取子模塊將該內(nèi)容通過結(jié)果輸出子模塊利用操作系統(tǒng)提供的函數(shù)或自身實(shí)現(xiàn)的功能保存到外部設(shè)備或指定的內(nèi)存區(qū)域中,然后獲取該頁臨近或非臨近的0個以上頁面內(nèi)容并通過結(jié)果輸出子模塊利用操作系統(tǒng)提供的函數(shù)或自身實(shí)現(xiàn)的功能保存到外部設(shè)備或指定的內(nèi)存區(qū)域中,接著內(nèi)存內(nèi)容獲取子模塊查找關(guān)聯(lián)到這些頁面的嵌套頁表頁表項(xiàng),恢復(fù)它們的寫權(quán)限位確保不會重復(fù)陷入并更新已獲取內(nèi)存頁列表。
步驟4. 5,虛擬化內(nèi)存獲取模塊請求虛擬機(jī)監(jiān)控器將處理器控制權(quán)重新轉(zhuǎn)交到虛擬機(jī),虛擬機(jī)中的操作系統(tǒng)和應(yīng)用程序繼續(xù)運(yùn)行。步驟4. 6,虛擬機(jī)發(fā)生寫CR3寄存器事件并且獲取內(nèi)存內(nèi)容過程未完成時(包括但不限于該事件,可以是任何經(jīng)常性或周期性發(fā)生的事件,如HLT),該事件導(dǎo)致陷入虛擬機(jī)管理器中。虛擬機(jī)事件攔截處理子模塊調(diào)用虛擬機(jī)寫CR3寄存器事件的的處理函數(shù)(但不限于該函數(shù),具體被調(diào)用函數(shù)與造成陷入的具體事件有關(guān))。步驟4. 7,虛擬機(jī)寫CR3寄存器事件的的處理函數(shù)首先處理寫CR3寄存器事件,然后同步驟4. 4和步驟4. 5,其中步驟4. 4為查找尚未被獲取的1個或多個頁,獲取這些頁的內(nèi)容并通過 結(jié)果輸出子模塊利用操作系統(tǒng)提供的函數(shù)或自身實(shí)現(xiàn)的功能保存到外部設(shè)備或指定的內(nèi)存區(qū)域中。步驟4. 8,當(dāng)虛擬機(jī)中待獲取物理內(nèi)存地址范圍上的所有內(nèi)存內(nèi)容均已獲取后,內(nèi)存內(nèi)容獲取過程完成。處理器控制權(quán)重新轉(zhuǎn)交到虛擬機(jī),虛擬機(jī)中的操作系統(tǒng)和應(yīng)用程序繼續(xù)運(yùn)行。用戶可到指定的外部設(shè)備或內(nèi)存區(qū)域中獲取系統(tǒng)得到的內(nèi)存內(nèi)容結(jié)果。本發(fā)明相對于現(xiàn)有技術(shù)具有以下優(yōu)點(diǎn)首先,建立了適用于已有商業(yè)操作系統(tǒng)的一個輕量級的虛擬機(jī)監(jiān)控器,與已有系統(tǒng)不同的是,該虛擬機(jī)監(jiān)控器能夠?qū)⒛繕?biāo)操作系統(tǒng)所在的物理機(jī)器在運(yùn)行時被轉(zhuǎn)換為虛擬機(jī)主機(jī)處的虛擬機(jī)并提供虛擬機(jī)事件/異常/中斷攔截監(jiān)測功能,以前同類型虛擬機(jī)監(jiān)控器的安裝需要先于操作系統(tǒng)啟動完成并且不提供卸載功能,甚至于需要重新安裝要支持的操作系統(tǒng),而該虛擬機(jī)監(jiān)控器的安裝和卸載后于操作系統(tǒng)啟動完成并且在操作系統(tǒng)運(yùn)行期間可以多次安裝/卸載該虛擬機(jī)監(jiān)控器為毫秒級并且不招致顯著的暫停時間,更無需重新安裝操作系統(tǒng)。其次,在該虛擬機(jī)監(jiān)控器的基礎(chǔ)上,內(nèi)存獲取可以利用操縱虛擬機(jī)外額外地址翻譯的能力,在無需暫停機(jī)器的情況下產(chǎn)生準(zhǔn)確的結(jié)果而且不引起顯著的性能影響。已有產(chǎn)品和方法則無法獲得準(zhǔn)確的內(nèi)存獲取結(jié)果,或者需要通過暫停機(jī)器運(yùn)行的手段來保證結(jié)果準(zhǔn)確性。最后,本系統(tǒng)獨(dú)立于已有操作系統(tǒng)和上層應(yīng)用軟件的特性使得本系統(tǒng)易于部署在商業(yè)系統(tǒng)中,尤其適用于需要達(dá)到7X24 小時可用性的商業(yè)服務(wù)器上。
圖1為本發(fā)明模塊示意圖。圖2為本發(fā)明架構(gòu)示意圖。圖3為虛擬機(jī)構(gòu)建和事件處理示意圖。圖4為虛擬化內(nèi)存獲取模塊利用寫保護(hù)來獲取內(nèi)存內(nèi)容的原理圖。
具體實(shí)施例方式下面對本發(fā)明的實(shí)施例作詳細(xì)說明,本實(shí)施例在以本發(fā)明技術(shù)方案為前提下進(jìn)行實(shí)施,給出了詳細(xì)的實(shí)施方式和具體的操作過程,但本發(fā)明的保護(hù)范圍不限于下述的實(shí)施例。實(shí)施例如圖2所示,本實(shí)施例涉及的計算機(jī)內(nèi)存數(shù)據(jù)采集系統(tǒng),包括后啟動虛擬機(jī)模塊和虛擬化內(nèi)存獲取模塊,其中后啟動虛擬機(jī)模塊與硬件系統(tǒng)相連接,按照所提供的硬件接口構(gòu)建或卸載后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī),加載/卸載虛擬化內(nèi)存獲取模塊并驅(qū)動CPU 攔截虛擬機(jī)內(nèi)發(fā)生的虛擬機(jī)監(jiān)控器指定的虛擬機(jī)事件、異常以及中斷,后啟動虛擬機(jī)模塊與虛擬化內(nèi)存獲取系統(tǒng)相連接并傳輸內(nèi)存獲取控制指令和虛擬機(jī)中內(nèi)存內(nèi)容信息,虛擬化內(nèi)存獲取模塊與后啟動虛擬機(jī)模塊相連接并接受內(nèi)存獲取控制指令和虛擬機(jī)中內(nèi)存內(nèi)容信息,此外虛擬化內(nèi)存獲取模塊訪問目標(biāo)操作系統(tǒng)獲得內(nèi)存設(shè)備信息(在本實(shí)施例中為物理內(nèi)存地址范圍信息)。如圖1所示,所述的后啟動虛擬機(jī)模塊包括虛擬機(jī)創(chuàng)建和卸載子模塊、虛擬機(jī)事件攔截處理子模塊,其中虛擬機(jī)創(chuàng)建和卸載子模塊驅(qū)動支持硬件虛擬化技術(shù)的硬件平臺完成構(gòu)建或卸載后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī),以及加載虛擬化內(nèi)存獲取模塊(在本實(shí)施例中卸載虛擬化內(nèi)存獲取模塊包含在卸載后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī)內(nèi)完成)。虛擬機(jī)事件攔截處理子模塊接收并處理硬件攔截到的虛擬機(jī)內(nèi)發(fā)生的虛擬機(jī)監(jiān)控器指定的虛擬機(jī)事件、異常以及中斷并傳輸截獲的內(nèi)存獲取控制指令和虛擬機(jī)中內(nèi)存內(nèi)容到虛擬化內(nèi)存獲取模塊如圖1所示,所述的虛擬化內(nèi)存獲取模塊包括內(nèi)存獲取控制子模塊、內(nèi)存 內(nèi)容獲取子模塊、結(jié)果輸出子模塊,其中內(nèi)存獲取控制子模塊負(fù)責(zé)監(jiān)聽用戶指令,反饋內(nèi)存獲取狀態(tài)。內(nèi)存內(nèi)容獲取子模塊用于接收虛擬機(jī)中內(nèi)存內(nèi)容信息并控制虛擬機(jī)物理內(nèi)存到真實(shí)物理內(nèi)存的映射和權(quán)限管理。結(jié)果輸出子模塊負(fù)責(zé)將接收到的內(nèi)存數(shù)據(jù)保存到外部設(shè)備和指定內(nèi)存區(qū)域。本實(shí)施例內(nèi)部的后啟動虛擬機(jī)模塊和虛擬化內(nèi)存獲取模塊的構(gòu)建和運(yùn)行過程如圖3所示。在本實(shí)施例中使用Intel VT技術(shù),采用的嵌套頁表為EPT頁表,虛擬化內(nèi)存獲取模塊擴(kuò)展虛擬機(jī)監(jiān)控器中的虛擬機(jī)寫CR3寄存器事件監(jiān)控函數(shù)來獲取未被獲取的頁面每次獲取頁面內(nèi)容時,均采用批量獲取臨近8個頁面的方式。在操作系統(tǒng)啟動完成之后插入虛擬機(jī)監(jiān)控器層從而將物理機(jī)器在運(yùn)行時被轉(zhuǎn)換為虛擬機(jī)主機(jī)處的虛擬機(jī)。而如圖3所示,通過如前文所示的虛擬機(jī)加載方法,可以完成物理機(jī)器到虛擬機(jī)的轉(zhuǎn)換而不致招致顯著的停機(jī)時間。從而達(dá)到易于部署的目的并為隨后的內(nèi)存內(nèi)容準(zhǔn)確獲取提供基礎(chǔ)。圖4所示能夠確保虛擬機(jī)任何內(nèi)存內(nèi)容在更新到獲取區(qū)域之前,寫入操作因?yàn)檫`反寫保護(hù)而被攔截從而陷入到虛擬機(jī)監(jiān)控器,從而任何被本系統(tǒng)捕捉和輸出到外部設(shè)備或指定的內(nèi)存區(qū)域中的內(nèi)容都是寫入發(fā)生前的內(nèi)容,以此來保證內(nèi)存內(nèi)容的獲取準(zhǔn)確性。本實(shí)施例通過以下方式進(jìn)行工作步驟一,在操作系統(tǒng)啟動完成后,以驅(qū)動的形式加載本系統(tǒng),在特權(quán)模式下檢測硬件是否支持硬件虛擬化技術(shù)并為每個CPU執(zhí)行后續(xù)虛擬化監(jiān)控器安裝工作。步驟二,保存當(dāng)前物理機(jī)器運(yùn)行狀態(tài)。即保存通用硬件寄存器內(nèi)容,然后從操作系統(tǒng)中分配內(nèi)存用于虛擬機(jī)監(jiān)控器的堆棧和VMXON、VMCS等關(guān)鍵結(jié)構(gòu)體的使用。之后執(zhí)行 VMXON指令,進(jìn)入虛擬機(jī)特權(quán)模式。步驟三,通過解析內(nèi)核數(shù)據(jù)結(jié)構(gòu)的方法獲得操作系統(tǒng)關(guān)于已安裝物理內(nèi)存的地址范圍和輸入輸出設(shè)備在內(nèi)存地址空間中的映射范圍。以此信息為基礎(chǔ)對EPT構(gòu)建全等頁表 (也可不詢問而對全部地址空間范圍對EPT構(gòu)建全等頁表)。隨后在VMCS中啟用對EPT的支持并且保存EPT頁表的起始位置到VMCS中的EPT Pointer域中,使得在啟動虛擬機(jī)后硬件自動完成從虛擬機(jī)虛擬地址到虛擬機(jī)物理地址到真實(shí)物理地址的翻譯。步驟四,配置虛擬機(jī)環(huán)境,主要表現(xiàn)為設(shè)置VMCS結(jié)構(gòu)體,填入虛擬機(jī)監(jiān)控器和虛擬機(jī)接下來運(yùn)行時需要的GDT、IDT、堆棧以及虛擬機(jī)監(jiān)控器要監(jiān)控的虛擬機(jī)內(nèi)異常、中斷和事件,包括虛擬機(jī)寫CR3寄存器事件、中斷處理事件和EPT缺頁異常。其中特別注意虛擬機(jī)接下來運(yùn)行的指令為后啟動虛擬機(jī)模塊初始化繼續(xù)執(zhí)行的指令。步驟五,在虛擬機(jī)監(jiān)控器中注冊已實(shí)現(xiàn)的虛擬機(jī)寫CR3寄存器事件處理函數(shù)、中斷處理函數(shù)和EPT缺頁異常處理函數(shù),使得陷入后可根據(jù)相應(yīng)的陷入原因來找到正確的處理函數(shù)。步驟六,開啟虛擬機(jī),回到虛擬機(jī)模式。至此原來位于保護(hù)模式下的本地系統(tǒng)被置于虛擬機(jī)當(dāng)中繼續(xù)運(yùn)行。在多核模式下,回到步驟二為下一個CPU安裝虛擬機(jī)監(jiān)控器。通過以上步驟安裝的虛擬機(jī)監(jiān)控器可對之后用戶發(fā)出的獲取內(nèi)存內(nèi)容的命令進(jìn)行響應(yīng)。當(dāng)之后某一時刻需要獲取內(nèi)存內(nèi)容時,具體過程如下步驟1,用戶使用位于虛擬機(jī)內(nèi)用戶態(tài)或者內(nèi)核態(tài)的程序/模塊發(fā)出可被虛擬機(jī)監(jiān)控器攔截的特權(quán)指令,通知本系統(tǒng)開始獲取目標(biāo)操作系統(tǒng)的物理內(nèi)存內(nèi)容。步驟2、在接收到獲取內(nèi)存內(nèi)容的命令后,CPU陷入到root模式,虛擬機(jī)監(jiān)控器接管控制權(quán)。虛擬化內(nèi)存獲取模塊的內(nèi)存獲取控制子模塊接收到該獲取內(nèi)存內(nèi)容的命令后指示內(nèi)存內(nèi)容獲取子模塊進(jìn)行內(nèi)存獲取準(zhǔn)備工作。虛擬化內(nèi)存獲取模塊的內(nèi)存內(nèi)容獲取子模塊在EPT上設(shè)置目標(biāo)操作系統(tǒng)的物理內(nèi)存空間為不可寫。步驟3、虛擬化內(nèi)存獲取模塊請求虛擬機(jī)監(jiān)控器將處理器控制權(quán)重新轉(zhuǎn)交到虛擬機(jī),虛擬機(jī)中的操作系統(tǒng)和應(yīng)用程序繼續(xù)運(yùn)行。步驟4、支持硬件虛擬化的處理器在虛擬機(jī)中嘗試寫虛擬機(jī)任何物理內(nèi)存時陷入到虛擬機(jī)模式,并且尚未修改目標(biāo)內(nèi)存內(nèi)容。在虛擬機(jī)監(jiān)控器中,虛擬機(jī)事件攔截處理子模塊的EPT缺頁異常處理函數(shù)被調(diào)用并首先獲取該頁內(nèi)容并轉(zhuǎn)發(fā)到內(nèi)存內(nèi)容獲取子模塊。內(nèi)存內(nèi)容獲取子模塊將該內(nèi)容通過結(jié)果輸出子模塊利用操作系統(tǒng)提供的函數(shù)保存到外部設(shè)備或指定的內(nèi)存區(qū)域中,然啟獲取該頁臨近或非臨近的0個以上頁面內(nèi)容并利用操作系統(tǒng)提供的函數(shù)保存到外部設(shè)備或指定的內(nèi)存區(qū)域中。最后內(nèi)存內(nèi)容獲取子模塊將已獲得的內(nèi)存頁相應(yīng)寫保護(hù)從EPT中去除?;氐讲襟E3。步驟5、如果虛擬機(jī)內(nèi)發(fā)生寫CR3寄存器事件并且獲取內(nèi)存內(nèi)容過程未完成,該事件導(dǎo)致陷入虛擬機(jī)管理器中。虛擬機(jī)事件攔截處理子模塊調(diào)用虛擬機(jī)寫CR3寄存器事件的處理函數(shù),該函數(shù)會幫助虛擬機(jī)填充新值到虛擬機(jī)的CR3寄存器中,此外,該函數(shù)會查找尚未被獲取的1個或多個頁,獲取這些頁面的內(nèi)容并轉(zhuǎn)發(fā)到內(nèi)存內(nèi)容獲取子模塊。內(nèi)存內(nèi)容獲取子模塊利用操作系統(tǒng)提供的函數(shù)將該內(nèi)容通過結(jié)果輸出子模塊保存到外部設(shè)備或指定的內(nèi)存區(qū)域中。最后內(nèi)存內(nèi)容獲取子模塊將已獲得的內(nèi)存頁相應(yīng)寫保護(hù)從EPT中去除。 回到步驟3。如果已經(jīng)沒有尚未被獲取的頁面,則獲取內(nèi)存內(nèi)容過程結(jié)束,回到步驟3。步驟6、用戶到指定的外部設(shè)備或內(nèi)存區(qū)域中獲取系統(tǒng)得到的內(nèi)存內(nèi)容結(jié)果,至此獲取內(nèi)存內(nèi)容過程完全結(jié)束。后啟動虛擬機(jī)模塊具體卸載實(shí)施例如下步驟a,卸載后啟動虛擬機(jī)的命令從虛擬機(jī)中對每一 CPU發(fā)出。在接收到卸載后啟動虛擬機(jī)的 命令后,虛擬機(jī)監(jiān)控器接管控制權(quán)。虛擬機(jī)監(jiān)控器所在的CPU的通用寄存器內(nèi)容被保存,之后專門的卸載虛擬 機(jī)監(jiān)控器函數(shù)被調(diào)用。步驟b、任何一個CPU卸載后啟動虛擬機(jī)過程如下1)分配數(shù)據(jù)內(nèi)存,在其中寫入?yún)R編指令,使得將虛擬機(jī)中該CPU的其余關(guān)鍵寄存器內(nèi)客從VMCS中讀出,然后在虛擬機(jī)監(jiān)控器中寫入CPU真實(shí)寄存器。包括但不限于CR0、 CR3、CR4、EFLAGS\RFLAGS、各個段寄存器、IDTR、⑶TR等。需注意最后的返回地址為原來虛擬機(jī)中發(fā)出關(guān)閉指令程序的下一條指令。2)設(shè)置關(guān)鍵寄存器(CR4寄存器),關(guān)閉虛擬機(jī)模式。3)執(zhí)行該數(shù)據(jù)內(nèi)存包含的代碼。步驟C、當(dāng)所有CPU上的虛擬機(jī)監(jiān)控器卸載后,調(diào)用操作系統(tǒng)函數(shù)釋放創(chuàng)建虛擬機(jī)監(jiān)控器過程中所申請的內(nèi)存,卸載虛擬機(jī)監(jiān)控器所在操作系統(tǒng)驅(qū)動。通過以上步驟,系統(tǒng)可以確保獲得的內(nèi)存內(nèi)容結(jié)果是用戶指定開始時刻的內(nèi)存內(nèi)容的準(zhǔn)確結(jié)果,同時無論是在安裝/卸載系統(tǒng)還是在獲取內(nèi)存內(nèi)容過程當(dāng)中均無需重新啟動或暫停目標(biāo)系統(tǒng)。
權(quán)利要求
1.一種計算機(jī)內(nèi)存數(shù)據(jù)準(zhǔn)確采集系統(tǒng),其特征在于,包括后啟動虛擬機(jī)模塊和虛擬化內(nèi)存獲取模塊,其中虛擬化內(nèi)存獲取模塊訪問目標(biāo)操作系統(tǒng)獲得內(nèi)存設(shè)備信息,后啟動虛擬機(jī)模塊與硬件系統(tǒng)相連接并驅(qū)動支持硬件虛擬化技術(shù)的硬件平臺完成構(gòu)建或卸載后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī)、加載或卸載虛擬化內(nèi)存獲取模塊并驅(qū)動CPU攔截虛擬機(jī)內(nèi)發(fā)生的虛擬機(jī)監(jiān)控器指定的虛擬機(jī)事件、異常以及中斷,后啟動虛擬機(jī)模塊與虛擬化內(nèi)存獲取模塊相連接并傳輸內(nèi)存獲取控制指令和虛擬機(jī)中內(nèi)存內(nèi)容信息,虛擬化內(nèi)存獲取模塊與后啟動虛擬機(jī)模塊相連接并接受內(nèi)存獲取控制指令和虛擬機(jī)中內(nèi)存內(nèi)容信息。
2.根據(jù)權(quán)利要求1所述的計算機(jī)內(nèi)存數(shù)據(jù)準(zhǔn)確采集系統(tǒng),其特征是,所述的后啟動虛擬機(jī)模塊包括虛擬機(jī)創(chuàng)建和卸載子模塊、虛擬機(jī)事件攔截處理子模塊,其中虛擬機(jī)創(chuàng)建和卸載子模塊驅(qū)動支持硬件虛擬化技術(shù)的硬件平臺完成構(gòu)建或卸載后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī),以及加載/卸載虛擬化內(nèi)存獲取模塊,虛擬機(jī)事件攔截處理子模塊接收并處理硬件攔截到的虛擬機(jī)內(nèi)發(fā)生的虛擬機(jī)監(jiān)控器指定的虛擬機(jī)事件、異常以及中斷并傳輸截獲的內(nèi)存獲取控制指令和虛擬機(jī)中內(nèi)存內(nèi)容到虛擬化內(nèi)存獲取模塊。
3.根據(jù)權(quán)利要求1或2所述的計算機(jī)內(nèi)存數(shù)據(jù)準(zhǔn)確采集系統(tǒng),其特征是,所述的虛擬化內(nèi)存獲取模塊包括內(nèi)存獲取控制子模塊、內(nèi)存內(nèi)容獲取子模塊、結(jié)果輸出子模塊,其中 內(nèi)存獲取控制子模塊負(fù)責(zé)監(jiān)聽用戶指令,反饋內(nèi)存獲取狀態(tài),內(nèi)存內(nèi)容獲取子模塊用于接收虛擬機(jī)中內(nèi)存內(nèi)容信息并控制虛擬機(jī)物理內(nèi)存到真實(shí)物理內(nèi)存的映射和權(quán)限管理,結(jié)果輸出子模塊負(fù)責(zé)利用操作系統(tǒng)提供的函數(shù)或自身實(shí)現(xiàn)的功能將接收到的內(nèi)存數(shù)據(jù)保存到外部設(shè)備或指定的內(nèi)存區(qū)域。
4.一種根據(jù)上述任一權(quán)利要求所述系統(tǒng)的信息獲取方法,其特征在于,通過后啟動虛擬機(jī)模塊構(gòu)建后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī),將目標(biāo)操作系統(tǒng)所在的物理機(jī)器在運(yùn)行時轉(zhuǎn)換為虛擬機(jī)主機(jī)處的虛擬機(jī)并提供虛擬機(jī)事件、異常以及中斷攔截監(jiān)測功能,虛擬化內(nèi)存獲取模塊控制虛擬機(jī)物理內(nèi)存到真實(shí)物理內(nèi)存的映射和權(quán)限管理毫秒級暫停的完成對正在改寫內(nèi)存區(qū)域的識別和準(zhǔn)確獲得相應(yīng)和鄰近或非鄰近位置原始內(nèi)存數(shù)據(jù)。
5.根據(jù)權(quán)利要求4所述的信息獲取方法,其特征是,所述方法具體過程為在操作系統(tǒng)啟動過程中或完成后,通過加載驅(qū)動的方法由后啟動虛擬機(jī)模塊構(gòu)建后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī)并由虛擬化內(nèi)存獲取模塊對本地系統(tǒng)內(nèi)存信息進(jìn)行登記并在需要準(zhǔn)確獲取計算機(jī)內(nèi)存數(shù)據(jù)的時刻,客戶發(fā)出內(nèi)存獲取指令,虛擬化內(nèi)存獲取模塊在收到由后啟動虛擬機(jī)模塊轉(zhuǎn)交的指令后開始獲得相應(yīng)位置原來內(nèi)存數(shù)據(jù)并輸出到外部設(shè)備或指定內(nèi)存區(qū)域中。 在獲取內(nèi)存內(nèi)容任務(wù)完成或需要卸載虛擬化內(nèi)存獲取模塊時,后啟動虛擬機(jī)模塊依次卸載已構(gòu)建的后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī)并卸載已加載的虛擬化內(nèi)存獲取模塊,將目標(biāo)操作系統(tǒng)所在的虛擬機(jī)在運(yùn)行時轉(zhuǎn)換為物理機(jī)器并卸載虛擬機(jī)事件、異常以及中斷攔截監(jiān)測功能。
6.根據(jù)權(quán)利要求4或5所述的信息獲取方法,其特征是,所述的后啟動虛擬機(jī)模塊構(gòu)建后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī)是指步驟1. 1,利用操作系統(tǒng)內(nèi)核態(tài)、用戶態(tài)或內(nèi)核態(tài)混合用戶態(tài)的API調(diào)用,來實(shí)現(xiàn)在各個CPU核心上建立虛擬機(jī)監(jiān)控器,從而適用于多核硬件系統(tǒng);步驟1.2,保存寄存器內(nèi)容,分配內(nèi)存空間用于虛擬機(jī)監(jiān)控器運(yùn)行使用,包括但不限于堆??臻g,設(shè)置關(guān)鍵寄存器,配置輔助結(jié)構(gòu)體,如Intel VT技術(shù)中的VMXON結(jié)構(gòu)體并且修改相應(yīng)MSR的內(nèi)容啟用硬件虛擬化支持;步驟1. 3,進(jìn)行對Intel VT技術(shù)中的VMCS或AMD SVM的VMCB的配置,來建立虛擬機(jī)運(yùn)行環(huán)境并將本地系統(tǒng)裝入稍后運(yùn)行的唯一存在的虛擬機(jī)中,同時配置虛擬機(jī)監(jiān)控器環(huán)境和需要其處理的發(fā)生在虛擬機(jī)中的特殊事件并實(shí)現(xiàn)相應(yīng)處理函數(shù),在VMCS結(jié)構(gòu)體中指定虛擬機(jī)啟動后運(yùn)行的第一條指令為后啟動虛擬機(jī)模塊初始化繼續(xù)執(zhí)行的指令;步驟1. 4,啟動虛擬機(jī)并將處理器控制權(quán)交給虛擬機(jī),使用配置的虛擬機(jī)運(yùn)行環(huán)境并開啟虛擬機(jī)運(yùn)行;步驟1. 5,支持硬件虛擬化的處理器硬件會根據(jù)前述VMCS的配置信息,開始監(jiān)控和攔截需要虛擬機(jī)監(jiān)控器處理的敏感行為,保存虛擬機(jī)狀態(tài)到VMCS以及虛擬機(jī)監(jiān)控器的指定內(nèi)存區(qū)域并調(diào)用指定的處理函數(shù)進(jìn)行處理;步驟1.6,虛擬機(jī)監(jiān)控層完成對陷入事件的處理后,將處理器控制權(quán)重新轉(zhuǎn)交到虛擬機(jī),虛擬機(jī)中的操作系統(tǒng)繼續(xù)運(yùn)行,回到步驟1. 5并循環(huán)執(zhí)行。
7.根據(jù)權(quán)利要求5所述的信息獲取方法,其特征是,所述的后啟動虛擬機(jī)模塊卸載已構(gòu)建的后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī)是指步驟a、卸載后啟動虛擬機(jī)的命令從虛擬機(jī)中對每個CPU發(fā)出,在接收到卸載后啟動虛擬機(jī)的命令后,虛擬機(jī)監(jiān)控器接管控制權(quán),虛擬機(jī)監(jiān)控器所在的CPU的通用寄存器內(nèi)容被保存,之后專門的卸載虛擬機(jī)監(jiān)控器函數(shù)被調(diào)用;步驟b、任何一個CPU卸載后啟動虛擬機(jī)過程如下1)將虛擬機(jī)中該CPU的其余關(guān)鍵寄存器內(nèi)容從VMCS中讀出,然后在虛擬機(jī)監(jiān)控器中寫入CPU真實(shí)寄存器,使得虛擬機(jī)監(jiān)控器中的環(huán)境和虛擬機(jī)中環(huán)境完全相同;2)設(shè)置關(guān)鍵寄存器,關(guān)閉虛擬機(jī)模式;步驟c、當(dāng)所有CPU上的虛擬機(jī)監(jiān)控器卸載后,調(diào)用操作系統(tǒng)函數(shù)釋放創(chuàng)建虛擬機(jī)監(jiān)控器過程中所申請的內(nèi)存,卸載虛擬機(jī)監(jiān)控器所在操作系統(tǒng)驅(qū)動。
8.根據(jù)權(quán)利要求4或5所述的信息獲取方法,其特征是,所述的虛擬化內(nèi)存獲取模塊通過以下方式進(jìn)行加載步驟2. 1,在后啟動虛擬機(jī)模塊構(gòu)建后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī)過程的步驟1. 3之前開始加載虛擬化內(nèi)存獲取模塊;步驟2. 2,獲取虛擬機(jī)物理內(nèi)存地址和輸入輸出設(shè)備占用內(nèi)存物理地址的范圍,依此對包括但不限于Intel VT技術(shù)中的嵌套頁表技術(shù)或AMD SVM的快速虛擬化索引構(gòu)建全等頁表;步驟2. 3,在后啟動虛擬機(jī)模塊構(gòu)建后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī)過程的步驟1. 3之中注冊構(gòu)建的嵌套頁表的物理地址和嵌套頁面異常處理函數(shù),修改虛擬機(jī)寫CR3寄存器事件的處理函數(shù),使虛擬機(jī)在每次寫CR3寄存器并且需要獲取內(nèi)存內(nèi)容時執(zhí)行獲取內(nèi)存方法。
9.根據(jù)權(quán)利要求5所述的信息獲取方法,其特征是,所述的卸載已加載的虛擬化內(nèi)存獲取模塊是指步驟3. 1,在后啟動虛擬機(jī)模塊卸載后啟動虛擬機(jī)監(jiān)控器和虛擬機(jī)過程的步驟a之前開始卸載虛擬化內(nèi)存獲取模塊;步驟3. 2,調(diào)用操作系統(tǒng)函數(shù),釋放為存儲嵌套頁表相關(guān)的頁面結(jié)構(gòu)所申請的內(nèi)存;步驟3. 3,刪除VMCS中嵌套頁表的頁表指針,清空VMCS中對嵌套頁表的使用設(shè)置位。
10.根據(jù)權(quán)利要求4或5所述的信息獲取方法,其特征是,所述的獲得相應(yīng)位置原來內(nèi)存數(shù)據(jù)是指步驟4. 1,在接收到獲取內(nèi)存內(nèi)容的命令后,虛擬機(jī)監(jiān)控器接管控制權(quán),虛擬化內(nèi)存獲取模塊的內(nèi)存獲取控制子模塊接收到該獲取內(nèi)存內(nèi)容的命令后指示內(nèi)存內(nèi)容獲取子模塊進(jìn)行內(nèi)存獲取準(zhǔn)備工作,虛擬化內(nèi)存獲取模塊的內(nèi)存內(nèi)容獲取子模塊在嵌套頁表中指向虛擬機(jī)待獲取物理內(nèi)存地址范圍的頁表項(xiàng)上去掉寫權(quán)限位,使得虛擬機(jī)物理內(nèi)存不可寫; 步驟4. 2,設(shè)置權(quán)限完成后,虛擬化內(nèi)存獲取模塊請求虛擬機(jī)監(jiān)控器將處理器控制權(quán)重新轉(zhuǎn)交到虛擬機(jī),虛擬機(jī)中的操作系統(tǒng)和應(yīng)用程序繼續(xù)運(yùn)行;步驟4. 3,支持硬件虛擬化的處理器在虛擬機(jī)中嘗試寫虛擬機(jī)任何物理內(nèi)存時會陷入虛擬機(jī)管理器中并且尚未修改目標(biāo)內(nèi)存內(nèi)容;步驟4. 4,在虛擬機(jī)監(jiān)控器中,虛擬機(jī)事件攔截處理子模塊的嵌套頁表處理函數(shù)首先獲取該頁內(nèi)容并轉(zhuǎn)發(fā)到內(nèi)存內(nèi)容獲取子模塊,內(nèi)存內(nèi)容獲取子模塊將該內(nèi)容通過結(jié)果輸出子模塊利用操作系統(tǒng)提供的函數(shù)或自身實(shí)現(xiàn)的功能保存到外部設(shè)備或指定的內(nèi)存區(qū)域中,然后獲取該頁臨近或非臨近的0個以上頁面內(nèi)容并通過結(jié)果輸出子模塊利用操作系統(tǒng)提供的函數(shù)或自身實(shí)現(xiàn)的功能保存到外部設(shè)備或指定的內(nèi)存區(qū)域中,接著內(nèi)存內(nèi)容獲取子模塊查找關(guān)聯(lián)到這些頁面的嵌套頁表頁表項(xiàng),恢復(fù)它們的寫權(quán)限位確保不會重復(fù)陷入并更新已獲取內(nèi)存頁列表;步驟4. 5,虛擬化內(nèi)存獲取模塊請求虛擬機(jī)監(jiān)控器將處理器控制權(quán)重新轉(zhuǎn)交到虛擬機(jī), 虛擬機(jī)中的操作系統(tǒng)和應(yīng)用程序繼續(xù)運(yùn)行;步驟4. 6,虛擬機(jī)發(fā)生寫CR3寄存器事件時,該事件導(dǎo)致陷入虛擬機(jī)管理器中,虛擬機(jī)事件攔截處理子模塊調(diào)用虛擬機(jī)寫CR3寄存器事件的處理函數(shù);步驟4. 7,虛擬機(jī)寫CR3寄存器事件的的處理函數(shù)首先處理寫CR3寄存器事件,然后同步驟4. 4和步驟4. 5,其中步驟4. 4為查找尚未被獲取的1個或多個頁,獲取這些頁的內(nèi)容并通過結(jié)果輸出子模塊利用操作系統(tǒng)提供的函數(shù)或自身實(shí)現(xiàn)的功能保存到外部設(shè)備或指定的內(nèi)存區(qū)域中;步驟4. 8,當(dāng)虛擬機(jī)中待獲取物理內(nèi)存地址范圍上的所有內(nèi)存內(nèi)容獲取完成后,獲取過程結(jié)束,處理器控制權(quán)重新轉(zhuǎn)交到虛擬機(jī),虛擬機(jī)中的操作系統(tǒng)和應(yīng)用程序繼續(xù)運(yùn)行。
全文摘要
一種計算機(jī)應(yīng)用技術(shù)領(lǐng)域的計算機(jī)內(nèi)存數(shù)據(jù)準(zhǔn)確采集系統(tǒng),該系統(tǒng)包括后啟動虛擬機(jī)模塊和虛擬化內(nèi)存獲取模塊。本發(fā)明基于硬件虛擬化技術(shù),在操作系統(tǒng)和應(yīng)用程序運(yùn)行時動態(tài)加載虛擬機(jī)監(jiān)控器,在物理機(jī)器正在運(yùn)行時被轉(zhuǎn)換為虛擬機(jī)主機(jī)處的虛擬機(jī)不致招致顯著停機(jī)時間,通過控制虛擬機(jī)物理內(nèi)存到真實(shí)物理內(nèi)存的映射和權(quán)限管理完成對正在改寫內(nèi)存區(qū)域的識別和讀取相應(yīng)位置原來內(nèi)存數(shù)據(jù);可以準(zhǔn)確獲取指定時刻計算機(jī)內(nèi)存中的數(shù)據(jù)并且對內(nèi)存的改動較小且與已有操作系統(tǒng)和應(yīng)用程序耦合度極低;可以在操作系統(tǒng)和應(yīng)用程序運(yùn)行時動態(tài)卸載虛擬機(jī)監(jiān)控器,使得之前處于虛擬機(jī)主機(jī)處的虛擬機(jī)在運(yùn)行時被轉(zhuǎn)換為物理機(jī)器繼續(xù)運(yùn)行并不致招致顯著的停機(jī)時間。
文檔編號G06F12/08GK102231138SQ20111019008
公開日2011年11月2日 申請日期2011年7月8日 優(yōu)先權(quán)日2011年7月8日
發(fā)明者于淼, 戚正偉, 管海兵 申請人:上海交通大學(xué)