本發(fā)明申請的技術(shù)屬于計算機芯片虛擬化分析和管理領(lǐng)域,特別是涉及針對英特爾的芯片工作模式中通常采用的虛擬機控制塊(VMCS)中關(guān)鍵核心數(shù)據(jù)實現(xiàn)定位的方法。
背景技術(shù):
在處理器技術(shù)的發(fā)展中,虛擬技術(shù)是一項重大的技術(shù)改進。傳統(tǒng)的IA32處理器架構(gòu)并不是一個十分可靠的虛擬化架構(gòu),為了解決這個問題,英特爾通過VT-x技術(shù)對原有架構(gòu)進行了擴展補充。在虛擬化環(huán)境中,需要頻繁切換不同虛擬CPU和宿主機CPU的寄存器及相關(guān)信息,這類運算最早由軟件來完成。VT-x技術(shù)的核心就是在宿主機內(nèi)存中開辟一塊專門的空間用于保存虛擬CPU寄存器及相關(guān)數(shù)據(jù),并由硬件指令來完成不同CPU的切換工作,以此來提升虛擬化的效率。這個專門的空間被稱為虛擬機控制塊(Virtual Machine Control Block,VMCS)。每個VMCS對應(yīng)一個虛擬CPU(VCPU),而VMCS在使用時要與邏輯CPU綁定,一個邏輯CPU在任意的一個時間點都只能綁定一個VMCS,而VMCS在不同的時刻是可以和不同的邏輯CPU綁定的。VMCS用來綁定和解除綁定的命令分別是VMPTRLD和VMCLEAR,而用來對VMCS數(shù)據(jù)域進行讀寫的指令分別為VMREAD和VMWRITE。VMCS結(jié)構(gòu)是一個4KB大小的內(nèi)存空間,其中在偏移0處是VMCS版本標識,偏移4處是VMX失敗指示,這里將存放因VM-Exit執(zhí)行不成功而產(chǎn)生的VMX失敗原因,而在偏移8處的VMCS數(shù)據(jù)域,這個數(shù)據(jù)域分成三部分:狀態(tài)區(qū)域,控制區(qū)域和VM退出信息區(qū)域,如下表。
客戶機狀態(tài)域是用來保存非根模式VCPU運行狀態(tài)的,當發(fā)生VM-Exit時,VCPU的當前運行狀態(tài)將寫入客戶機狀態(tài)域(并非全部,另有一部分為VMM控制的軟件部分,下同),而當VM-Entry發(fā)生時,CPU會將客戶機狀態(tài)域中保存的狀態(tài)加載到自己身上從而保證順利地切換到非 根操作模式。而宿主機狀態(tài)域則用來保存在根操作模式下CPU的運行狀態(tài),它僅僅在發(fā)生VM-Exit時將狀態(tài)值寫入CPU中,而在VMEntry發(fā)生時不進行保存操作??刂茀^(qū)域中VM-Entry控制域和VM-Exit控制域是對VM-Entry和VM-Exit操作的具體行為進行控制規(guī)定的地方,如VM-Entry控制域中的MSR加載、事件注入控制和VM-Exit控制域中的主機地址空間等,而VM執(zhí)行控制域的作用是控制VM-Exit操作發(fā)生時的行為,比如某些敏感指令、異常和中斷是否產(chǎn)生VM-Exit操作,也就是說只要是在這個控制域里列明的指令,都是可根據(jù)實際情況進行VM-Exit操作的開啟和關(guān)閉操作的。當然沒有寫入控制域的一些指令也會產(chǎn)生VM-Exit操作,那些指令可以稱之為無條件VM-Exit指令,凡是產(chǎn)生VM-Exit操作的指令都會由VMM來模擬完成。VM-Exit信息域比較簡單,存放的是VM-Exit產(chǎn)生的原因和具體的分類細化指標。
研究人員通常需要獲取保存在VMCS數(shù)據(jù)結(jié)構(gòu)中的關(guān)鍵數(shù)據(jù)來分析虛擬機內(nèi)部信息。獲取的通常方法是首先讀出特定關(guān)鍵數(shù)據(jù)的值,再搜索整個VMCS所處內(nèi)存空間,尋找和讀出的數(shù)值一致的位置,最后將該位置判定為關(guān)鍵數(shù)據(jù)的位置。該方法有一個致命問題,即同一個數(shù)值可能在VMCS中存在多處,遇到這種情況就無法判定關(guān)鍵數(shù)據(jù)在VMCS中的位置,即如果內(nèi)存中有多個同樣的數(shù)值,上述VMCS數(shù)據(jù)結(jié)構(gòu)中的關(guān)鍵數(shù)據(jù)獲取方法就完全失效。本申請的技術(shù)方案就是為了解決上述問題提出將根據(jù)關(guān)鍵數(shù)據(jù)長度不同寫入對應(yīng)的特殊數(shù)值,由于關(guān)鍵數(shù)據(jù)的應(yīng)用特性,導致寫入的特殊數(shù)值在一般工作場景中是非法的,即VMCS中不應(yīng)該出 現(xiàn)該類數(shù)據(jù)。當這類數(shù)值被刻意寫入關(guān)鍵數(shù)據(jù)中后,VMCS所在內(nèi)存中僅會有一個特殊數(shù)值,通過在VMCS中搜索寫入的特殊數(shù)值便可準確判定關(guān)鍵數(shù)據(jù)的位置。
技術(shù)實現(xiàn)要素:
本申請的技術(shù)方案就是為了解決同一數(shù)值在VMCS中存在多處時無法唯一確定其位置的缺陷,提出一種判定關(guān)鍵數(shù)據(jù)在VMCS中的位置的方法。實現(xiàn)上述發(fā)明目的的步驟為:(1)生成8個數(shù)值為奇數(shù)的特殊數(shù)值;(2)讀取一個VMCS關(guān)鍵數(shù)據(jù)作為待定位目標數(shù)據(jù);(3)保存目標數(shù)據(jù)的數(shù)值;(4)根據(jù)目標數(shù)據(jù)的數(shù)值長度選擇對應(yīng)的特殊數(shù)值;(5)將選取到的特殊數(shù)值寫入目標數(shù)據(jù)中;(6)在VMCS所在內(nèi)存中搜索寫入的特殊數(shù)值,對應(yīng)位置就是目標數(shù)據(jù)在VMCS中的位置;(7)目標數(shù)據(jù)中重新寫入保存的原始數(shù)據(jù);(8)重復(2)-(7)步驟則可獲得VMCS中所有關(guān)鍵數(shù)據(jù)的位置。上述方法中,生成的8特殊數(shù)值為長度分別為1、2、3、4、5、6、7、8個字節(jié)。該方法的核心技術(shù)包括特殊數(shù)值的賦值與數(shù)值搜索兩部分:第一,特殊數(shù)值選取。在VMCS中保存的關(guān)鍵數(shù)據(jù)幾乎都是地址數(shù)據(jù),由于操作系統(tǒng)的特性,使得這些地址所指向的數(shù)據(jù)都是以2的N次冪(N>=1)對齊,所以這些地址一定是偶數(shù)。因此本專利中選取較大的奇數(shù)作為特殊數(shù)值。同時,由于關(guān)鍵數(shù)據(jù)的長度范圍是1字節(jié)至8字節(jié),因此本專利分別針對不同長度的關(guān)鍵數(shù)據(jù)設(shè)置長度為1字節(jié)到8字節(jié)的8個較大奇數(shù)作為特殊數(shù)值。第二,數(shù)值搜索。本專利不同于其它方式搜索獲取到的合法數(shù)據(jù),而是先根據(jù)關(guān)鍵數(shù)據(jù)長度不同寫入對應(yīng)的特殊數(shù)值,之后再在VMCS所在內(nèi)存中搜索寫入的特殊數(shù)值。由于寫入特殊數(shù)值的非法性,這保證了搜索結(jié)果的唯一性。因此可以準確判定關(guān)鍵數(shù)據(jù)在VMCS中的位置。
本申請的技術(shù)方案針對Intel芯片中添加了硬件輔助虛擬化技術(shù)(VT-x)的虛擬化環(huán)境中進行的定位方法,VMCS關(guān)鍵數(shù)據(jù)的讀取指令為VMREAD,特殊數(shù)值寫入目標數(shù)據(jù)中的指令為VMWRITE均為INTEl 芯片VMCS標準控制命令。
申請技術(shù)方案根據(jù)關(guān)鍵數(shù)據(jù)長度不同寫入對應(yīng)的特殊數(shù)值,由于關(guān)鍵數(shù)據(jù)的應(yīng)用特性,導致寫入的特殊數(shù)值在一般工作場景中是非法的,即VMCS中不應(yīng)該出現(xiàn)該類數(shù)據(jù)。因此當這類數(shù)值被刻意寫入關(guān)鍵數(shù)據(jù)中后,VMCS所在內(nèi)存中僅會有一個特殊數(shù)值,通過在VMCS中搜索寫入的特殊數(shù)值便可準確判定關(guān)鍵數(shù)據(jù)的位置。極大提升了獲取VMCS中關(guān)鍵數(shù)據(jù)位置的準確性。
具體實施方式
為更清楚說明本發(fā)明技術(shù)方案,下面具體進行介紹。準確獲取虛擬機控制塊(VMCS)中關(guān)鍵數(shù)據(jù)位置的方法,該方法步驟如下:(1)生成長度從1個字節(jié)到8個字節(jié)的數(shù)值為奇數(shù)的特殊數(shù)值;(2)根據(jù)Intel提供的VMCS關(guān)鍵數(shù)據(jù)操作指令VMREAD讀取一個關(guān)鍵數(shù)據(jù)作為目標數(shù)據(jù);(3)將讀取目標數(shù)據(jù)的數(shù)值并保存;(4)根據(jù)獲取到的數(shù)據(jù)數(shù)值的長度選擇對應(yīng)的特殊數(shù)值;(5)將選取到的特殊數(shù)值通過命令VMWRITE寫入目標數(shù)據(jù)中;(6)在VMCS所在內(nèi)存中搜索寫入的特殊數(shù)值,對應(yīng)位置就是是目標數(shù)據(jù)在VMCS中的位置;(7)在目標數(shù)據(jù)中重新寫入保存的原始數(shù)據(jù);(8)通過對VMCS中每個關(guān)鍵數(shù)據(jù)執(zhí)行(2)-(7)步驟則可獲得VMCS中所有關(guān)鍵數(shù)據(jù)的位置。
整個技術(shù)方案的核心在于特殊數(shù)值的賦值與數(shù)值搜索兩部分:第一,特殊數(shù)值選取。在VMCS中保存的關(guān)鍵數(shù)據(jù)幾乎都是地址數(shù)據(jù),由于操作系統(tǒng)的特性,使得這些地址所指向的數(shù)據(jù)都是以2的N次冪(N>=1)對齊,所以這些地址一定是偶數(shù)。因此本專利中選取較大的奇數(shù)作為特殊數(shù)值。同時,由于關(guān)鍵數(shù)據(jù)的長度范圍是1字節(jié)至8字節(jié),因此本專利分別針對不同長度的關(guān)鍵數(shù)據(jù)設(shè)置長度為1字節(jié)到8字節(jié)的8個較大奇數(shù)作為特殊數(shù)值。第二,數(shù)值搜索。本專利不同于其它方式搜索獲取到的合法數(shù)據(jù),而是先根據(jù)關(guān)鍵數(shù)據(jù)長度不同寫入對應(yīng)的特殊數(shù)值,之后再在VMCS 所在內(nèi)存中搜索寫入的特殊數(shù)值。由于寫入特殊數(shù)值的非法性,這保證了搜索結(jié)果的唯一性,可以準確判定關(guān)鍵數(shù)據(jù)在VMCS中的位置。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明實質(zhì)內(nèi)容上所作的任何修改、等同替換和簡單改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。