專利名稱:虛擬機實現(xiàn)方法與虛擬機的制作方法
技術(shù)領(lǐng)域:
本申請涉及虛擬機技術(shù)領(lǐng)域,特別是涉及一種虛擬機實現(xiàn)方法與虛擬機。
背景技術(shù):
目前的虛擬機通過軟件模擬的方式實現(xiàn)具有完整硬件系統(tǒng)功能的、運行在一個完全隔離環(huán)境中的完整計算機系統(tǒng)。通過虛擬機軟件,可以在一臺物理計算機上模擬出一臺或多臺虛擬的計算機,這些虛擬機完全就像真正的計算機那樣進行工作,例如,可以安裝操作系統(tǒng)、安裝應(yīng)用程序、訪問網(wǎng)絡(luò)資源等等。虛擬機的實現(xiàn)可簡單地分為兩大部分硬件環(huán)境的模擬(如CPU)和軟件環(huán)境的模 擬(如操作系統(tǒng)及系統(tǒng)服務(wù)等)。其中,在模擬硬件環(huán)境(如CPU)時,現(xiàn)有的虛擬機大部分采取的是純軟件模擬方案,也即,使用純軟件模擬出硬件如CPU的功能。以Bochs虛擬機為例,Bochs是一種十分輕便的使用C++編寫的開源IA-32 (x86)電腦模擬器,可以被編譯運用在多種模式下,Bochs的典型應(yīng)用是通過軟件方式提供X86PC的完整仿真,它可以仿真整個PC平臺,包括I/O設(shè)備、內(nèi)存和BIOS。甚至,通過改變配置,可以指定使用的CPU以及內(nèi)存大小等。但是,在使用軟件模擬硬件環(huán)境時,一方面,硬件操作指令集本身數(shù)量龐大,并且,使用軟件模擬,原來的一條機器指令會變?yōu)槎鄺l指令,相比真實執(zhí)行效率上會慢幾十倍甚至上百倍,造成軟件模擬硬件環(huán)境執(zhí)行效率低,且開發(fā)工作量巨大;另一方面,隨著技術(shù)發(fā)展,硬件不斷升級更新,使用軟件模擬硬件使得后期軟件運行和維護工作量巨大,成本高昂,造成后期維護困難;再一方面,需要結(jié)合硬件特性進行非常規(guī)編碼,速度優(yōu)化難度大,并且,隨著硬件的復(fù)雜度增加,很難保證所有情況下模擬的正確性。綜上所述,大部分現(xiàn)有的純軟件模擬硬件方案的虛擬機的適用范圍一般都是受限的,其只能模擬硬件如CPU功能的一個子集,只能解決部分特定的問題,模擬效果差,實現(xiàn)成本高。
發(fā)明內(nèi)容
本申請?zhí)峁┝艘环N虛擬機實現(xiàn)方法與虛擬機,以解決現(xiàn)有的純軟件模擬硬件方案的虛擬機模擬效果差,實現(xiàn)成本高的問題。為了解決上述問題,本申請公開了一種虛擬機實現(xiàn)方法,包括使用處理器的保護模式、分頁機制和中斷處理機制構(gòu)建虛擬機系統(tǒng),從操作系統(tǒng)中隔離出所述虛擬機系統(tǒng)所需的獨立的地址空間和中斷環(huán)境;所述虛擬機系統(tǒng)在隔離出的所述地址空間和中斷環(huán)境中,使用所述處理器運行虛擬機程序。優(yōu)選地,所述從操作系統(tǒng)中隔離出所述虛擬機系統(tǒng)所需的地址空間和中斷環(huán)境的步驟包括構(gòu)建所述虛擬機系統(tǒng)使用的控制寄存器CR3,通過對所述CR3進行設(shè)置使所述虛擬機系統(tǒng)使用的地址空間與所述操作系統(tǒng)使用的地址空間相隔離;構(gòu)建所述虛擬機系統(tǒng)使用的中斷描述符表IDT,使所述虛擬機系統(tǒng)優(yōu)先響應(yīng)所述虛擬機系統(tǒng)和所述操作系統(tǒng)的所有中斷。優(yōu)選地,所述構(gòu)建所述虛擬機系統(tǒng)使用的IDT,使所述虛擬機系統(tǒng)優(yōu)先響應(yīng)所述虛擬機系統(tǒng)和所述操作系統(tǒng)的所有中斷處理的步驟包括構(gòu)建所述虛擬機系統(tǒng)使用的IDT,使所述虛擬機系統(tǒng)優(yōu)先接收所述虛擬機系統(tǒng)和所述操作系統(tǒng)的所有中斷;當(dāng)所述中斷為硬件系統(tǒng)和/或外部設(shè)備產(chǎn)生的中斷時,將所述中斷反饋給所述操作系統(tǒng)進行中斷處理;當(dāng)所述中斷為所述虛擬機程序產(chǎn)生的中斷時,所述虛擬機系統(tǒng)對所述中斷進行中斷處理。 優(yōu)選地,所述虛擬機實現(xiàn)方法還包括設(shè)置快速系統(tǒng)調(diào)用入口,使所述快速系統(tǒng)調(diào)用入口被所述虛擬機系統(tǒng)調(diào)用;和/或,當(dāng)所述操作系統(tǒng)為多處理器系統(tǒng)和/或多核系統(tǒng)時,屏蔽多處理器之間的中斷和/或多核之間的中斷。優(yōu)選地,所述虛擬機系統(tǒng)在隔離出的所述地址空間和中斷環(huán)境中,使用所述處理器運行虛擬機程序的步驟包括通過內(nèi)核上下文切換將所述操作系統(tǒng)內(nèi)核切換為所述虛擬機系統(tǒng)內(nèi)核;在所述虛擬機系統(tǒng)內(nèi)核下,所述處理器在隔離出的所述地址空間和中斷環(huán)境 中運行所述虛擬機程序。優(yōu)選地,所述虛擬機系統(tǒng)在隔離出的所述地址空間和中斷環(huán)境中,使用所述處理器運行虛擬機程序的步驟包括所述虛擬機系統(tǒng)通過所述操作系統(tǒng)的線性地址到所述虛擬機程序的線性地址的二次映射方式,確定所述虛擬機程序的物理地址;所述虛擬機系統(tǒng)在隔離出的所述地址空間和中斷環(huán)境中,根據(jù)所述物理地址,使用所述處理器運行所述虛擬機程序。優(yōu)選地,所述虛擬機系統(tǒng)通過所述操作系統(tǒng)的線性地址到所述虛擬機程序的線性地址的二次映射方式,確定所述虛擬機程序的物理地址的步驟包括所述操作系統(tǒng)分配系統(tǒng)虛擬內(nèi)存,使用所述系統(tǒng)虛擬內(nèi)存加載運行所述虛擬機程序的相應(yīng)頁面,并獲取所述系統(tǒng)虛擬內(nèi)存的線性地址和所述相應(yīng)頁面的物理地址之間的對應(yīng)關(guān)系;所述操作系統(tǒng)建立所述系統(tǒng)虛擬內(nèi)存和所述虛擬機系統(tǒng)的任務(wù)虛擬內(nèi)存的映射關(guān)系;所述操作系統(tǒng)根據(jù)所述系統(tǒng)虛擬內(nèi)存的線性地址和所述相應(yīng)頁面的物理地址之間的對應(yīng)關(guān)系,以及所述系統(tǒng)虛擬內(nèi)存和所述任務(wù)虛擬內(nèi)存的映射關(guān)系,建立所述任務(wù)虛擬內(nèi)存和所述相應(yīng)頁面的物理地址之間的映射關(guān)系;所述虛擬機系統(tǒng)根據(jù)所述任務(wù)虛擬內(nèi)存和所述相應(yīng)頁面的物理地址之間的映射關(guān)系,確定所述虛擬機程序的物理地址。為了解決上述問題,本申請還公開了一種虛擬機,包括隔離模塊,用于使用處理器的保護模式、分頁機制和中斷處理機制構(gòu)建虛擬機系統(tǒng),從操作系統(tǒng)中隔離出所述虛擬機系統(tǒng)所需的獨立的地址空間和中斷環(huán)境;運行模塊,用于使所述虛擬機系統(tǒng)在隔離出的所述地址空間和中斷環(huán)境中,使用所述處理器運行虛擬機程序。優(yōu)選地,所述隔離模塊在從操作系統(tǒng)中隔離出所述虛擬機系統(tǒng)所需的地址空間和中斷環(huán)境時,構(gòu)建所述虛擬機系統(tǒng)使用的控制寄存器CR3,通過對所述CR3進行設(shè)置使所述虛擬機系統(tǒng)使用的地址空間與所述操作系統(tǒng)使用的地址空間相隔離;構(gòu)建所述虛擬機系統(tǒng)使用的中斷描述符表IDT,使所述虛擬機系統(tǒng)優(yōu)先響應(yīng)所述虛擬機系統(tǒng)和所述操作系統(tǒng)的所有中斷。優(yōu)選地,所述隔離模塊在構(gòu)建所述虛擬機系統(tǒng)使用的IDT,使所述虛擬機系統(tǒng)優(yōu)先響應(yīng)所述虛擬機系統(tǒng)和所述操作系統(tǒng)的所有中斷處理時,構(gòu)建所述虛擬機系統(tǒng)使用的IDT,使所述虛擬機系統(tǒng)優(yōu)先接收所述虛擬機系統(tǒng)和所述操作系統(tǒng)的所有中斷;當(dāng)所述中斷為硬件系統(tǒng)和/或外部設(shè)備產(chǎn)生的中斷時,將所述中斷反饋給所述操作系統(tǒng)進行中斷處理;當(dāng)所述中斷為所述虛擬機程序產(chǎn)生的中斷時,所述虛擬機系統(tǒng)對所述中斷進行中斷處理。優(yōu)選地,所述運行模塊,用于通過內(nèi)核上下文切換將所述操作系統(tǒng)內(nèi)核切換為所述虛擬機系統(tǒng)內(nèi)核;在所述虛擬機系統(tǒng)內(nèi)核下,所述處理器在隔離出的所述地址空間和中斷環(huán)境中運行所述虛擬機程序。優(yōu)選地,所述運行模塊,用于使所述虛擬機系統(tǒng)通過所述操作系統(tǒng)的線性地址到所述虛擬機程序的線性地址的二次映射方式,確定所述虛擬機程序的物理地址;使所述虛擬機系統(tǒng)在隔離出的所述地址空間和中斷環(huán)境中,根據(jù)所述物理地址,使用所述處理器運行所述虛擬機程序。優(yōu)選地,所述運行模塊在使所述虛擬機系統(tǒng)通過所述操作系統(tǒng)的線性地址到所述虛擬機程序的線性地址的二次映射方式,確定所述虛擬機程序的物理地址時,為所述操作系統(tǒng)分配系統(tǒng)虛擬內(nèi)存,使用所述系統(tǒng)虛擬內(nèi)存加載運行所述虛擬機程序的相應(yīng)頁面,并獲取所述系統(tǒng)虛擬內(nèi)存的線性地址和所述相應(yīng)頁面的物理地址之間的對應(yīng)關(guān)系;為所述操 作系統(tǒng)建立所述系統(tǒng)虛擬內(nèi)存和所述虛擬機系統(tǒng)使用的任務(wù)虛擬內(nèi)存的映射關(guān)系;使所述操作系統(tǒng)根據(jù)所述系統(tǒng)虛擬內(nèi)存的線性地址和所述相應(yīng)頁面的物理地址之間的對應(yīng)關(guān)系,以及所述系統(tǒng)虛擬內(nèi)存和所述任務(wù)虛擬內(nèi)存的映射關(guān)系,建立所述任務(wù)虛擬內(nèi)存和所述相應(yīng)頁面的物理地址之間的映射關(guān)系;使所述虛擬機系統(tǒng)根據(jù)所述任務(wù)虛擬內(nèi)存和所述相應(yīng)頁面的物理地址之間的映射關(guān)系,確定所述虛擬機程序的物理地址。與現(xiàn)有技術(shù)相比,本申請具有以下優(yōu)點本申請的方案利用處理器架構(gòu)的保護模式、分頁機制及中斷處理機制等特性,隔離操作系統(tǒng),在獨立的地址空間、中斷環(huán)境下,使任意代碼直接在處理器上安全執(zhí)行,無須做任何軟件模擬。相比傳統(tǒng)的軟件模擬方式,本申請的方案可以完全發(fā)揮出處理器的能力,執(zhí)行效率更高,執(zhí)行結(jié)果更準確,并且開發(fā)、維護成本更低,同時也具備傳統(tǒng)軟件模擬方式的跨平臺移植的特點,有效解決了現(xiàn)有的純軟件模擬硬件方案的虛擬機模擬效果差,實現(xiàn)成本高的問題。
圖I是根據(jù)本申請實施例一的一種虛擬機實現(xiàn)方法的步驟流程圖;圖2是根據(jù)本申請實施例二的一種虛擬機實現(xiàn)方法的步驟流程圖;圖3是根據(jù)本申請實施例三的一種虛擬機實現(xiàn)方法的步驟流程圖;圖4是根據(jù)本申請實施例四的一種虛擬機的結(jié)構(gòu)框圖。
具體實施例方式為使本申請的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖和具體實施方式
對本申請作進一步詳細的說明。實施例一參照圖1,示出了根據(jù)本申請實施例一的一種虛擬機實現(xiàn)方法的步驟流程圖。本實施例的虛擬機實現(xiàn)方法包括以下步驟步驟S102 :使用處理器的保護模式、分頁機制和中斷處理機制構(gòu)建虛擬機系統(tǒng),從操作系統(tǒng)中隔離出虛擬機系統(tǒng)所需的獨立的地址空間和中斷環(huán)境。保護模式是處理器(如CPU)的原生模式,在該模式下,涵蓋了處理器所有的特點和指令,有著最好的性能。當(dāng)操作系統(tǒng)在保護模式下時,INTEL架構(gòu)允許將線性地址直接映射到一個大的物理空間(比如4GB的RAM)或者間接的(使用分頁)映射到一個較小的內(nèi)存和磁盤存儲空間。后一種映射線性地址空間的方法通常被稱作虛擬內(nèi)存。當(dāng)使用分頁時,處理器將線性地址空間劃分成固定尺寸的頁,這些頁可以被映射到物理內(nèi)存或者磁盤存儲空間。當(dāng)一個進程(或者任務(wù))引用一個內(nèi)存中的邏輯地址的時候,處理器將這個地址轉(zhuǎn)換為線性地址,然后使用分頁機制將線性地址轉(zhuǎn)換為相應(yīng)的物理地址。而中斷是一種改變處理器正常指令流的異步事件,對中斷的處理是處理器必不可缺的處理之一。本實施例中,使用處理器的保護模式、分頁機制和中斷處理機制構(gòu)建出一個虛擬機系統(tǒng),該虛擬機系統(tǒng)包括有從操作系統(tǒng)(也即真實操作系統(tǒng))中隔離出的獨立的地址空間和中斷環(huán)境,在該虛擬機系統(tǒng)下運行的程序可在受控的環(huán)境下安全、正確地執(zhí)行?!案綦x”包括內(nèi)容隔離和控制權(quán)隔離兩方面,內(nèi)容隔離包括地址空間、執(zhí)行上下文環(huán)境(如寄存器等)的獨立;控制權(quán)隔離表示對所有的軟硬件事件的優(yōu)先處理權(quán)(即中斷處理),隔離出的獨立 的地址空間和中斷環(huán)境內(nèi)容獨立、控制權(quán)優(yōu)先。與使用純軟件方式模擬硬件環(huán)境相比,使用硬件機制實現(xiàn)虛擬機真實、正確、效率高,避免了軟件方式模擬造成的效率低、復(fù)雜工況下虛擬機真實性、正確性難以保證的問題。步驟S104 :虛擬機系統(tǒng)在隔離出的地址空間和中斷環(huán)境中,使用處理器運行虛擬機程序。本實施例中,直接使用處理器如CPU處理虛擬機程序,直接執(zhí)行虛擬機程序的機器指令,無須機器指令的軟件模擬。通過本實施例,利用處理器架構(gòu)的保護模式、分頁機制及中斷處理機制等特性,隔離操作系統(tǒng),在獨立的地址空間、中斷環(huán)境下,使任意代碼直接在處理器上安全執(zhí)行,無須做任何軟件模擬。相比傳統(tǒng)的軟件模擬方式,本實施例可以完全發(fā)揮出處理器的能力,執(zhí)行效率更高,執(zhí)行結(jié)果更準確,并且開發(fā)、維護成本更低,同時也具備傳統(tǒng)軟件模擬方式的跨平臺移植的特點,有效解決了現(xiàn)有的純軟件模擬硬件方案的虛擬機模擬效果差,實現(xiàn)成本高的問題。實施例二參照圖2,示出了根據(jù)本申請實施例二的一種虛擬機實現(xiàn)方法的步驟流程圖。本實施例中,主要從CPU (中央處理器)的執(zhí)行實現(xiàn)和MMU (內(nèi)存管理單元)的內(nèi)存映射兩方面說明虛擬機的實現(xiàn)。CPU是實現(xiàn)特定平臺機器指令的執(zhí)行、維護相關(guān)的執(zhí)行上下文環(huán)境,以及實現(xiàn)相關(guān)平臺的特定機制,如缺頁、異常、中斷等的功能元件;而1|犯則是CPU執(zhí)行指令過程中必不可少的支持元件,它一方面提供CPU正常執(zhí)行所需的內(nèi)存頁映射,另一方面建立控制端(進程內(nèi)存管理)與執(zhí)行端的內(nèi)存映射(控制端的進程內(nèi)存管理可以理解為虛擬機系統(tǒng)中的一個組件,運行在真實操作系統(tǒng)中;執(zhí)行端是虛擬機中創(chuàng)建的任務(wù),運行在隔離的虛擬機環(huán)境中),從而提供對執(zhí)行端內(nèi)存的完全訪問控制。本實施例的虛擬機實現(xiàn)方法包括以下步驟步驟S202 :利用CPU的保護模式、分頁機制及中斷處理機制,隔離操作系統(tǒng),在獨立的地址空間、中斷環(huán)境下運行虛擬機程序。
優(yōu)選地,可以利用INTEL架構(gòu)下的CPU的保護模式、分頁機制及中斷處理機制,還可以利用INTEL架構(gòu)的調(diào)試支持、性能監(jiān)測支持等特性,可對運行的代碼進行調(diào)試、跟蹤、分析等。隔離操作系統(tǒng),構(gòu)建獨立的地址空間、中斷環(huán)境以運行虛擬機程序,進行調(diào)試、跟蹤、分析等主要包括構(gòu)建地址空間,包括構(gòu)建CR3 (控制寄存器3);構(gòu)建任務(wù)環(huán)境,包括構(gòu)建⑶T (全局描述符表)、LDT (局部描述符表)、TSS (任務(wù)狀態(tài)段);構(gòu)建中斷環(huán)境,包括構(gòu)建IDT (中斷描述符表)、APIC (高級可編程中斷控制器);構(gòu)建任務(wù)切換,包括設(shè)置CR3、⑶TR (⑶T寄存器)、IDTR (IDT寄存器)、APIC、TR(任務(wù)狀態(tài)段寄存器)、CR (控制寄存器)等,使用軟任務(wù)切換方式; 構(gòu)建缺頁處理,包括響應(yīng)正常的頁映射或進行異常處理;構(gòu)建異常處理,包括響應(yīng)調(diào)試事件或啟動異常處理機制;構(gòu)建中斷處理,包括浮點同步事件處理,其他的硬件中斷處理(如時鐘、鼠標、鍵盤等等);構(gòu)建交互控制,包括提供數(shù)據(jù)映射、上下文設(shè)置等控制、調(diào)試方法。上述處理中,通過構(gòu)建虛擬機系統(tǒng)使用的CR3,對CR3進行設(shè)置可以實現(xiàn)虛擬機系統(tǒng)使用的地址空間與真實操作系統(tǒng)使用的地址空間相隔離;通過構(gòu)建虛擬機系統(tǒng)使用的IDT,使虛擬機系統(tǒng)優(yōu)先響應(yīng)虛擬機系統(tǒng)和真實操作系統(tǒng)的所有中斷,可以實現(xiàn)虛擬機系統(tǒng)所需的中斷環(huán)境與真實操作系統(tǒng)中斷環(huán)境的隔離。具體地,上述隔離操作系統(tǒng),構(gòu)建獨立的地址空間、中斷環(huán)境以運行虛擬機程序,進行調(diào)試、跟蹤、分析的實現(xiàn)包括(I)構(gòu)建地址空間在開啟分頁機制的情況下,CPU對內(nèi)存的存取需要依靠MMU進行線性地址到物理地址的轉(zhuǎn)換,而MMU進行這些轉(zhuǎn)換需要提供一張映射表,即頁表(Page Table)。另外,CPU根據(jù)頁表項中的部分設(shè)置提供硬件權(quán)限保護機制。每個任務(wù)都有自己獨立的頁表以描述自己獨立的地址空間,整個頁表的地址,SP頁目錄基址被保存在CR3寄存器(page-directory base register)中。正確設(shè)置CR3及頁表項的值,就可以利用CPU的硬件機制,既可保護任務(wù)之間的地址空間隔離,又可使任務(wù)之間共享同一物理內(nèi)存頁,還可對執(zhí)行指令權(quán)限、內(nèi)存訪問權(quán)限進行保護。(2)構(gòu)建任務(wù)環(huán)境在保護模式下,各個內(nèi)存段的屬性被保存在全局描述符表(GDT)中,如代碼段(CS)、數(shù)據(jù)段(DS,ES, FS和GS)、堆棧段(SS)等,CPU在存取內(nèi)存時,通過選擇子(selector)定位到相應(yīng)的內(nèi)存描述符,以驗證諸如權(quán)限、類型、起始、大小等屬性。另外,中斷描述符表(IDT )、任務(wù)狀態(tài)段(TSS )、本地描述符表(LDT )等系統(tǒng)段的描述也儲存在這里。正確構(gòu)造⑶T并設(shè)置相應(yīng)的描述符,是利用CPU其他硬件機制的前提,比如構(gòu)造IDT、構(gòu)造TSS、權(quán)限保護等。(3)構(gòu)建中斷環(huán)境及系統(tǒng)調(diào)用入口當(dāng)隔離虛擬機系統(tǒng)的中斷環(huán)境時,可以構(gòu)建虛擬機系統(tǒng)使用的IDT,使虛擬機系統(tǒng)優(yōu)先響應(yīng)虛擬機系統(tǒng)和真實操作系統(tǒng)的所有中斷處理,包括構(gòu)建虛擬機系統(tǒng)使用的IDT,使虛擬機系統(tǒng)優(yōu)先接收虛擬機系統(tǒng)和真實操作系統(tǒng)的所有中斷;當(dāng)中斷為硬件系統(tǒng)和/或外部設(shè)備產(chǎn)生的中斷時,將中斷反饋給真實操作系統(tǒng)進行中斷處理;當(dāng)中斷為虛擬機程序產(chǎn)生的中斷時,虛擬機系統(tǒng)對中斷進行中斷處理。也即,隔離的虛擬機系統(tǒng)完全控制硬件環(huán)境,需要在第一時間響應(yīng)所有的中斷處理,即需要構(gòu)造一個新的IDT。同時,還可以對快速系統(tǒng)調(diào)用的入口進行重新設(shè)置,使快速系統(tǒng)調(diào)用入口能夠被虛擬機系統(tǒng)調(diào)用。另外,在多核(CPU)的環(huán)境(即真實操作系統(tǒng)為多處理器系統(tǒng)和/或多核系統(tǒng))下,還需要屏蔽核間中斷,即,多處理之間的中斷和/或多核之間的中斷。具體地,對中斷環(huán)境及系統(tǒng)調(diào)用入口的構(gòu)建按處理方式分為以下四種情況(A)硬件系統(tǒng)、外部設(shè)備的中斷事件如時鐘、鼠標、鍵盤等。
這類事件虛擬機系統(tǒng)不做處理,直接反饋給真實操作系統(tǒng)并由真實操作系統(tǒng)進行處理,以保證真實操作系統(tǒng)的正常運轉(zhuǎn),如進行正常的任務(wù)切換、窗口響應(yīng)等。此類中斷按中斷號分布02H :非屏蔽中斷(NMI Interrupt)14H"1FH =Intel保留的中斷向量20H 29H :真實操作系統(tǒng)保留的中斷向量2! :真實操作系統(tǒng)保留的中斷向量30H 255H:其他系統(tǒng)運行時分配的中斷(如時鐘、鼠標、鍵盤等)(B)虛擬機任務(wù)的中斷(異常)事件如缺頁異常(#PF)、斷點陷阱(#BP)、通用保護錯誤(#GP)等。這類事件需要虛擬機系統(tǒng)替代真實操作系統(tǒng)加以處理,模擬真實操作系統(tǒng)在此類事件下的行為,以保證虛擬機中的任務(wù)按照正確的流程運行。如響應(yīng)正常的頁面映射(PageIn)或進行異常處理(SEH)等。此類中斷按中斷號分布OOH Divide Error Exception (#DE)OlH Debug Exception (#DB)03H !Breakpoint Trap (#BP)04H : Over flow Trap (#0F)05H BOUND Range Exceeded (#BR)06H Invalid Opcode Code (#UD)07H Device Not Available (#NM)08H Double Fault Exception (#DF)09H Coprocessor Segment OverrunOAH Invalid TSS Exception (#TS)OBH Segment Not Present (#NP)OCH Stack Fault Exception (#SS)ODH General Protection (#GP)OEH :Page_Fault Exception (#PF)
OFH :Intel reservedIOH x87FPU Error (#MF)IlH Align Check Exception (#AC)12H !Machine Check Exception (#MC)13H SIMD FPU Exception (#XM)2AH Get Tick Count Handler2BH User-Mode Callback Return2CH Debug Assertion Handler
2DH Debug Service Handler2EH System Call Service Handler(C)虛擬機任務(wù)的快速系統(tǒng)調(diào)用指令隔離操作系統(tǒng)還需要重新設(shè)置虛擬機任務(wù)環(huán)境中的快速系統(tǒng)調(diào)用指令所對應(yīng)的MSR寄存器,以使其被虛擬機系統(tǒng)調(diào)用。(D)多核(CPU)系統(tǒng)的核間中斷也即,當(dāng)操作系統(tǒng)為多處理器系統(tǒng)和/或多核系統(tǒng)時,多處理器之間和/或多核之間的中斷屏蔽。在多核(CPU)的環(huán)境下,隔離操作系統(tǒng)還需要修改高級可編程中斷控制器(APIC)的本地向量表(LVT),以屏蔽核間中斷。(4)構(gòu)建任務(wù)狀態(tài)段按照x86架構(gòu)的規(guī)范,每個CPU任務(wù)的狀態(tài)描述需要存儲在一個叫做任務(wù)狀態(tài)段(TSS)的數(shù)據(jù)結(jié)構(gòu)中,并在⑶T中分配一個描述符來描述此TSS的位置、大小等信息。CPU通過特定的選擇子——TR寄存器來索引指定的任務(wù)狀態(tài)。TSS中需要正確設(shè)定系統(tǒng)環(huán)境(0環(huán))的堆棧入口(SS:ESP)以保證CPU在處理中斷、異常時能夠正確的進行用戶模式/系統(tǒng)模式的環(huán)境切換。正確設(shè)置TSS是任務(wù)切換的前提條件。(5)構(gòu)建任務(wù)切換S卩,真實操作系統(tǒng)任務(wù)與虛擬機任務(wù)之間的任務(wù)切換,也就是虛擬機控制端所屬的任務(wù)(真實操作系統(tǒng)任務(wù))與虛擬機內(nèi)執(zhí)行的任務(wù)之間的任務(wù)切換。x86架構(gòu)的任務(wù)切換分為硬件任務(wù)切換和軟件任務(wù)切換兩種方式。和現(xiàn)代操作系統(tǒng)(Windows、Linux)類似,本實施例所選擇的方式也是軟任務(wù)切換,但不同于現(xiàn)代操作系統(tǒng)的是,虛擬機系統(tǒng)在進行任務(wù)切換時不僅需要進行任務(wù)隔離(切換),還需要將操作系統(tǒng)也進行隔離(切換)。在前述處理的基礎(chǔ)上,在進行軟任務(wù)切換前,還需要做的一項準備工作就是構(gòu)造任務(wù)切換的上下文(Context)。不同于現(xiàn)代操作系統(tǒng)的是,虛擬機系統(tǒng)在進行任務(wù)切換時不僅需要準備任務(wù)上下文——用于任務(wù)切換,還需要準備內(nèi)核上下文——用于操作系統(tǒng)切換(隔離)。其中(H)任務(wù)上下文虛擬機中的任務(wù)環(huán)境就是標準的x86任務(wù)環(huán)境。
由于用戶層與系統(tǒng)層是通過中斷/異常的方式進行交互的,所以任務(wù)上下文首先是一個標準的中斷/異常棧幀(取決于IDT對應(yīng)描述符的類型設(shè)置)。快速系統(tǒng)調(diào)用/返回最終也轉(zhuǎn)換為中斷棧幀統(tǒng)一處理。在中斷/異常棧幀之后保存其他相關(guān)的寄存器(如通用寄存器、段寄存器等),為內(nèi)核上下文切換做準備。用戶層通過中斷/異常/系統(tǒng)調(diào)用等方式進入內(nèi)核,內(nèi)核經(jīng)過適當(dāng)?shù)奶幚砗?,再通過對應(yīng)的中斷返回/異常返回/快速系統(tǒng)調(diào)用返回等方式返回到用戶層繼續(xù)執(zhí)行。(I)內(nèi)核上下文內(nèi)核上下文切換的目的是為了隔離操作系統(tǒng),即在真實操作系統(tǒng)內(nèi)核與虛擬機系統(tǒng)內(nèi)核之間相互切換。當(dāng)運行虛擬機程序時,通過內(nèi)核上下文切換將真實操作系統(tǒng)內(nèi)核切換為虛擬機系統(tǒng)內(nèi)核;在虛擬機系統(tǒng)內(nèi)核下,處理器在隔離出的地址空間和中斷環(huán)境中運行虛擬機程序。內(nèi)核上下文切換的實現(xiàn)是基于兩個內(nèi)核棧的切換 首先在源內(nèi)核棧內(nèi),保存相關(guān)寄存器(如通用寄存器、段寄存器等),保存源內(nèi)核的系統(tǒng)設(shè)置(如⑶T、IDT、CRO、CR4等),保存源棧指針(ESP),然后切換到目標內(nèi)核棧;在目標內(nèi)核棧內(nèi),保存源內(nèi)核的系統(tǒng)設(shè)置并切換到目標內(nèi)核的系統(tǒng)設(shè)置(如CR3、TSS等),設(shè)置目標內(nèi)核的系統(tǒng)設(shè)置(如⑶T、IDT、CRO、CR4等);至此,完成內(nèi)核上下文的切換,即真實操作系統(tǒng)內(nèi)核與虛擬機系統(tǒng)內(nèi)核切換完畢。然后繼續(xù)執(zhí)行目標內(nèi)核中的后續(xù)操作如在虛擬機內(nèi)核中,表示之前進入內(nèi)核的事件已經(jīng)處理完畢,則通過之前進入內(nèi)核的對應(yīng)方式返回到用戶層繼續(xù)執(zhí)行;如在操作系統(tǒng)內(nèi)核中,表示虛擬機中的任務(wù)有事件需要虛擬機系統(tǒng)處理,則通過調(diào)用路徑返回虛擬機系統(tǒng)的控制端(虛擬機系統(tǒng)中的一個組件,運行在真實操作系統(tǒng)中),由控制端進行相應(yīng)的處理。以下,以一個具體實例為例,說明進行了上述處理后,真實操作系統(tǒng)與虛擬機系統(tǒng)的任務(wù)切換和執(zhí)行。例如,將虛擬機系統(tǒng)簡稱為a,真實操作系統(tǒng)簡稱為A,a本身只是A的一個任務(wù),簡稱為T,T參與A正常的任務(wù)調(diào)度。而T (a)創(chuàng)建的在虛擬機中執(zhí)行的任務(wù)簡稱為t,t附屬于T,也就是說t所能使用的時間片就是A分配給T的時間片,T與t共用此時間片,不會造成A額外的開銷,從而保證了 A的穩(wěn)定運行,包括(Al) T在A的任務(wù)隊列中排隊,等待被調(diào)度執(zhí)行。(BI) T被調(diào)度繼續(xù)執(zhí)行。(Cl) T在處理過程中,如果時間片用完,則隨時跳到(Al)。(Dl)T處理完畢,切換到t繼續(xù)執(zhí)行。(El) t產(chǎn)生事件,切換到T,如果t未結(jié)束則跳到(Cl)進行處理。(Fl) t 已結(jié)束。在x86平臺上(x64原理相同,只是數(shù)據(jù)結(jié)構(gòu)略有不同,本申請中所有提及x86架構(gòu)的均適用于x64),一個任務(wù)(Task)的狀態(tài)包括地址空間及各寄存器的值(包括系統(tǒng)寄存器的設(shè)置,如TR、CR、⑶T、IDT和各種MSR等)。一個任務(wù)的創(chuàng)建就是要正確設(shè)置這些狀態(tài)。同理,任務(wù)隔離(切換)就是要確保這些狀態(tài)得以保存和恢復(fù)。通過上述處理,實現(xiàn)了真實操作系統(tǒng)和虛擬機系統(tǒng)的任務(wù)隔離。
步驟S202利用CPU固有特性,可使任意代碼直接在CPU上安全執(zhí)行。相比傳統(tǒng)的軟件模擬方式,可以完全發(fā)揮出CPU的能力,執(zhí)行效率更高,執(zhí)行結(jié)果更準確,并且開發(fā)、維護成本更低,同時也具備傳統(tǒng)軟件模擬方式的跨平臺移植的特點。另一方面,由于被執(zhí)行的代碼是在屏蔽了操作系統(tǒng)的獨立環(huán)境中執(zhí)行的,產(chǎn)生的任何結(jié)果都不會影響本機系統(tǒng)(即真實操作系統(tǒng)),同時,由于常規(guī)的調(diào)試方法(如WinDbg等)無法進行調(diào)試跟蹤,使得步驟S202中的處理可用于進行一些特殊的任務(wù)處理,如調(diào)試跟蹤處理等。步驟S204 :在虛擬機程序運行過程中,對虛擬機程序任務(wù)進行執(zhí)行控制和調(diào)試。一個虛擬機任務(wù)的執(zhí)行除了前述的執(zhí)行機制,還需要提供相應(yīng)的可供執(zhí)行的內(nèi)容。并且,在虛擬機任務(wù)的執(zhí)行過程中會產(chǎn)生各種軟硬件事件需要虛擬機系統(tǒng)進行響應(yīng)處理,比如缺頁、系統(tǒng)調(diào)用、異常、鼠標鍵盤、時鐘中斷等。同時,虛擬機系統(tǒng)本身就是一個調(diào)試器,可以對虛擬機內(nèi)執(zhí)行的任務(wù)做到完全控制,比如設(shè)置斷點、修改內(nèi)容、改變流程等。通過本步驟,可以實現(xiàn)對虛擬機程序任務(wù)執(zhí)行的控制和調(diào)制。
下面依次對虛擬機任務(wù)執(zhí)行過程中涉及的內(nèi)存映射、事件處理、以及任務(wù)控制和調(diào)試進行說明。(I)內(nèi)存映射內(nèi)存映射分為兩部分在虛擬機系統(tǒng)的任務(wù)地址空間內(nèi)的內(nèi)存映射(任務(wù)內(nèi)存映射)和在虛擬機系統(tǒng)控制端(運彳丁在真實t呆作系統(tǒng))地址空間內(nèi)的內(nèi)存映射(系統(tǒng)內(nèi)存映射)。(A)在虛擬機系統(tǒng)的任務(wù)地址空間內(nèi)在x86分頁機制下,CPU對內(nèi)存的訪問需要通過MMU解析頁表來得到線性地址所對應(yīng)的物理內(nèi)存地址。這一部分是硬件執(zhí)行機制所要求的標準的操作,即設(shè)置線性地址到物理地址的映射關(guān)系,也就是設(shè)置線性地址所對應(yīng)的頁表項中的物理頁地址,同時設(shè)置相應(yīng)的屬性,如
讀/與、權(quán)限等。(B)在虛擬機系統(tǒng)控制端地址空間內(nèi)x86的分頁機制可以有效的保護任務(wù)間的地址空間相互隔離,不同任務(wù)之間無法直接訪問彼此的地址空間。但是,作為虛擬機系統(tǒng)需要完全控制被運行的虛擬機任務(wù),所以還需要提供一種機制,可以將被運行的虛擬機任務(wù)的地址空間也映射進虛擬機系統(tǒng)控制端的地址空間內(nèi),從而方便實現(xiàn)在虛擬機系統(tǒng)控制端內(nèi)就可以對被運行的虛擬機任務(wù)進行完全的內(nèi)容控制。由于不同地址空間的線性地址可能發(fā)生沖突,比如兩個地址空間的同一線性地址都被占用的情況,源地址空間的線性地址無法保證能夠映射進目標地址空間的同一線性地址,所以,虛擬機系統(tǒng)采用線性地址到線性地址的二次映射方式來實現(xiàn)這一機制,比如源地址空間的線性地址601000H映射為目標地址空間的線性地址401000H。虛擬機系統(tǒng)將這種映射關(guān)系稱之為“影子映射”。這種實現(xiàn)方式類似軟件模擬MMU功能,所不同的是MMU為線性地址到物理地址的映射。例如,虛擬機系統(tǒng)在隔離出的地址空間和中斷環(huán)境中,使用處理器運行虛擬機程序時,虛擬機系統(tǒng)通過虛擬機系統(tǒng)的線性地址到虛擬機程序的線性地址的二次映射方式,確定虛擬機程序的物理地址;進而,虛擬機系統(tǒng)在隔離出的地址空間和中斷環(huán)境中,根據(jù)物理地址,使用處理器運行虛擬機程序。更具體地,在虛擬機系統(tǒng)通過虛擬機系統(tǒng)的線性地址到虛擬機程序的線性地址的二次映射方式,確定虛擬機程序的物理地址時,虛擬機系統(tǒng)分配系統(tǒng)虛擬內(nèi)存,使用系統(tǒng)虛擬內(nèi)存加載運行虛擬機程序的相應(yīng)頁面,并獲取系統(tǒng)虛擬內(nèi)存的線性地址和相應(yīng)頁面的物理地址之間的對應(yīng)關(guān)系;虛擬機系統(tǒng)建立系統(tǒng)虛擬內(nèi)存和運行虛擬機程序使用的任務(wù)虛擬內(nèi)存的映射關(guān)系;虛擬機系統(tǒng)根據(jù)系統(tǒng)虛擬內(nèi)存的線性地址和相應(yīng)頁面的物理地址之間的對應(yīng)關(guān)系,和系統(tǒng)虛擬內(nèi)存和任務(wù)虛擬內(nèi)存的映射關(guān)系,建立任務(wù)虛擬內(nèi)存和相應(yīng)頁面的物理地址之間的映射關(guān)系;虛擬機系統(tǒng)根據(jù)任務(wù)虛擬內(nèi)存和相應(yīng)頁面的物理地址之間的映射關(guān)系,確定虛擬機程序的物理地址。下面,以一個實例說明上述映射流程,該流程包括(A2)虛擬機程序任務(wù)訪問內(nèi)存地址401000H處,由于此頁還未加載,觸發(fā)缺頁中斷進入虛擬機內(nèi)核。 (B2)經(jīng)過前述任務(wù)切換機制,虛擬機系統(tǒng)從虛擬機環(huán)境切換到當(dāng)前操作系統(tǒng)環(huán)境,并將此缺頁信息返回給控制端(運行在真實操作系統(tǒng))。(C2)控制端獲得對應(yīng)虛擬機程序任務(wù)內(nèi)存地址401000H處的一頁內(nèi)容(比如從磁盤文件中)及其對應(yīng)的內(nèi)存屬性。(D2)控制端分配一頁大小的虛擬內(nèi)存,假設(shè)分配得到的線性地址為601000H,對應(yīng)的物理地址為A00000H,并將剛獲得的一頁內(nèi)容拷貝至此。(E2)控制端建立虛擬機程序任務(wù)內(nèi)存地址401000H到控制端內(nèi)存地址601000H的
“影子映射”。(F2)控制端修改虛擬機程序任務(wù)線性地址401000H所對應(yīng)的頁表項,將其也映射在物理內(nèi)存A00000H處,并將獲得的內(nèi)存屬性也填上。至此,兩種映射都已建立完畢。再經(jīng)過前述的任務(wù)切換機制,虛擬機系統(tǒng)從當(dāng)前操作系統(tǒng)環(huán)境切換到虛擬機環(huán)境,進入虛擬機內(nèi)核并通過中斷返回。虛擬機程序任務(wù)由于內(nèi)存地址401000H處的內(nèi)存已經(jīng)得到正確加載,可以繼續(xù)執(zhí)行后續(xù)的流程。當(dāng)虛擬機系統(tǒng)的控制端利用“影子映射”機制直接訪問虛擬機程序任務(wù)的地址空間時,包括(A3)假設(shè)控制端需要讀取虛擬機任務(wù)內(nèi)存地址401234H處的一個DWORD。(B3)計算401234H所對應(yīng)的頁起始地址為401000H,偏移234H。(C3)查找“影子映射”獲得401000H的映射頁為601000H,即控制端601000H偏移234H處即為虛擬機程序任務(wù)內(nèi)存地址401234H處。(D3)直接讀出 601234H 處的一個 DWORD。通過上述處理,實現(xiàn)了虛擬機系統(tǒng)內(nèi)存地址的控制和管理。(2)事件處理虛擬機程序任務(wù)在執(zhí)行的過程中不可避免的會被各種軟硬件事件所中斷,下面對需要虛擬機系統(tǒng)進行處理的中斷事件進行介紹。(H)異常需要虛擬機系統(tǒng)處理的中斷事件類型中絕大多數(shù)都屬于異常。異常事件的產(chǎn)生分為兩種情況,需要分別進行處理(Hl)虛擬機程序任務(wù)在執(zhí)行過程中產(chǎn)生了異常(如非法內(nèi)存訪問、無效指令等)。在這種情況下,虛擬機系統(tǒng)的處理方式就是模擬真實操作系統(tǒng)的異常處理機制(如SEH、VEH> Unhandled Exception Handler等),構(gòu)造異常處理上下文,并執(zhí)行虛擬機任務(wù)的異常處理回調(diào)函數(shù)。(H2)虛擬機系統(tǒng)在調(diào)試虛擬機程序任務(wù)時產(chǎn)生的調(diào)試事件(如觸發(fā)了斷點等)。在這種情況下,虛擬機系統(tǒng)提供接口與操作者交互,并按照操作者的意圖進行處理。比如取消斷點、修改虛擬機任務(wù)的上下文、改變虛擬機任務(wù)的流程等。(I)頁異常即中斷OEH :Page_Fault Exception (#PF)。頁異常分為正常缺頁和訪問錯誤兩種。正常缺頁時可依照前述“內(nèi)存映射”部分的正常缺頁的處理流程。但如果發(fā)生的是訪問錯誤,則需要轉(zhuǎn)入上面(H)中的異常處理流程進行處理。
(J)浮點同步事件即中斷07H :Device Not Available (#NM)。x86系統(tǒng)中的x87FPU、MMX、SSE/SSE2/SSE3等處理單元也有一套相應(yīng)的上下文環(huán)境,相比傳統(tǒng)整數(shù)處理單元的上下文要大得多,頻繁的存儲/恢復(fù)會比較低效。另一方面,大多數(shù)任務(wù)很少使用或根本不使用這些指令集,尤其是在操作系統(tǒng)任務(wù)調(diào)度所分配的某個執(zhí)行時間片內(nèi)更少會碰到使用的情況。因此,x86架構(gòu)提供了一套按需存儲/恢復(fù)這些處理單元上下文的機制首先,在控制寄存器中設(shè)置相應(yīng)標志位標識這些處理單元無效。然后,在任務(wù)運行過程中第一次使用了這些處理單元的指令集時,由于這些處理單元被標識為無效,則會觸發(fā)此中斷。此時才需要正確的存儲/恢復(fù)這些處理單元上下文,并將控制寄存器中相應(yīng)標志位復(fù)位,以標識這些處理單元有效,繼而可以正確的使用。真實操作系統(tǒng)正是這樣管理這些處理單元上下文的,虛擬機系統(tǒng)也必須如此這般管理這些處理單元上下文,才不會破壞整個真實操作系統(tǒng)的運行環(huán)境。(K)系統(tǒng)服務(wù)調(diào)用即中斷2EH :System Call Service Handler 或 sysenter/syscall 指令(通過MSR的設(shè)置進入/退出內(nèi)核)。任何程序的執(zhí)行都離不開系統(tǒng)服務(wù),所以,在需要虛擬機系統(tǒng)處理的中斷事件中,大多數(shù)都是系統(tǒng)服務(wù)調(diào)用。在系統(tǒng)調(diào)用發(fā)生時,會傳遞系統(tǒng)服務(wù)的標識及相應(yīng)的參數(shù)列表。虛擬機系統(tǒng)按照系統(tǒng)服務(wù)標識調(diào)用相應(yīng)的實現(xiàn)例程,然后將結(jié)果返回給虛擬機任務(wù),以完成一次系統(tǒng)服務(wù)調(diào)用。虛擬機系統(tǒng)服務(wù)的實現(xiàn)可模擬真實操作系統(tǒng)的服務(wù)實現(xiàn)。(L)特殊系統(tǒng)服務(wù)/機制即中斷2AH Get Tick Count Handler2BH :User-Mode Callback Return2CH Debug Assertion Handler2DH Debug Service Handler這些特殊的系統(tǒng)服務(wù)/機制需要虛擬機系統(tǒng)按照真實操作系統(tǒng)的實現(xiàn)規(guī)范進行模擬實現(xiàn)并進行正確的處理及返回虛擬機任務(wù)。(3)控制、調(diào)試結(jié)合x86架構(gòu)的硬件調(diào)試機制。虛擬機系統(tǒng)可以提供豐富的控制、調(diào)試方法。其中,控制執(zhí)行流程可通過修改虛擬機任務(wù)的內(nèi)存、上下文(如EIP)等方法實現(xiàn);單步執(zhí)行可利用x86架構(gòu)的硬件單步機制實現(xiàn);軟件斷點可通過在虛擬機任務(wù)的執(zhí)行路徑上插入斷點/異常指令(如CCH)等經(jīng)典方法實現(xiàn);硬件斷點可支持所有的x86架構(gòu)的硬件斷點機制,如硬件讀/寫/執(zhí)行等;區(qū)域斷點可利用x86架構(gòu)的缺頁機制實現(xiàn);事件斷點,如異常、中斷、系統(tǒng)服務(wù)調(diào)用(包括API)、內(nèi)存訪問等所有事件都可設(shè)置斷點;條件斷點可在上述所有斷點的基礎(chǔ)上,提供通配/正則支持。通過本實施例,實現(xiàn)了虛擬機系統(tǒng)模擬真實操作系統(tǒng)的各種處理,無須做任何軟件模擬,任意代碼可以直接在處理器上安全執(zhí)行,可以完全發(fā)揮出處理器的能力,執(zhí)行效率 更高,執(zhí)行結(jié)果更準確,并且開發(fā)、維護成本更低。實施例三參照圖3,示出了根據(jù)本申請實施例三的一種虛擬機實現(xiàn)方法的步驟流程圖。本實施例以惡意軟件(病毒)行為分析為例,對本申請的虛擬機實現(xiàn)方法進行說明。任何可執(zhí)行程序都是由特定平臺的機器指令序列所組成的,并在執(zhí)行過程中通過組合調(diào)用操作系統(tǒng)提供的服務(wù)(API)來完成自己特定的功能。因此,只要能夠模擬相應(yīng)平臺的機器指令及相關(guān)機制,并且模擬真實操作系統(tǒng)提供的服務(wù),就可以使被分析的程序正確地執(zhí)行。本實施例的虛擬機實現(xiàn)方法包括以下步驟步驟S302 :確定使用虛擬機系統(tǒng)對惡意軟件(虛擬機程序)進行行為分析。一般來說,惡意軟件多為PE文件,任何PE文件(*. exe、*. dll、*, sys等)都可以使用虛擬機系統(tǒng)進行分析處理。如經(jīng)過格式判定后,創(chuàng)建虛擬機系統(tǒng)的進程對象、線程對象,通過Loader加載所需模塊,處理重定位、導(dǎo)入、導(dǎo)出等,映射所需內(nèi)存頁,處理TLS等,最后加載程序入口所在頁,從入口點開始執(zhí)行。步驟S304 :準備惡意軟件行為分析的任務(wù)環(huán)境。包括構(gòu)建虛擬機系統(tǒng)使用的CR3,對CR3進行設(shè)置,隔離虛擬機系統(tǒng)與真實操作系統(tǒng)使用的地址空間;以及,構(gòu)建虛擬機系統(tǒng)使用的IDT,使虛擬機系統(tǒng)優(yōu)先響應(yīng)所有中斷;并且,設(shè)置快速系統(tǒng)調(diào)用入口,使快速系統(tǒng)調(diào)用入口被虛擬機系統(tǒng)調(diào)用。例如,當(dāng)構(gòu)建虛擬機系統(tǒng)使用的CR3,對CR3進行設(shè)置,隔離虛擬機系統(tǒng)與真實操作系統(tǒng)使用的地址空間時,可以根據(jù)當(dāng)前真實操作系統(tǒng)設(shè)置的分頁模式(如32-bit、PAE、IA-32e), CR3的內(nèi)容有所不同。以32_bit舉例分配第一級頁目錄所在的內(nèi)存頁,初始化并將此頁所對應(yīng)的物理地址填入CR3,即完成了 CR3寄存器(page-directory baseregister)的初始化,此時的地址空間全空(未進行任何映射)。對頁表項的填充貫穿在整個虛擬執(zhí)行過程中,如構(gòu)建IDT表時首先需要分配IDT表的內(nèi)存,此時就需要對分配的內(nèi)存進行映射,即正確填充相應(yīng)的頁表項;再比如前文內(nèi)存映射例子中對正常缺頁的處理時,在獲得了虛擬機任務(wù)的線性地址和物理地址的映射關(guān)系后,也需要正確填充相應(yīng)的頁表項。這樣,MMU才能正常工作。
此外,在構(gòu)建并初始化CR3和構(gòu)造IDT以外,還構(gòu)造⑶T、分配虛擬機內(nèi)核棧、和構(gòu)造虛擬機TSS。步驟S306 :加載待分析文件,即加載待進行行為分析的惡意軟件。包括進行內(nèi)核上下文切換,將真實操作系統(tǒng)內(nèi)核切換為虛擬機系統(tǒng)內(nèi)核;虛擬機系統(tǒng)通過真實操作系統(tǒng)的線性地址到虛擬機程序的線性地址的二次映射方式,確定惡意軟件的物理地址;虛擬機系統(tǒng)在構(gòu)建的環(huán)境中,從確定的惡意軟件的物理地址處,加載惡意軟件,對惡意軟件進行行為分析。例如,通過Loader加載所需模塊,處理重定位、導(dǎo)入、導(dǎo)出等,映射所需內(nèi)存頁,處理TLS等;最后加載程序入口所在頁,并初始化虛擬機內(nèi)核棧上下文;進行內(nèi)核上下文切換,將真實操作系統(tǒng)內(nèi)核切換為虛擬機系統(tǒng)內(nèi)核,從而切換到虛擬機任務(wù),從入口點開始執(zhí)行。其中,Loader將可執(zhí)行文件按照操作系統(tǒng)規(guī)范加載到內(nèi)存并進行初始化的功能組件,實現(xiàn)文件格式解析、映像地址映射(Section對象)、重定位處理、導(dǎo)入模塊處理、進程初始化(堆、環(huán)境變量等)、線程初始化(棧、CPU等)、模塊初始化(TLS、DllMain等)等功能,以及 相應(yīng)對象的創(chuàng)建。步驟S308 :執(zhí)行并紀錄程序行為。在執(zhí)行過程中處理各種軟硬件事件,包括模擬實現(xiàn)各種系統(tǒng)功能調(diào)用,紀錄系統(tǒng)功能、參數(shù)、調(diào)用地址、結(jié)果等信息;模擬實現(xiàn)異常處理,紀錄異常類型、地址等信息;非虛擬機任務(wù)的中斷事件轉(zhuǎn)交給操作系統(tǒng)處理。步驟S310 :待分析文件執(zhí)行完畢,分析程序行為紀錄,判別軟件惡意行為。本實施例以惡意軟件行為分析為例說明了虛擬機的實現(xiàn)方法,對惡意軟件的行為分析結(jié)果不會影響真實操作系統(tǒng),不會造成真實操作系統(tǒng)的數(shù)據(jù)損失和系統(tǒng)崩潰。并且,執(zhí)行效率更高,執(zhí)行結(jié)果更準確,開發(fā)、維護成本更低,有效解決了現(xiàn)有的純軟件模擬硬件方案的虛擬機模擬效果差,實現(xiàn)成本高的問題。實施例四參照圖4,示出了根據(jù)本申請實施例四的一種虛擬機的結(jié)構(gòu)框圖。本實施例的虛擬機包括隔離模塊402,用于使用處理器的保護模式、分頁機制和中斷處理機制構(gòu)建虛擬機系統(tǒng),從操作系統(tǒng)(即真實操作系統(tǒng))中隔離出虛擬機系統(tǒng)所需的獨立的地址空間和中斷環(huán)境;運行模塊404,用于使虛擬機系統(tǒng)在隔離出的地址空間和中斷環(huán)境中,使用處理器運行虛擬機程序。優(yōu)選地,隔離模塊402在從操作系統(tǒng)中隔離出虛擬機系統(tǒng)所需的地址空間和中斷環(huán)境時,構(gòu)建虛擬機系統(tǒng)使用的CR3,通過對CR3進行設(shè)置使虛擬機系統(tǒng)使用的地址空間與操作系統(tǒng)使用的地址空間相隔離;構(gòu)建虛擬機系統(tǒng)使用的IDT,使虛擬機系統(tǒng)優(yōu)先響應(yīng)虛擬機系統(tǒng)和操作系統(tǒng)的所有中斷。優(yōu)選地,隔離模塊402在構(gòu)建虛擬機系統(tǒng)使用的IDT,使虛擬機系統(tǒng)優(yōu)先響應(yīng)虛擬機系統(tǒng)和操作系統(tǒng)的所有中斷處理時,構(gòu)建虛擬機系統(tǒng)使用的IDT,使虛擬機系統(tǒng)優(yōu)先接收虛擬機系統(tǒng)和操作系統(tǒng)的所有中斷;當(dāng)中斷為硬件系統(tǒng)和/或外部設(shè)備產(chǎn)生的中斷時,將中斷反饋給操作系統(tǒng)進行中斷處理;當(dāng)中斷為虛擬機程序產(chǎn)生的中斷時,虛擬機系統(tǒng)對中斷進行中斷處理。優(yōu)選地,隔離模塊402還用于設(shè)置快速系統(tǒng)調(diào)用入口,使快速系統(tǒng)調(diào)用入口被虛擬機系統(tǒng)調(diào)用;和/或,當(dāng)操作系統(tǒng)為多處理器系統(tǒng)和/或多核系統(tǒng)時,屏蔽多處理之間的中斷和/或多核之間的中斷。優(yōu)選地,運行模塊404,用于通過內(nèi)核上下文切換將操作系統(tǒng)內(nèi)核切換為虛擬機系統(tǒng)內(nèi)核;在虛擬機系統(tǒng)內(nèi)核下,處理器在隔離出的地址空間和中斷環(huán)境中運行虛擬機程序。優(yōu)選地,運行模塊404,用于使虛擬機系統(tǒng)通過操作系統(tǒng)的線性地址到虛擬機程序的線性地址的二次映射方式,確定虛擬機程序的物理地址;使虛擬機系統(tǒng)在隔離出的地址空間和中斷環(huán)境中,根據(jù)物理地址,使用處理器運行虛擬機程序。優(yōu)選地,運行模塊404在使虛擬機系統(tǒng)通過操作系統(tǒng)的線性地址到虛擬機程序的線性地址的二次映射方式,確定虛擬機程序的物理地址時,為操作系統(tǒng)分配系統(tǒng)虛擬內(nèi)存,使用系統(tǒng)虛擬內(nèi)存加載運行虛擬機程序的相應(yīng)頁面,并獲取系統(tǒng)虛擬內(nèi)存的線性地址和相應(yīng)頁面的物理地址之間的對應(yīng)關(guān)系;為操作系統(tǒng)建立系統(tǒng)虛擬內(nèi)存和虛擬機系統(tǒng)使用的任務(wù)虛擬內(nèi)存的映射關(guān)系;使操作系統(tǒng)根據(jù)系統(tǒng)虛擬內(nèi)存的線性地址和相應(yīng)頁面的物理地址之間的對應(yīng)關(guān)系,和系統(tǒng)虛擬內(nèi)存和任務(wù)虛擬內(nèi)存的映射關(guān)系,建立任務(wù)虛擬內(nèi)存和相應(yīng)頁面的物理地址之間的映射關(guān)系;使虛擬機系統(tǒng)根據(jù)任務(wù)虛擬內(nèi)存和相應(yīng)頁面的物理地址 之間的映射關(guān)系,確定虛擬機程序的物理地址。本實施例的虛擬機用于實現(xiàn)前述多個方法實施例中相應(yīng)的虛擬機實現(xiàn)方法,并具有相應(yīng)的方法實施例的有益效果,在此不再贅述。本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。對于系統(tǒng)實施例虛擬機而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。以上對本申請所提供的一種虛擬機實現(xiàn)方法和虛擬機進行了詳細介紹,本文中應(yīng)用了具體個例對本申請的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請的思想,在具體實施方式
及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本申請的限制。
權(quán)利要求
1.一種虛擬機實現(xiàn)方法,包括 使用處理器的保護模式、分頁機制和中斷處理機制構(gòu)建虛擬機系統(tǒng),從操作系統(tǒng)中隔離出所述虛擬機系統(tǒng)所需的獨立的地址空間和中斷環(huán)境; 所述虛擬機系統(tǒng)在隔離出的所述地址空間和中斷環(huán)境中,使用所述處理器運行虛擬機程序。
2.根據(jù)權(quán)利要求I所述的方法,所述從操作系統(tǒng)中隔離出所述虛擬機系統(tǒng)所需的地址空間和中斷環(huán)境的步驟包括 構(gòu)建所述虛擬機系統(tǒng)使用的控制寄存器CR3,通過對所述CR3進行設(shè)置使所述虛擬機系統(tǒng)使用的地址空間與所述操作系統(tǒng)使用的地址空間相隔離; 構(gòu)建所述虛擬機系統(tǒng)使用的中斷描述符表IDT,使所述虛擬機系統(tǒng)優(yōu)先響應(yīng)所述虛擬機系統(tǒng)和所述操作系統(tǒng)的所有中斷。
3.根據(jù)權(quán)利要求2所述的方法,所述構(gòu)建所述虛擬機系統(tǒng)使用的IDT,使所述虛擬機系統(tǒng)優(yōu)先響應(yīng)所述虛擬機系統(tǒng)和所述操作系統(tǒng)的所有中斷處理的步驟包括 構(gòu)建所述虛擬機系統(tǒng)使用的IDT,使所述虛擬機系統(tǒng)優(yōu)先接收所述虛擬機系統(tǒng)和所述操作系統(tǒng)的所有中斷; 當(dāng)所述中斷為硬件系統(tǒng)和/或外部設(shè)備產(chǎn)生的中斷時,將所述中斷反饋給所述操作系統(tǒng)進行中斷處理; 當(dāng)所述中斷為所述虛擬機程序產(chǎn)生的中斷時,所述虛擬機系統(tǒng)對所述中斷進行中斷處理。
4.根據(jù)權(quán)利要求3所述的方法,還包括 設(shè)置快速系統(tǒng)調(diào)用入口,使所述快速系統(tǒng)調(diào)用入口被所述虛擬機系統(tǒng)調(diào)用; 和/或, 當(dāng)所述操作系統(tǒng)為多處理器系統(tǒng)和/或多核系統(tǒng)時,屏蔽多處理器之間的中斷和/或多核之間的中斷。
5.根據(jù)權(quán)利要求I所述的方法,所述虛擬機系統(tǒng)在隔離出的所述地址空間和中斷環(huán)境中,使用所述處理器運行虛擬機程序的步驟包括 通過內(nèi)核上下文切換將所述操作系統(tǒng)內(nèi)核切換為所述虛擬機系統(tǒng)內(nèi)核; 在所述虛擬機系統(tǒng)內(nèi)核下,所述處理器在隔離出的所述地址空間和中斷環(huán)境中運行所述虛擬機程序。
6.根據(jù)權(quán)利要求I所述的方法,所述虛擬機系統(tǒng)在隔離出的所述地址空間和中斷環(huán)境中,使用所述處理器運行虛擬機程序的步驟包括 所述虛擬機系統(tǒng)通過所述操作系統(tǒng)的線性地址到所述虛擬機程序的線性地址的二次映射方式,確定所述虛擬機程序的物理地址; 所述虛擬機系統(tǒng)在隔離出的所述地址空間和中斷環(huán)境中,根據(jù)所述物理地址,使用所述處理器運行所述虛擬機程序。
7.根據(jù)權(quán)利要求6所述的方法,所述虛擬機系統(tǒng)通過所述操作系統(tǒng)的線性地址到所述虛擬機程序的線性地址的二次映射方式,確定所述虛擬機程序的物理地址的步驟包括 所述操作系統(tǒng)分配系統(tǒng)虛擬內(nèi)存,使用所述系統(tǒng)虛擬內(nèi)存加載運行所述虛擬機程序的相應(yīng)頁面,并獲取所述系統(tǒng)虛擬內(nèi)存的線性地址和所述相應(yīng)頁面的物理地址之間的對應(yīng)關(guān)系; 所述操作系統(tǒng)建立所述系統(tǒng)虛擬內(nèi)存和所述虛擬機系統(tǒng)的任務(wù)虛擬內(nèi)存的映射關(guān)系; 所述操作系統(tǒng)根據(jù)所述系統(tǒng)虛擬內(nèi)存的線性地址和所述相應(yīng)頁面的物理地址之間的對應(yīng)關(guān)系,以及所述系統(tǒng)虛擬內(nèi)存和所述任務(wù)虛擬內(nèi)存的映射關(guān)系,建立所述任務(wù)虛擬內(nèi)存和所述相應(yīng)頁面的物理地址之間的映射關(guān)系; 所述虛擬機系統(tǒng)根據(jù)所述任務(wù)虛擬內(nèi)存和所述相應(yīng)頁面的物理地址之間的映射關(guān)系,確定所述虛擬機程序的物理地址。
8.一種虛擬機,包括 隔離模塊,用于使用處理器的保護模式、分頁機制和中斷處理機制構(gòu)建虛擬機系統(tǒng),從操作系統(tǒng)中隔離出所述虛擬機系統(tǒng)所需的獨立的地址空間和中斷環(huán)境; 運行模塊,用于使所述虛擬機系統(tǒng)在隔離出的所述地址空間和中斷環(huán)境中,使用所述處理器運行虛擬機程序。
9.根據(jù)權(quán)利要求8所述的虛擬機,所述隔離模塊在從操作系統(tǒng)中隔離出所述虛擬機系統(tǒng)所需的地址空間和中斷環(huán)境時,構(gòu)建所述虛擬機系統(tǒng)使用的控制寄存器CR3,通過對所述CR3進行設(shè)置使所述虛擬機系統(tǒng)使用的地址空間與所述操作系統(tǒng)使用的地址空間相隔離;構(gòu)建所述虛擬機系統(tǒng)使用的中斷描述符表IDT,使所述虛擬機系統(tǒng)優(yōu)先響應(yīng)所述虛擬機系統(tǒng)和所述操作系統(tǒng)的所有中斷。
10.根據(jù)權(quán)利要求9所述的虛擬機,所述隔離模塊在構(gòu)建所述虛擬機系統(tǒng)使用的IDT,使所述虛擬機系統(tǒng)優(yōu)先響應(yīng)所述虛擬機系統(tǒng)和所述操作系統(tǒng)的所有中斷處理時,構(gòu)建所述虛擬機系統(tǒng)使用的IDT,使所述虛擬機系統(tǒng)優(yōu)先接收所述虛擬機系統(tǒng)和所述操作系統(tǒng)的所有中斷;當(dāng)所述中斷為硬件系統(tǒng)和/或外部設(shè)備產(chǎn)生的中斷時,將所述中斷反饋給所述操作系統(tǒng)進行中斷處理;當(dāng)所述中斷為所述虛擬機程序產(chǎn)生的中斷時,所述虛擬機系統(tǒng)對所述中斷進行中斷處理。
11.根據(jù)權(quán)利要求8所述的虛擬機,所述運行模塊,用于通過內(nèi)核上下文切換將所述操作系統(tǒng)內(nèi)核切換為所述虛擬機系統(tǒng)內(nèi)核;在所述虛擬機系統(tǒng)內(nèi)核下,所述處理器在隔離出的所述地址空間和中斷環(huán)境中運行所述虛擬機程序。
12.根據(jù)權(quán)利要求8所述的虛擬機,所述運行模塊,用于使所述虛擬機系統(tǒng)通過所述操作系統(tǒng)的線性地址到所述虛擬機程序的線性地址的二次映射方式,確定所述虛擬機程序的物理地址;使所述虛擬機系統(tǒng)在隔離出的所述地址空間和中斷環(huán)境中,根據(jù)所述物理地址,使用所述處理器運行所述虛擬機程序。
13.根據(jù)權(quán)利要求12所述的虛擬機,所述運行模塊在使所述虛擬機系統(tǒng)通過所述操作系統(tǒng)的線性地址到所述虛擬機程序的線性地址的二次映射方式,確定所述虛擬機程序的物理地址時,為所述操作系統(tǒng)分配系統(tǒng)虛擬內(nèi)存,使用所述系統(tǒng)虛擬內(nèi)存加載運行所述虛擬機程序的相應(yīng)頁面,并獲取所述系統(tǒng)虛擬內(nèi)存的線性地址和所述相應(yīng)頁面的物理地址之間的對應(yīng)關(guān)系;為所述操作系統(tǒng)建立所述系統(tǒng)虛擬內(nèi)存和所述虛擬機系統(tǒng)使用的任務(wù)虛擬內(nèi)存的映射關(guān)系;使所述操作系統(tǒng)根據(jù)所述系統(tǒng)虛擬內(nèi)存的線性地址和所述相應(yīng)頁面的物理地址之間的對應(yīng)關(guān)系,以及所述系統(tǒng)虛擬內(nèi)存和所述任務(wù)虛擬內(nèi)存的映射關(guān)系,建立所述任務(wù)虛擬內(nèi)存和所述相應(yīng)頁面的物理地址之間的映射關(guān)系;使所述虛擬機系統(tǒng)根據(jù)所述任務(wù) 虛擬內(nèi)存和所述相應(yīng)頁面的物理地址之間的映射關(guān)系,確定所述虛擬機程序的物理地址。
全文摘要
本申請?zhí)峁┝艘环N虛擬機實現(xiàn)方法與虛擬機,其中,虛擬機實現(xiàn)方法包括使用處理器的保護模式、分頁機制和中斷處理機制構(gòu)建虛擬機系統(tǒng),從操作系統(tǒng)中隔離出所述虛擬機系統(tǒng)所需的獨立的地址空間和中斷環(huán)境;所述虛擬機系統(tǒng)在隔離出的所述地址空間和中斷環(huán)境中,使用所述處理器運行虛擬機程序。通過本申請,實現(xiàn)的虛擬機執(zhí)行效率高,執(zhí)行結(jié)果準確,并且開發(fā)、維護成本更低。
文檔編號G06F9/48GK102831006SQ201210260498
公開日2012年12月19日 申請日期2012年7月25日 優(yōu)先權(quán)日2012年7月25日
發(fā)明者周輝, 董毅 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司