一種操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取的方法和裝置制造方法
【專利摘要】本發(fā)明的實(shí)施例提供了一種操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取的方法和裝置,涉及軟件【技術(shù)領(lǐng)域】,能夠在虛擬環(huán)境下有效地獲取客戶操作系統(tǒng)當(dāng)前進(jìn)程信息。該方法包括:識(shí)別客戶操作系統(tǒng)當(dāng)前進(jìn)程,獲取當(dāng)前的寄存器現(xiàn)場(chǎng)信息;生成客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息;通過當(dāng)前的寄存器現(xiàn)場(chǎng)信息計(jì)算客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊基地址;根據(jù)客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊基地址和客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息,利用進(jìn)程信息獲取函數(shù)讀取客戶操作系統(tǒng)當(dāng)前進(jìn)程信息。本發(fā)明應(yīng)用于虛擬化環(huán)境下客戶操作系統(tǒng)當(dāng)前進(jìn)程信息的獲取。
【專利說(shuō)明】一種操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取的方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件【技術(shù)領(lǐng)域】,尤其涉及一種操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取的方法和裝置。
【背景技術(shù)】
[0002]現(xiàn)今,基于虛擬化技術(shù)實(shí)現(xiàn)的多個(gè)高效虛擬機(jī)計(jì)算環(huán)境技術(shù)特征,使其在服務(wù)器資源整合、系統(tǒng)軟件開發(fā)與調(diào)試、系統(tǒng)容錯(cuò)、系統(tǒng)安全、綠色計(jì)算、負(fù)載均衡等眾多領(lǐng)域得到了廣泛的應(yīng)用。為了能使其可以應(yīng)用的更加廣泛,還需要解決虛擬化技術(shù)中的許多問題。而語(yǔ)義鴻溝就是其中最重要的問題之一,所謂語(yǔ)義鴻溝是指當(dāng)前主流虛擬化技術(shù)中VMM (Virtual Machine Monitor,虛擬機(jī)管理器)因缺乏關(guān)于Guest OS (客戶操作系統(tǒng))內(nèi)部軟件抽象知識(shí)信息而對(duì)底層虛擬機(jī)陷入等事件所隱含的語(yǔ)義無(wú)法有效解釋的現(xiàn)象。這種現(xiàn)象造成了 VMM可以觀測(cè)到所有來(lái)自Guest OS的底層陷入交互事件,但是在缺少Guest OS內(nèi)部語(yǔ)義信息知識(shí)的情況下無(wú)法獲知這些事件所隱含的意義。對(duì)于Linux ( 一種操作系統(tǒng))操作系統(tǒng)來(lái)說(shuō),在運(yùn)行進(jìn)程時(shí),將進(jìn)程的頁(yè)表基地址信息加載到MMU(Memory ManagementUnit,內(nèi)存管理單元)中,而CR3控制寄存器代表當(dāng)前進(jìn)程的頁(yè)目錄基地址。由于每一個(gè)進(jìn)程只有一套頁(yè)面信息,因此每當(dāng)遇到不同的值寫到CR3中時(shí),就代表新的進(jìn)程開始運(yùn)行,因此,只需對(duì)CR3進(jìn)行監(jiān)控,當(dāng)其發(fā)生改變時(shí)就意味著進(jìn)程發(fā)生切換,識(shí)別到操作系統(tǒng)的當(dāng)前進(jìn)程,進(jìn)而基于虛擬CPU (Central Processing Unit,中央處理器)現(xiàn)場(chǎng)信息并借助于GuestOS進(jìn)程軟件抽象知識(shí),如進(jìn)程控制塊字段偏移,便可進(jìn)一步獲取進(jìn)程的信息。
[0003]在實(shí)現(xiàn)上述進(jìn)程信息獲取過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下問題:上述的第一種方法只適用于Linux自身,但不適用于虛擬機(jī)環(huán)境,第二種方法基于逆向工程獲取的信息量非常有限,且由于內(nèi)核版本的差異,每次獲取相同信息都需要進(jìn)行一次逆向工程,工作量大。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的實(shí)施例提供一種操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取的方法和裝置,能夠在虛擬環(huán)境下有效地獲取客戶操作系統(tǒng)當(dāng)前進(jìn)程信息。
[0005]為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:
[0006]第一方面,提供一種操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取的方法,包括:
[0007]識(shí)別客戶操作系統(tǒng)當(dāng)前進(jìn)程,獲取當(dāng)前的寄存器現(xiàn)場(chǎng)信息;
[0008]生成客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息;
[0009]通過所述當(dāng)前的寄存器現(xiàn)場(chǎng)信息計(jì)算客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊基地址;
[0010]根據(jù)所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊基地址和所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息,利用進(jìn)程信息獲取函數(shù)讀取客戶操作系統(tǒng)當(dāng)前進(jìn)程信息。
[0011]在第一種可能的實(shí)現(xiàn)方式中,根據(jù)第一方面,所述識(shí)別客戶操作系統(tǒng)當(dāng)前進(jìn)程獲取當(dāng)前的寄存器現(xiàn)場(chǎng)信息,包括:[0012]當(dāng)監(jiān)測(cè)到客戶操作系統(tǒng)發(fā)生進(jìn)程切換敏感特權(quán)操作時(shí),識(shí)別所述客戶操作系統(tǒng)當(dāng)前進(jìn)程;
[0013]定位存儲(chǔ)有所述客戶操作系統(tǒng)當(dāng)前進(jìn)程的特定系統(tǒng)寄存器的代碼改寫位置;
[0014]在所述特定系統(tǒng)寄存器的代碼改寫位置上獲取所述特定系統(tǒng)寄存器的改寫代碼;
[0015]在所述特定系統(tǒng)寄存器的改寫代碼中獲取所述當(dāng)前的寄存器現(xiàn)場(chǎng)信息。
[0016]在第二種可能的實(shí)現(xiàn)方式中,結(jié)合第一方面或第一種可能的實(shí)現(xiàn)方式,所述生成客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息,包括:
[0017]選取至少一段所述客戶操作系統(tǒng)當(dāng)前進(jìn)程的進(jìn)程字段;
[0018]編寫并計(jì)算所述至少一段所述客戶操作系統(tǒng)當(dāng)前進(jìn)程的進(jìn)程字段的偏移信息宏,并將所述至少一段所述客戶操作系統(tǒng)當(dāng)前進(jìn)程的進(jìn)程字段的偏移信息宏添加到操作系統(tǒng)內(nèi)核源代碼文件中;
[0019]對(duì)所述操作系統(tǒng)內(nèi)核源代碼文件進(jìn)行編譯,獲取所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)息。
[0020]在第三種可能的實(shí)現(xiàn)方式中,根據(jù)第二種可能的實(shí)現(xiàn)方式所述通過所述當(dāng)前的寄存器現(xiàn)場(chǎng)信息計(jì)算客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊基地址,包括:
[0021]在所述當(dāng)前的寄存器現(xiàn)場(chǎng)信息中獲取ESP棧指針寄存器的值;
[0022]采用所述ESP棧指針寄存器的值計(jì)算客戶操作系統(tǒng)當(dāng)前進(jìn)程基地址;
[0023]根據(jù)所述客戶操作系統(tǒng)當(dāng)前進(jìn)程基地址獲取所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊基地址。
[0024]在第四種可能的實(shí)現(xiàn)方式中,根據(jù)第三種可能的實(shí)現(xiàn)方式,所述根據(jù)所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊基地址和所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息,利用進(jìn)程信息獲取函數(shù)讀取當(dāng)前客戶操作系統(tǒng)當(dāng)前進(jìn)程信息,包括:
[0025]根據(jù)所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊基地址和所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息,生成客戶操作系統(tǒng)當(dāng)前進(jìn)程虛擬地址;
[0026]采用所述客戶操作系統(tǒng)當(dāng)前進(jìn)程虛擬地址計(jì)算客戶操作系統(tǒng)當(dāng)前進(jìn)程邏輯物理地址;
[0027]通過進(jìn)程信息獲取函數(shù)從所述客戶操作系統(tǒng)當(dāng)前進(jìn)程邏輯物理地址中讀取客戶操作系統(tǒng)當(dāng)前進(jìn)程信息。
[0028]第二方面,提供一種操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置,包括:
[0029]進(jìn)程識(shí)別單元,用于識(shí)別客戶操作系統(tǒng)當(dāng)前進(jìn)程,獲取當(dāng)前的寄存器現(xiàn)場(chǎng)信息;
[0030]信息生成單元,用于生成客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息;
[0031]基地址計(jì)算單元,用于通過所述信息生成單元生成的所述當(dāng)前的寄存器現(xiàn)場(chǎng)信息計(jì)算當(dāng)前客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊基地址;
[0032]進(jìn)程信息讀取單元,用于根據(jù)所述基地址計(jì)算單元計(jì)算的所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊基地址和所述信息生成單元生成的所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息,利用進(jìn)程信息獲取函數(shù)讀取當(dāng)前客戶操作系統(tǒng)當(dāng)前進(jìn)程信息。
[0033]在第一種可能的實(shí)現(xiàn)方式中,根據(jù)第二方面,所述進(jìn)程識(shí)別單元,包括:
[0034]進(jìn)程識(shí)別模塊,用于當(dāng)監(jiān)測(cè)到客戶操作系統(tǒng)發(fā)生進(jìn)程切換敏感特權(quán)操作時(shí),識(shí)別所述客戶操作系統(tǒng)當(dāng)前進(jìn)程;
[0035]位置定位模塊,用于定位存儲(chǔ)有所述進(jìn)程識(shí)別模塊識(shí)別的所述客戶操作系統(tǒng)當(dāng)前進(jìn)程的特定系統(tǒng)寄存器的代碼改寫位置;
[0036]第一信息獲取模塊,用于在所述位置定位模塊定位的所述特定系統(tǒng)寄存器的代碼改寫位置上獲取所述特定系統(tǒng)寄存器的改寫代碼;
[0037]所述第一信息獲取模塊,還用于在所述第一信息獲取模塊獲取的所述特定系統(tǒng)寄存器的改寫代碼中獲取所述當(dāng)前的寄存器現(xiàn)場(chǎng)信息。
[0038]在第二種可能的實(shí)現(xiàn)方式中,結(jié)合第二方面或第一種可能的實(shí)現(xiàn)方式,所述信息生成單元,包括:
[0039]進(jìn)程字段選取模塊,用于選取至少一段所述客戶操作系統(tǒng)當(dāng)前進(jìn)程的進(jìn)程字段;
[0040]信息處理模塊,用于編寫并計(jì)算所述進(jìn)程字段選取模塊選取的所述至少一段所述客戶操作系統(tǒng)當(dāng)前進(jìn)程的進(jìn)程字段的偏移信息宏,并將所述進(jìn)程字段選取模塊選取的所述至少一段所述客戶操作系統(tǒng)當(dāng)前進(jìn)程的進(jìn)程字段的偏移信息宏添加到操作系統(tǒng)內(nèi)核源代碼文件中;
[0041]偏移信息獲取模塊,用于對(duì)所述信息處理模塊生成的所述操作系統(tǒng)內(nèi)核源代碼文件進(jìn)行編譯,獲取所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息。
[0042]在第三種可能的實(shí)現(xiàn)方式中,根據(jù)第二種可能的實(shí)現(xiàn)方式,所述基地址計(jì)算單元,包括:
[0043]第二信息獲取模塊,用于在所述信息生成單元生成的所述當(dāng)前的寄存器現(xiàn)場(chǎng)信息中獲取ESP棧指針寄存器的值;
[0044]基地址獲取模塊,用于采用所述第二信息獲取模塊獲取的所述ESP棧指針寄存器的值計(jì)算當(dāng)前客戶操作系統(tǒng)當(dāng)前進(jìn)程基地址;
[0045]所述基地址獲取模塊,還用于根據(jù)所述基地址獲取模塊獲取的所述當(dāng)前客戶操作系統(tǒng)當(dāng)前進(jìn)程基地址獲取所述當(dāng)前客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊基地址。
[0046]在第四種可能的實(shí)現(xiàn)方式中,根據(jù)第三種可能的實(shí)現(xiàn)方式,所述進(jìn)程信息讀取單元,包括:
[0047]地址獲取模塊,用于根據(jù)所述基地址計(jì)算單元獲取的所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊基地址和所述信息生成單元生成的所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息,生成客戶操作系統(tǒng)當(dāng)前進(jìn)程虛擬地址;
[0048]所述地址獲取模塊,還用于采用所述地址獲取模塊獲取的所述客戶操作系統(tǒng)當(dāng)前進(jìn)程虛擬地址計(jì)算客戶操作系統(tǒng)當(dāng)前進(jìn)程邏輯物理地址;
[0049]進(jìn)程信息讀取模塊,用于通過進(jìn)程信息獲取函數(shù)從所述地址獲取模塊獲取的所述客戶操作系統(tǒng)當(dāng)前進(jìn)程邏輯物理地址中讀取客戶操作系統(tǒng)當(dāng)前進(jìn)程信息。
[0050]本發(fā)明的實(shí)施例提供一種操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取的方法和裝置,通過識(shí)別客戶操作系統(tǒng)當(dāng)前進(jìn)程,獲取寄存器現(xiàn)場(chǎng)信息,并根據(jù)由寄存器現(xiàn)場(chǎng)信息計(jì)算出的客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊基地址和客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息,再利用進(jìn)程信息獲取函數(shù),能夠在虛擬環(huán)境下有效地獲取客戶操作系統(tǒng)當(dāng)前進(jìn)程信息。
【專利附圖】
【附圖說(shuō)明】[0051]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0052]圖1為本發(fā)明的實(shí)施例提供的一種操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取的方法的流程示意圖;
[0053]圖2為本發(fā)明的實(shí)施例提供的另一種操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取的方法的流程示意圖;
[0054]圖3為本發(fā)明的實(shí)施例提供的一種操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置的結(jié)構(gòu)示意圖;
[0055]圖4為本發(fā)明的實(shí)施例提供的另一種操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置的結(jié)構(gòu)示意圖;
[0056]圖5為本發(fā)明的另一實(shí)施例提供的一種操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0057]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0058]現(xiàn)今,雖然虛擬化技術(shù)得到了廣泛的應(yīng)用,但是虛擬化技術(shù)還是存在很多的問題,如虛擬化技術(shù)中的語(yǔ)義鴻溝的問題,該問題造成了 VMM (Virtual Machine Monitor虛擬機(jī)管理器)可以觀測(cè)到所有來(lái)自Guest OS的底層陷入交互事件,但是在缺少Guest OS內(nèi)部語(yǔ)義信息知識(shí)的情況下無(wú)法獲知這些事件所隱含的意義,因此,本發(fā)明提供實(shí)施例提供的一種操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取的方法,可以使得VMM在虛擬環(huán)境下可以獲取操作系統(tǒng)的進(jìn)程信息,如圖1所示,該方法包括如下步驟:
[0059]101、操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置識(shí)別客戶操作系統(tǒng)當(dāng)前進(jìn)程,獲取當(dāng)前的寄存器現(xiàn)場(chǎng)信息。
[0060]其中,上述的客戶操作系統(tǒng)是指在虛擬環(huán)境中應(yīng)用的操作系統(tǒng),該操作系統(tǒng)包括但不限定于:Linux操作系統(tǒng)(開源的)、Windows操作系統(tǒng)和Unix操作系統(tǒng)。
[0061]進(jìn)一步可選的,如圖2所示,步驟101具體包括如下步驟:
[0062]101a、當(dāng)監(jiān)測(cè)到客戶操作系統(tǒng)發(fā)生進(jìn)程切換敏感特權(quán)操作時(shí),操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置識(shí)別客戶操作系統(tǒng)當(dāng)前進(jìn)程。
[0063]具體的,每一個(gè)客戶操作系統(tǒng)當(dāng)前進(jìn)程都有一個(gè)獨(dú)立的虛擬地址空間,且每個(gè)客戶操作系統(tǒng)當(dāng)前進(jìn)程都可以由對(duì)應(yīng)的一個(gè)頁(yè)目錄基地址來(lái)確定。每當(dāng)客戶操作系統(tǒng)當(dāng)前進(jìn)程運(yùn)行時(shí),都需要將該客戶操作系統(tǒng)當(dāng)前進(jìn)程加載到物理機(jī)器對(duì)應(yīng)的特定系統(tǒng)寄存器當(dāng)中(如X86(由Intel推出的一種復(fù)雜指令集,用于控制芯片的運(yùn)行的程序)的CR3控制寄存器),而該操作過程在虛擬環(huán)境中為敏感特權(quán)操作,因此,當(dāng)監(jiān)測(cè)到客戶操作系統(tǒng)當(dāng)前進(jìn)程發(fā)生進(jìn)程切換敏感特權(quán)操作時(shí),當(dāng)前執(zhí)行的客戶操作系統(tǒng)當(dāng)前進(jìn)程會(huì)陷入到VMM中,從而使得VMM能夠識(shí)別到操作系統(tǒng)當(dāng)前的進(jìn)程。
[0064]101b、操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置定位存儲(chǔ)有所述客戶操作系統(tǒng)當(dāng)前進(jìn)程的特定系統(tǒng)寄存器的代碼改寫位置。
[0065]101c、操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置在特定系統(tǒng)寄存器的代碼改寫位置上獲取特定系統(tǒng)寄存器的改寫代碼。
[0066]101d、操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置在特定系統(tǒng)寄存器的改寫代碼中獲取當(dāng)前的寄存器現(xiàn)場(chǎng)信息。
[0067]102、操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置生成客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)息。
[0068]其中,操作系統(tǒng)內(nèi)核在不同配置編譯下,其中的進(jìn)程控制塊字段結(jié)構(gòu)是不同的,因此一些關(guān)鍵字段域在其中的偏移也會(huì)不同,為了給出準(zhǔn)確的字段偏移,這里采用在操作系統(tǒng)內(nèi)核中添加計(jì)算進(jìn)程控制塊字段偏移的方法來(lái)生成客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)息。
[0069]進(jìn)一步可選的,如圖2所示,步驟102具體包括如下步驟:
[0070]102a、操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置選取至少一段客戶操作系統(tǒng)當(dāng)前進(jìn)程的進(jìn)程字段。
[0071]具體的,這里選取的至少一段當(dāng)前進(jìn)程的進(jìn)程字段是根據(jù)實(shí)際需要所選取的,這里可以將上述的字段標(biāo)記為sl,s2,.......[0072]102b、操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置編寫并計(jì)算至少一段客戶操作系統(tǒng)當(dāng)前進(jìn)程的進(jìn)程字段的偏移信息宏,并將至少一段客戶操作系統(tǒng)當(dāng)前進(jìn)程的進(jìn)程字段的偏移信息宏添加到操作系統(tǒng)內(nèi)核源代碼文件中。
[0073]其中,在計(jì)算至少一段當(dāng)前進(jìn)程的進(jìn)程字段的偏移信息宏之前,首先根據(jù)實(shí)際系統(tǒng)找到對(duì)應(yīng)的構(gòu)架分支目錄,其中典型目錄格式為arch/X/kernel/asm-offsetsY.c,其中X代表CPU (Central Processing Unit,中央處理器)的結(jié)構(gòu)類型,Y則代表同一架構(gòu)下不同位寬,如32位或64位。其次,在其中定位到一個(gè)名稱為void f00 (void)的函數(shù),并在其末尾添加所需的進(jìn)程字段的偏移信息宏,具體格式為:
[0074]......[0075]BLANK O
[0076]OFFSET(GPSI, task_struct, sl)
[0077]OFFSET(GPS2, task_struct, s2)
[0078]......[0079]102c、操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置對(duì)操作系統(tǒng)內(nèi)核源代碼文件進(jìn)行編譯,獲取客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息。
[0080]此外,由于客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息只有應(yīng)用在當(dāng)前的寄存器現(xiàn)場(chǎng)信息中,才能夠獲取客戶操作系統(tǒng)當(dāng)前進(jìn)程中所需要的信息,進(jìn)而利用進(jìn)程信息獲取函數(shù)讀取客戶操作系統(tǒng)當(dāng)前進(jìn)程信息。
[0081]103、操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置通過當(dāng)前的寄存器現(xiàn)場(chǎng)信息計(jì)算客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊基地址。
[0082]進(jìn)一步可選的,如圖2所示,步驟103具體包括如下步驟:[0083]103a、操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置在當(dāng)前的寄存器現(xiàn)場(chǎng)信息中獲取ESP棧指針寄存器的值。
[0084]103b、操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置采用ESP棧指針寄存器的值計(jì)算客戶操作系統(tǒng)當(dāng)前進(jìn)程基地址。
[0085]103c、操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置根據(jù)客戶操作系統(tǒng)當(dāng)前進(jìn)程基地址獲取客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊基地址。
[0086]具體的,若這里以Linux操作系統(tǒng)為例,在Linux2.6以后的版本中,Linux進(jìn)程內(nèi)核堆棧、當(dāng)前Linux進(jìn)程的thread_info結(jié)構(gòu)以及當(dāng)前Linux進(jìn)程控制塊task_strcut有如下特點(diǎn):
[0087]Linux進(jìn)程內(nèi)核堆棧與當(dāng)前Linux進(jìn)程的thread_info結(jié)構(gòu)體共享一塊存儲(chǔ)區(qū)域,其中,thread_info結(jié)構(gòu)體從共享存儲(chǔ)區(qū)域塊低位地址開始存放信息,而Linux進(jìn)程內(nèi)核堆棧則從共享塊存儲(chǔ)區(qū)域塊高位地址開始存放信息。而當(dāng)前Linux進(jìn)程thread_info的第一個(gè)字段指向的是當(dāng)前Linux進(jìn)程控制塊的指針。
[0088]根據(jù)上述特點(diǎn),VMM中當(dāng)前Linux進(jìn)程控制塊基地址計(jì)算方法步驟如下:
[0089]當(dāng)Linux進(jìn)程發(fā)生切換時(shí),此刻Linux操作系統(tǒng)必然處于內(nèi)核態(tài),因此ESP (Extended stack pointer,棧指針寄存器)指向的地方一定位于Linux進(jìn)程內(nèi)核堆棧區(qū)域內(nèi),由此利用Linux進(jìn)程內(nèi)核堆棧與Linux進(jìn)程thread_info結(jié)構(gòu)體共享存儲(chǔ)區(qū)域的特點(diǎn),掩碼屏蔽掉內(nèi)核堆棧指針ESP棧指針寄存器低位部分獲得當(dāng)前進(jìn)程的thread_info的基地址,具體如下公式所示,其中的Kernel Stack Size為L(zhǎng)inux進(jìn)程內(nèi)核堆棧大小,典型的值有4KB和8KB兩種。
[0090]thread_info_base = ESP&&(?(KernelStackSize-1))
[0091]在獲得了 thread_info的基地址之后,利用task_struct始終位于其第一個(gè)字段的特點(diǎn),可以知道它的地址實(shí)際上也就是當(dāng)前進(jìn)程控制塊task_struct的地址,簡(jiǎn)單的進(jìn)行一下指針類型轉(zhuǎn)換,就可以獲取Linux當(dāng)前進(jìn)程控制塊的基地址,從而為獲取進(jìn)程各種信息打下基礎(chǔ)。
[0092]104、操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置根據(jù)客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊基地址和客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息,利用進(jìn)程信息獲取函數(shù)讀取客戶操作系統(tǒng)當(dāng)前進(jìn)程信息。
[0093]進(jìn)一步可選的,如圖2所示,步驟104具體包括如下步驟:
[0094]104a、操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置根據(jù)客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊基地址和客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息,生成客戶操作系統(tǒng)當(dāng)前進(jìn)程虛擬地址。
[0095]104b、操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置采用客戶操作系統(tǒng)當(dāng)前進(jìn)程虛擬地址計(jì)算客戶操作系統(tǒng)當(dāng)前進(jìn)程邏輯物理地址。
[0096]104c、操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置通過進(jìn)程信息獲取函數(shù)從客戶操作系統(tǒng)當(dāng)前進(jìn)程邏輯物理地址中讀取客戶操作系統(tǒng)當(dāng)前進(jìn)程信息。
[0097]本發(fā)明的實(shí)施例提供一種操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取的方法,通過識(shí)別客戶操作系統(tǒng)當(dāng)前進(jìn)程,獲取寄存器現(xiàn)場(chǎng)信息,并根據(jù)由寄存器現(xiàn)場(chǎng)信息計(jì)算出的客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊基地址和客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息,再利用進(jìn)程信息獲取函數(shù),能夠在虛擬環(huán)境下有效地獲取客戶操作系統(tǒng)當(dāng)前進(jìn)程信息。
[0098]具體的,這里以Linux客戶操作系統(tǒng)為例,在基于KVM(Kernel_based VirtualMachine,開源虛擬機(jī))的VMM中,獲取基于Linux的Guest OS (—種客戶操作系統(tǒng))系統(tǒng)中進(jìn)程的進(jìn)程id和進(jìn)程comm兩個(gè)基本信息來(lái)說(shuō)明此方法,具體的實(shí)施步驟如下:
[0099](I) Linux進(jìn)程識(shí)別跟蹤裝置識(shí)別當(dāng)前Linux進(jìn)程,獲取當(dāng)前的寄存器現(xiàn)場(chǎng)信息。
[0100]al、基于VMM對(duì)特權(quán)敏感指令會(huì)產(chǎn)生陷入的特點(diǎn),據(jù)此在KVM中定位到CR3控制寄存器改寫代碼地方。
[0101]a2、從上一步找到了 CR3控制寄存器改寫的代碼位于vmx.c的handle_cr,定位到CR3控制寄存器相關(guān)的部分,此時(shí)可以獲得Linux當(dāng)前的寄存器現(xiàn)場(chǎng)信息。
[0102](2)生成Linux進(jìn)程控制塊字段偏移知識(shí)信息 [0103]al、在 Linux 內(nèi)核源代碼文件(arch/x86/kernel/asm_offsets_32.c)中加入進(jìn)程字段的偏移信息宏。
[0104]其中,本進(jìn)程只關(guān)注進(jìn)程id和進(jìn)程名兩個(gè)字段的字段信息,而這兩個(gè)字段信息具體的獲取過程如下:首先定位到函數(shù)void foo(void)的末尾處,此位置用于添加計(jì)算系統(tǒng)進(jìn)程控制塊字段偏移知識(shí)信息,并在該位置加入需要的進(jìn)程字段偏移信息來(lái)計(jì)算進(jìn)程字段的偏移信息宏,其中GPPID,GPCOMM代表的是進(jìn)程id和進(jìn)程名字段的進(jìn)程字段的偏移信息宏(用這兩個(gè)宏名字作為傳遞給VMM的字段偏移知識(shí)信息),task_struct代表Linux進(jìn)程控制塊數(shù)據(jù)結(jié)構(gòu)名,而pid, comm則代表Linux進(jìn)程控制塊結(jié)構(gòu)體中進(jìn)程id和進(jìn)程名字段,
具體的實(shí)現(xiàn)代碼如下:
[0105]
【權(quán)利要求】
1.一種操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取的方法,其特征在于,包括: 識(shí)別客戶操作系統(tǒng)當(dāng)前進(jìn)程,獲取當(dāng)前的寄存器現(xiàn)場(chǎng)信息; 生成客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息; 通過所述當(dāng)前的寄存器現(xiàn)場(chǎng)信息計(jì)算客戶操作系統(tǒng)當(dāng)前進(jìn)程控制炔基地址; 根據(jù)所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制炔基地址和所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息,利用進(jìn)程信息獲取函數(shù)讀取客戶操作系統(tǒng)當(dāng)前進(jìn)程信息。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述識(shí)別客戶操作系統(tǒng)當(dāng)前進(jìn)程獲取當(dāng)前的寄存器現(xiàn)場(chǎng)信息,包括: 當(dāng)監(jiān)測(cè)到客戶操作系統(tǒng)發(fā)生進(jìn)程切換敏感特權(quán)操作時(shí),識(shí)別所述客戶操作系統(tǒng)當(dāng)前進(jìn)程; 定位存儲(chǔ)有所述客戶操作系統(tǒng)當(dāng)前進(jìn)程的特定系統(tǒng)寄存器的代碼改寫位置; 在所述特定系統(tǒng)寄存器的代碼改寫位置上獲取所述特定系統(tǒng)寄存器的改寫代碼; 在所述特定系統(tǒng)寄存器的改寫代碼中獲取所述當(dāng)前的寄存器現(xiàn)場(chǎng)信息。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述生成客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)息,包括: 選取至少一段所述客戶操作系統(tǒng)當(dāng)前進(jìn)程的進(jìn)程字段; 編寫并計(jì)算所述至少一段所述客戶操作系統(tǒng)當(dāng)前進(jìn)程的進(jìn)程字段的偏移信息宏,并將所述至少一段所述客戶操作系統(tǒng)當(dāng)前進(jìn)程的進(jìn)程字段的偏移信息宏添加到操作系統(tǒng)內(nèi)核源代碼文件中; 對(duì)所述操作系統(tǒng)內(nèi)核源代碼文件進(jìn)行編譯,獲取所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)息。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述通過所述當(dāng)前的寄存器現(xiàn)場(chǎng)信息計(jì)算客戶操作系統(tǒng)當(dāng)前進(jìn)程控制炔基地址,包括: 在所述當(dāng)前的寄存器現(xiàn)場(chǎng)信息中獲取ESP棧指針寄存器的值; 采用所述ESP棧指針寄存器的值計(jì)算客戶操作系統(tǒng)當(dāng)前進(jìn)程基地址: 根據(jù)所述客戶操作系統(tǒng)當(dāng)前進(jìn)程基地址獲取所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制炔基地址。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述根據(jù)所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制炔基地址和所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息,利用進(jìn)程信息獲取函數(shù)讀取當(dāng)前客戶操作系統(tǒng)當(dāng)前進(jìn)程信息,包括: 根據(jù)所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制炔基地址和所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息,生成客戶操作系統(tǒng)當(dāng)前進(jìn)程虛擬地址; 采用所述客戶操作系統(tǒng)當(dāng)前進(jìn)程虛擬地址計(jì)算客戶操作系統(tǒng)當(dāng)前進(jìn)程邏輯物理地 址; 通過進(jìn)程信息獲取函數(shù)從所述客戶操作系統(tǒng)當(dāng)前進(jìn)程邏輯物理地址中讀取客戶操作系統(tǒng)當(dāng)前進(jìn)程信息。
6.一種操作系統(tǒng)進(jìn)程識(shí)別跟蹤及信息獲取裝置,其特征在于,包括: 進(jìn)程識(shí)別單元,用于識(shí)別客戶操作系統(tǒng)當(dāng)前進(jìn)程,獲取當(dāng)前的寄存器現(xiàn)場(chǎng)信息; 信息生成單元,用于生成客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息;基地址計(jì)算單元,用于通過所述信息生成單元生成的所述當(dāng)前的寄存器現(xiàn)場(chǎng)信息計(jì)算當(dāng)前客戶操作系統(tǒng)當(dāng)前進(jìn)程控制炔基地址; 進(jìn)程信息讀取單元,用于根據(jù)所述基地址計(jì)算單元計(jì)算的所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制炔基地址和所述信息生成單元生成的所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息,利用進(jìn)程信息獲取函數(shù)讀取客戶操作系統(tǒng)當(dāng)前進(jìn)程信息。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述進(jìn)程識(shí)別單元,包括: 進(jìn)程識(shí)別模塊,用于當(dāng)監(jiān)測(cè)到客戶操作系統(tǒng)發(fā)生進(jìn)程切換敏感特權(quán)操作時(shí),識(shí)別所述客戶操作系統(tǒng)當(dāng)前進(jìn)程; 位置定位模塊,用于定位存儲(chǔ)有所述進(jìn)程識(shí)別模塊識(shí)別的所述客戶操作系統(tǒng)當(dāng)前進(jìn)程的特定系統(tǒng)寄存器的代碼改寫位置; 第一信息獲取模塊,用于在所述位置定位模塊定位的所述特定系統(tǒng)寄存器的代碼改寫位置上獲取所述特定系統(tǒng)寄存器的改寫代碼; 所述第一信息獲取模塊,還用于在所述第一信息獲取模塊獲取的所述特定系統(tǒng)寄存器的改寫代碼中獲取所述當(dāng)前的寄存器現(xiàn)場(chǎng)信息。
8.根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,所述信息生成單元,包括: 進(jìn)程字段選取模塊,用于選取至少一段所述客戶操作系統(tǒng)當(dāng)前進(jìn)程的進(jìn)程字段; 信息處理模塊,用于編寫并計(jì)算所述進(jìn)程字段選取模塊選取的所述至少一段所述客戶操作系統(tǒng)當(dāng)前進(jìn)程的進(jìn)程字段的偏移信息宏,并將所述進(jìn)程字段選取模塊選取的所述至少一段所述客戶操作系統(tǒng)當(dāng)前進(jìn)程的進(jìn)程字段的偏移信息宏添加到操作系統(tǒng)內(nèi)核源代碼文件中; 偏移信息獲取模塊,用于對(duì)所述信息處理模塊生成的所述操作系統(tǒng)內(nèi)核源代碼文件進(jìn)行編譯,獲取所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述基地址計(jì)算單元,包括: 第二信息獲取模塊,用于在所述信息生成單元生成的所述當(dāng)前的寄存器現(xiàn)場(chǎng)信息中獲取ESP棧指針寄存器的值; 基地址獲取模塊,用于采用所述第二信息獲取模塊獲取的所述ESP棧指針寄存器的值計(jì)算當(dāng)前客戶操作系統(tǒng)當(dāng)前進(jìn)程基地址; 所述基地址獲取模塊,還用于根據(jù)所述基地址獲取模塊獲取的所述客戶操作系統(tǒng)當(dāng)前進(jìn)程基地址獲取所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制炔基地址。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述進(jìn)程信息讀取單元,包括: 地址獲取模塊,用于根據(jù)所述基地址計(jì)算單元獲取的所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制炔基地址和所述信息生成單元生成的所述客戶操作系統(tǒng)當(dāng)前進(jìn)程控制塊字段偏移知識(shí)信息,生成客戶操作系統(tǒng)當(dāng)前進(jìn)程虛擬地址; 所述地址獲取模塊,還用于采用所述地址獲取模塊獲取的所述客戶操作系統(tǒng)當(dāng)前進(jìn)程虛擬地址計(jì)算客戶操作系統(tǒng)當(dāng)前進(jìn)程邏輯物理地址; 進(jìn)程信息讀取模塊,用于 通過進(jìn)程信息獲取函數(shù)從所述地址獲取模塊獲取的所述客戶操作系統(tǒng)當(dāng)前進(jìn)程邏輯物理地址中讀取客戶操作系統(tǒng)當(dāng)前進(jìn)程信息。
【文檔編號(hào)】G06F9/44GK104007956SQ201310062081
【公開日】2014年8月27日 申請(qǐng)日期:2013年2月27日 優(yōu)先權(quán)日:2013年2月27日
【發(fā)明者】熊海泉, 唐志敏, 張志敏, 范東睿 申請(qǐng)人:華為技術(shù)有限公司, 中國(guó)科學(xué)院計(jì)算技術(shù)研究所