虛擬機(jī)進(jìn)程監(jiān)控方法和裝置制造方法
【專利摘要】本發(fā)明提供一種虛擬機(jī)進(jìn)程監(jiān)控方法和裝置,其中,方法包括:獲取虛擬機(jī)的操作系統(tǒng)類型;根據(jù)操作系統(tǒng)類型確定與操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組,內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組中包括:操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)的進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu)以及操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程的進(jìn)程信息在各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中的偏移量;根據(jù)進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu)確定操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址;根據(jù)各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址以及各進(jìn)程的進(jìn)程信息在各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中的偏移量確定操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程的進(jìn)程信息,解決了現(xiàn)有技術(shù)中難以對(duì)宿主機(jī)上安裝有不同操作系統(tǒng)的多個(gè)虛擬機(jī)同時(shí)進(jìn)行監(jiān)控,降低監(jiān)控效率的問題。
【專利說明】虛擬機(jī)進(jìn)程監(jiān)控方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)【技術(shù)領(lǐng)域】,尤其涉及一種虛擬機(jī)進(jìn)程監(jiān)控方法和裝置。
【背景技術(shù)】
[0002]現(xiàn)有技術(shù)中,通過在宿主機(jī)上的虛擬機(jī)監(jiān)控器中安裝監(jiān)控程序,實(shí)現(xiàn)對(duì)宿主機(jī)上的虛擬機(jī)的進(jìn)程進(jìn)行監(jiān)控。
[0003]然而現(xiàn)有技術(shù)中,由于不同種類的操作系統(tǒng)的語義不同,因此虛擬機(jī)監(jiān)控器中的監(jiān)控程序只能分析一種操作系統(tǒng)的語義,獲取安裝有同一種操作系統(tǒng)的多個(gè)虛擬機(jī)的進(jìn)程,難以對(duì)宿主機(jī)上安裝有不同操作系統(tǒng)的多個(gè)虛擬機(jī)同時(shí)進(jìn)行監(jiān)控,降低了監(jiān)控效率。
【發(fā)明內(nèi)容】
[0004]本發(fā)明提供一種虛擬機(jī)進(jìn)程監(jiān)控方法和裝置,用于解決現(xiàn)有技術(shù)中難以對(duì)宿主機(jī)上安裝有不同操作系統(tǒng)的多個(gè)虛擬機(jī)同時(shí)進(jìn)行監(jiān)控,降低監(jiān)控效率的問題。
[0005]本發(fā)明的第一個(gè)方面是提供一種虛擬機(jī)進(jìn)程監(jiān)控方法,包括:
[0006]獲取虛擬機(jī)的操作系統(tǒng)類型;
[0007]根據(jù)所述操作系統(tǒng)類型,查詢預(yù)設(shè)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移集合,確定與所述操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組,所述內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組中包括:所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)的進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu)以及所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程的進(jìn)程信息在各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中的偏移量;
[0008]根據(jù)所述進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu)確定所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址;
[0009]根據(jù)所述各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址以及所述各進(jìn)程的進(jìn)程信息在各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中的偏移量獲取所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程的進(jìn)程信息。
[0010]本發(fā)明的另一個(gè)方面提供一種虛擬機(jī)進(jìn)程監(jiān)控裝置,包括:
[0011]獲取模塊,用于獲取虛擬機(jī)的操作系統(tǒng)類型;
[0012]確定模塊,用于根據(jù)所述操作系統(tǒng)類型,查詢預(yù)設(shè)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移集合,確定與所述操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組,所述內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組中包括:所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)的進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu)以及所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程的進(jìn)程信息在各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中的偏移量;
[0013]所述確定模塊還用于,根據(jù)所述進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu)確定所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址;
[0014]所述獲取模塊還用于,根據(jù)所述各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址以及所述各進(jìn)程的進(jìn)程信息在各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中的偏移量獲取所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程的進(jìn)程信息。
[0015]本發(fā)明通過獲取虛擬機(jī)的操作系統(tǒng)類型,根據(jù)虛擬機(jī)的操作系統(tǒng)類型確定與操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組,根據(jù)內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組獲取虛擬機(jī)中各進(jìn)程的進(jìn)程信息,從而能夠?qū)λ拗鳈C(jī)上安裝有不同操作系統(tǒng)的多個(gè)虛擬機(jī)同時(shí)進(jìn)行監(jiān)控,提高了監(jiān)控效率。
【專利附圖】
【附圖說明】
[0016]圖1為本發(fā)明提供的虛擬機(jī)進(jìn)程監(jiān)控方法一個(gè)實(shí)施例的流程圖;
[0017]圖2為本發(fā)明提供的虛擬機(jī)進(jìn)程監(jiān)控方法又一個(gè)實(shí)施例的流程圖;
[0018]圖3為在待終止進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中保存終止待終止進(jìn)程指令的工作流程示意圖;
[0019]圖4為本發(fā)明提供的虛擬機(jī)進(jìn)程監(jiān)控方法另一個(gè)實(shí)施例的流程圖;
[0020]圖5為本發(fā)明提供的虛擬機(jī)進(jìn)程監(jiān)控裝置一個(gè)實(shí)施例的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0021]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0022]圖1為本發(fā)明提供的虛擬機(jī)進(jìn)程監(jiān)控方法一個(gè)實(shí)施例的流程圖,如圖1所示,包括:
[0023]101、獲取虛擬機(jī)的操作系統(tǒng)類型。
[0024]本發(fā)明的執(zhí)行主體為虛擬機(jī)進(jìn)程監(jiān)控裝置,虛擬機(jī)進(jìn)程監(jiān)控裝置具體可以位于宿主機(jī)上的虛擬監(jiān)控器(Virtual Machine Monitor)中,例如位于虛擬監(jiān)控器KVM(Kernel-based Virtual Machine,)或者虛擬監(jiān)控器XEN中。虛擬監(jiān)控器可以位于虛擬機(jī)操作系統(tǒng)和宿主機(jī)之間。
[0025]對(duì)于本宿主機(jī)上正在運(yùn)行的虛擬機(jī)或者剛從其他宿主機(jī)遷移到本宿主機(jī)的虛擬機(jī),虛擬機(jī)進(jìn)程監(jiān)控裝置可以獲取中斷描述符表(Interrupt Descriptor Table, IDT)寄存器的base數(shù)值;對(duì)于在本宿主機(jī)啟動(dòng)的虛擬機(jī),由于啟動(dòng)過程需要一定的時(shí)間,每次CR3控制寄存器切換時(shí)虛擬機(jī)進(jìn)程監(jiān)控裝置可以讀取IDT寄存器的limit數(shù)值,當(dāng)limit數(shù)值為“Oxff”時(shí)表示IDT寄存器已初始化完成,此時(shí)虛擬機(jī)進(jìn)程監(jiān)控裝置可以獲取IDT寄存器的base數(shù)值。獲取到虛擬機(jī)的IDT寄存器的base數(shù)值之后,虛擬機(jī)進(jìn)程監(jiān)控裝置可以根據(jù)base數(shù)值判斷虛擬機(jī)的操作系統(tǒng)類型。
[0026]虛擬機(jī)進(jìn)程監(jiān)控裝置可以通過創(chuàng)建裝有操作系統(tǒng)的虛擬機(jī)鏡像,使用qemu-system-x86_64命令的-monitor stdio選項(xiàng)啟動(dòng)虛擬機(jī),在標(biāo)準(zhǔn)輸入輸出控制臺(tái)執(zhí)行info register命令來獲取IDT寄存器的base數(shù)值。
[0027]102、根據(jù)操作系統(tǒng)類型,查詢預(yù)設(shè)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移集合,確定與操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組,內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組中包括:操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)的進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu)以及操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程的進(jìn)程信息在各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中的偏移量。
[0028]其中,虛擬機(jī)進(jìn)程監(jiān)控裝置根據(jù)操作系統(tǒng)類型,查詢預(yù)設(shè)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移集合,確定與操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組之前,虛擬機(jī)進(jìn)程監(jiān)控裝置還需要?jiǎng)?chuàng)建內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移集合,內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移集合中包括宿主機(jī)支持的各虛擬機(jī)的操作系統(tǒng)類型以及與各虛擬機(jī)的操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組。
[0029]當(dāng)虛擬機(jī)的操作系統(tǒng)類型為Windows XP或Windows7等操作系統(tǒng)時(shí),虛擬機(jī)進(jìn)程監(jiān)控裝置創(chuàng)建內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移集合中的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組的過程具體可以為:虛擬機(jī)進(jìn)程監(jiān)控裝置可以將IDT寄存器的base數(shù)值作為虛擬機(jī)的操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組的首個(gè)元素;虛擬機(jī)進(jìn)程監(jiān)控裝置還可以使用Windbg中的命令dt獲取進(jìn)程標(biāo)識(shí)號(hào)(UniqueProcessID)、進(jìn)程名稱(ImageFi IeName )、進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu)(ActiveProcessLinks)和 DirectoryTableBase 在 EPR0CESS 結(jié)構(gòu)體中的偏移量、ApcState在KTHREAD結(jié)構(gòu)體中的偏移量以及Process在ApcState結(jié)構(gòu)體中的偏移量,將 UniqueProcessID、ImageFiIeName、ActiveProcessLinks 和 DirectoryTableBase 在EPR0CESS結(jié)構(gòu)體中的偏移量、ApcState在KTHREAD結(jié)構(gòu)體中的偏移量以及Process在Ap c S t a t e結(jié)構(gòu)體中的偏移量按照一定的順序依次作為虛擬機(jī)的操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組的元素。其中,KTHREAD結(jié)構(gòu)體位于Windows內(nèi)核數(shù)據(jù)結(jié)構(gòu)處理器控制區(qū)(KPCR)結(jié)構(gòu)體內(nèi)的 PrcbData 變量中的 Current Process 中。UniqueProcessID、ImageFi I eName、ActiveProcessLinks、DirectoryTableBase > ApcState 和 Process 均為支持Windows XP或Windows7等操作系統(tǒng)的虛擬機(jī)的進(jìn)程信息可以包括的參數(shù)。
[0030]對(duì)應(yīng)的,當(dāng)虛擬機(jī)進(jìn)程監(jiān)控裝置根據(jù)IDT寄存器的base數(shù)值判斷得知虛擬機(jī)的操作系統(tǒng)類型為Windows XP或Wind0ws7等時(shí),虛擬機(jī)進(jìn)程監(jiān)控裝置可以根據(jù)IDT寄存器的base數(shù)值查詢預(yù)設(shè)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移集合,確定與操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組。
[0031]當(dāng)虛擬機(jī)的操作系統(tǒng)類型為Linux虛擬機(jī)支持的Debian、Ubuntu> Fedora或CentOS等操作系統(tǒng)時(shí),虛擬機(jī)進(jìn)程監(jiān)控裝置創(chuàng)建內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移集合中的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組的過程具體可以為:虛擬機(jī)進(jìn)程監(jiān)控裝置可以執(zhí)行x/2x IDTR.base+0x400指令獲取0x80號(hào)中斷描述符,即系統(tǒng)調(diào)用表入口地址,將系統(tǒng)調(diào)用表入口地址作為虛擬機(jī)的操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組的首個(gè)元素;在虛擬機(jī)內(nèi)部安裝內(nèi)核模塊工具,采用內(nèi)核模塊工具來獲取進(jìn)程標(biāo)識(shí)號(hào)(pid)、進(jìn)程名稱(comm)、內(nèi)存結(jié)構(gòu)體(mm_struct)、進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu)(tasks)和待處理信號(hào)(pending_signal)等在task_struct結(jié)構(gòu)體中的偏移量及頁目錄入口地址Pgd和內(nèi)存啟動(dòng)代碼(start_code )在mm_struct結(jié)構(gòu)體中的偏移量,將 pid、comm、mm_st;ruct、tasks、pending_signal 等結(jié)構(gòu)在 task_struct 結(jié)構(gòu)體中的偏移量及pgd、start_code在mm_struct結(jié)構(gòu)體中的偏移按照一定的順序依次作為虛擬機(jī)的操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組的元素。其中,pid、comm、mm_struct、tasks、pending_signal、pgd 和 start_code 均為支持 Debian、Ubuntu、Fedora 或 CentOS 等操作系統(tǒng)的虛擬機(jī)的進(jìn)程信息可以包括的參數(shù)。
[0032]對(duì)應(yīng)的,當(dāng)虛擬機(jī)進(jìn)程監(jiān)控裝置根據(jù)IDT寄存器的base數(shù)值判斷得知虛擬機(jī)的操作系統(tǒng)類型為Linux虛擬機(jī)支持的Debian、Ubuntu> Fedora或CentOS等操作系統(tǒng)時(shí),虛擬機(jī)進(jìn)程監(jiān)控裝置可以執(zhí)行x/2x IDTR.base+0x400指令獲取0x80號(hào)中斷描述符,即系統(tǒng)調(diào)用表入口地址,根據(jù)系統(tǒng)調(diào)用表入口地址查詢預(yù)設(shè)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移集合,確定與操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組。
[0033]103、根據(jù)進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu)確定操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址。
[0034]其中,根據(jù)進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu)確定操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址之前,還包括:獲取操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中正在運(yùn)行的進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址;對(duì)應(yīng)的,步驟103具體可以為:根據(jù)正在運(yùn)行的進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址查詢進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu),確定操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中除正在運(yùn)行的進(jìn)程之外的其他進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址。
[0035]具體地,當(dāng)虛擬機(jī)內(nèi)部進(jìn)行進(jìn)程切換時(shí),虛擬機(jī)的狀態(tài)將會(huì)存放在虛擬監(jiān)控器維護(hù)的虛擬機(jī)控制結(jié)構(gòu)體(Virtual Machine Control Structure, VMCS)中,因此虛擬機(jī)進(jìn)程監(jiān)控裝置可以從虛擬監(jiān)控器維護(hù)的VMCS中獲取進(jìn)程切換之前虛擬機(jī)內(nèi)部正在運(yùn)行的進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址。
[0036]104、根據(jù)各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址以及各進(jìn)程的進(jìn)程信息在各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中的偏移量獲取操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程的進(jìn)程信息。
[0037]進(jìn)一步地,步驟104之后,還可以包括:創(chuàng)建與操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)包括:操作系統(tǒng)類型,操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組,操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)的進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu)。
[0038]例如,虛擬機(jī)進(jìn)程監(jiān)控裝置可以為虛擬機(jī)創(chuàng)建對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)vm_info。若虛擬機(jī)的操作系統(tǒng)類型為Windows XP,ffindows7等,虛擬機(jī)進(jìn)程監(jiān)控裝置還需要將FS寄存器在內(nèi)核態(tài)的數(shù)值寫入vm_info結(jié)構(gòu)體的fs_base變量中。另外,vm_info結(jié)構(gòu)體中還可以包括下一個(gè)vm_info結(jié)構(gòu)體指針。
[0039]更進(jìn)一步地,步驟104中根據(jù)各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址以及各進(jìn)程的進(jìn)程信息在各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中的偏移量確定操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程的進(jìn)程信息的過程具體可以為,虛擬機(jī)進(jìn)程監(jiān)控裝置可以先根據(jù)正在運(yùn)行的進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址和正在運(yùn)行的進(jìn)程的進(jìn)程信息在該進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中的偏移量確定正在運(yùn)行的進(jìn)程的進(jìn)程信息;然后根據(jù)正在運(yùn)行的進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址查詢進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu),獲取下一進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址,采用與獲取正在運(yùn)行的進(jìn)程的進(jìn)程信息的方法,獲取下一進(jìn)程的進(jìn)程信息。
[0040]例如,對(duì)于支持Debian、Ubuntu> Fedora、CentOS等操作系統(tǒng)的Linux虛擬機(jī),虛擬機(jī)進(jìn)程監(jiān)控裝置獲取Linux虛擬機(jī)的進(jìn)程信息的具體步驟可以為:當(dāng)Linux虛擬機(jī)企圖修改CR3控制寄存器時(shí),Linux虛擬機(jī)將執(zhí)行權(quán)限交給虛擬監(jiān)控器,虛擬機(jī)進(jìn)程監(jiān)控裝置獲取ESP寄存器的數(shù)值,將ESP寄存器的數(shù)值和OxFFFFEOOO進(jìn)行“與”操作后得到Linux虛擬機(jī)中正在運(yùn)行的進(jìn)程對(duì)應(yīng)的task_struct結(jié)構(gòu)體的虛擬地址;結(jié)合task_struct結(jié)構(gòu)體的虛擬地址和虛擬機(jī)對(duì)應(yīng)的vm_info結(jié)構(gòu)體中的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組,讀取pid、comm、pending_signal等正在運(yùn)行的進(jìn)程的進(jìn)程信息;以正在運(yùn)行的進(jìn)程作為起始進(jìn)程,讀取task_struct結(jié)構(gòu)體中的進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu),獲取下一個(gè)進(jìn)程的進(jìn)程信息,依次進(jìn)行下去,直到下一個(gè)進(jìn)程指向正在運(yùn)行的進(jìn)程,從而獲取到虛擬機(jī)內(nèi)部的全部進(jìn)程的進(jìn)程信息。
[0041]又例如,對(duì)于支持Windows XP、Windows7等操作系統(tǒng)的Windows虛擬機(jī),虛擬機(jī)進(jìn)程監(jiān)控裝置獲取Windows虛擬機(jī)的進(jìn)程信息的具體步驟可以為:當(dāng)Windows虛擬機(jī)企圖修改CR3控制寄存器時(shí),Windows虛擬機(jī)將執(zhí)行權(quán)限交給虛擬機(jī)進(jìn)程監(jiān)控裝置,虛擬機(jī)進(jìn)程監(jiān)控裝置根據(jù)vm_info結(jié)構(gòu)體中的fs_base獲取Windows內(nèi)核數(shù)據(jù)結(jié)構(gòu)KPCR的地址;獲取KPCR結(jié)構(gòu)體內(nèi)的PrcbData變量(類型為KPRCB結(jié)構(gòu)體)中Current Process的KTHREAD結(jié)構(gòu)體地址,KTHREAD結(jié)構(gòu)體內(nèi)的ApcState變量(類型為KAPC_STATE結(jié)構(gòu)體)中的Process指針指向正在運(yùn)行的進(jìn)程的EPR0CESS結(jié)構(gòu)體。結(jié)合EPR0CESS結(jié)構(gòu)體以及虛擬機(jī)對(duì)應(yīng)的vm_info結(jié)構(gòu)體內(nèi)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組,讀取進(jìn)程標(biāo)識(shí)號(hào)、進(jìn)程名稱等進(jìn)程信息;以正在運(yùn)行的進(jìn)程作為起始進(jìn)程,讀取EPR0CESS結(jié)構(gòu)體中的ActiveProcessLinks進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu),獲取下一個(gè)進(jìn)程的信息,依次進(jìn)行下去,直到下一個(gè)進(jìn)程指針指向當(dāng)前進(jìn)程,從而獲取到虛擬機(jī)內(nèi)部的全部進(jìn)程的進(jìn)程信息。
[0042]本實(shí)施例中,通過獲取虛擬機(jī)的操作系統(tǒng)類型,根據(jù)虛擬機(jī)的操作系統(tǒng)類型確定與操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組,根據(jù)內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組獲取虛擬機(jī)中各進(jìn)程的進(jìn)程信息,從而能夠?qū)λ拗鳈C(jī)上安裝有不同操作系統(tǒng)的多個(gè)虛擬機(jī)同時(shí)進(jìn)行監(jiān)控,提高了監(jiān)控效率。
[0043]圖2為本發(fā)明提供的虛擬機(jī)進(jìn)程監(jiān)控方法又一個(gè)實(shí)施例的流程圖,如圖2所示,在圖1所示實(shí)施例的基礎(chǔ)上,操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程的進(jìn)程信息可以包括:各進(jìn)程的進(jìn)程標(biāo)識(shí)號(hào)。為了保證虛擬機(jī)進(jìn)程監(jiān)控裝置能夠終止虛擬機(jī)中需要終止的進(jìn)程,步驟104之后,還可以包括:
[0044]105、獲取待終止進(jìn)程的進(jìn)程標(biāo)識(shí)號(hào)。
[0045]其中,待終止進(jìn)程可以由用戶根據(jù)操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程的安全性提前進(jìn)行設(shè)置。
[0046]106、根據(jù)待終止進(jìn)程的進(jìn)程標(biāo)識(shí)號(hào)終止待終止進(jìn)程。
[0047]具體地,步驟106具體可以為:根據(jù)待終止進(jìn)程的進(jìn)程標(biāo)識(shí)號(hào),獲取待終止進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址;根據(jù)待終止進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址,在待終止進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中保存終止待終止進(jìn)程的終止進(jìn)程指令,以使操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)執(zhí)行所述終止進(jìn)程指令。
[0048]例如,對(duì)于支持Debian、Ubuntu、Fedora、CentOS等操作系統(tǒng)的Linux虛擬機(jī),虛擬機(jī)進(jìn)程監(jiān)控裝置根據(jù)待終止進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址,在待終止進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中保存終止待終止進(jìn)程的終止進(jìn)程指令的工作流程示意圖如圖3所示,具體可以為:(I)在啟動(dòng)虛擬機(jī)時(shí)添加-monitor pty>monitorFile2>&l選項(xiàng),將QEMU Monitor控制臺(tái)重定向到monitorFile文件;(2)向monitorFile文件寫終止進(jìn)程命令kill X(X為待終止的進(jìn)程標(biāo)識(shí)號(hào)),利用QMP (QEMU Monitor Protocol)解析終止進(jìn)程命令后,通過ioctl向虛擬監(jiān)控器中的進(jìn)程控制模塊發(fā)送命令;(3)進(jìn)程控制模塊收到命令后,根據(jù)虛擬機(jī)的uuid找到虛擬機(jī)的vm_info結(jié)構(gòu)體,通過vm_info結(jié)構(gòu)體內(nèi)的進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu)找到待終止的進(jìn)程對(duì)應(yīng)的proc_identity結(jié)構(gòu)體,該結(jié)構(gòu)體存放待終止進(jìn)程的task_struct結(jié)構(gòu)體的虛擬地址;
(4)結(jié)合內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組中的pending_signal偏移量和task_struct結(jié)構(gòu)體的虛擬地址,在虛擬監(jiān)控器層將數(shù)值為0x100的SIGKILL信號(hào)設(shè)置在pending_signal中,并設(shè)置thread結(jié)構(gòu)體中的flags的數(shù)值為1UL〈〈2,將thread結(jié)構(gòu)體中的preempt_count的數(shù)值為0x0。從而使得虛擬機(jī)在判斷task_struct結(jié)構(gòu)體的pending_signal中攜帶SIGKILL信號(hào),且thread結(jié)構(gòu)體中的flags的數(shù)值為1UL〈〈2, thread結(jié)構(gòu)體中的preempt_count的數(shù)值為0x0時(shí),終止待終止進(jìn)程。
[0049]本實(shí)施例中,通過獲取虛擬機(jī)的操作系統(tǒng)類型,根據(jù)虛擬機(jī)的操作系統(tǒng)類型確定與操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組,根據(jù)內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組獲取虛擬機(jī)中各進(jìn)程的進(jìn)程信息,并對(duì)待終止進(jìn)程進(jìn)行終端,從而能夠?qū)λ拗鳈C(jī)上安裝有不同操作系統(tǒng)的多個(gè)虛擬機(jī)同時(shí)進(jìn)行監(jiān)控,提高了監(jiān)控效率。
[0050]圖4為本發(fā)明提供的虛擬機(jī)進(jìn)程監(jiān)控方法另一個(gè)實(shí)施例的流程圖,如圖4所示,在圖1所示實(shí)施例的基礎(chǔ)上,為了保證虛擬機(jī)進(jìn)程監(jiān)控裝置能夠在進(jìn)程對(duì)待操作數(shù)據(jù)塊的操作超過待操作數(shù)據(jù)塊的訪問權(quán)限時(shí)終止進(jìn)程,步驟104之后,還可以包括:
[0051]107、獲取操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中正在運(yùn)行的進(jìn)程中待操作數(shù)據(jù)塊的塊號(hào)。
[0052]其中,虛擬機(jī)的內(nèi)存中包括至少一個(gè)塊組,每個(gè)塊組中包括至少一個(gè)數(shù)據(jù)塊,每個(gè)數(shù)據(jù)塊由至少一個(gè)扇區(qū)組成。虛擬機(jī)運(yùn)行過程中,虛擬機(jī)進(jìn)程監(jiān)控裝置可以對(duì)虛擬機(jī)內(nèi)的I/o操作進(jìn)行實(shí)時(shí)監(jiān)控和截獲,獲取虛擬機(jī)中正在運(yùn)行的進(jìn)程中待操作數(shù)據(jù)塊的塊號(hào)。
[0053]108、在預(yù)設(shè)的受保護(hù)數(shù)據(jù)塊集合中存在待操作數(shù)據(jù)塊時(shí),判斷正在運(yùn)行的進(jìn)程是否為可疑進(jìn)程。
[0054]其中,可疑進(jìn)程指的是虛擬機(jī)中存在安全問題或者可能存在安全問題的進(jìn)程,可疑進(jìn)程可以在獲取到虛擬機(jī)中全部進(jìn)程的進(jìn)程信息后,由虛擬監(jiān)控器或者用戶提前進(jìn)行設(shè)置。
[0055]109、在正在運(yùn)行的進(jìn)程為可疑進(jìn)程時(shí),判斷正在運(yùn)行的進(jìn)程對(duì)待操作數(shù)據(jù)塊的操作是否超過待操作數(shù)據(jù)塊的訪問權(quán)限。
[0056]虛擬機(jī)中各數(shù)據(jù)塊的訪問權(quán)限可以由虛擬監(jiān)控器或者用戶提前進(jìn)行設(shè)置。例如,當(dāng)虛擬監(jiān)控器將待操作的數(shù)據(jù)塊的訪問權(quán)限設(shè)置為只讀時(shí),若正在運(yùn)行的進(jìn)程對(duì)待操作數(shù)據(jù)塊的操作為寫操作,則正在運(yùn)行的進(jìn)程對(duì)待操作數(shù)據(jù)塊的操作超過待操作的數(shù)據(jù)塊的訪問權(quán)限。又例如,當(dāng)虛擬監(jiān)控器將待操作的數(shù)據(jù)塊的訪問權(quán)限設(shè)置為不可進(jìn)行任何操作時(shí),若正在運(yùn)行的進(jìn)程對(duì)待操作數(shù)據(jù)塊的操作為讀操作或者寫操作,則正在運(yùn)行的進(jìn)程對(duì)待操作數(shù)據(jù)塊的操作超過待操作的數(shù)據(jù)塊的訪問權(quán)限。
[0057]110、在正在運(yùn)行的進(jìn)程對(duì)待操作數(shù)據(jù)塊的操作超過待操作數(shù)據(jù)塊的訪問權(quán)限時(shí),終止正在運(yùn)行的進(jìn)程對(duì)待操作數(shù)據(jù)塊的操作。
[0058]此處終止正在運(yùn)行的進(jìn)程對(duì)待操作數(shù)據(jù)塊的操作與實(shí)施例2中虛擬機(jī)進(jìn)程監(jiān)控裝置終止待終止進(jìn)程的過程類似,此處不再進(jìn)行贅述。
[0059]進(jìn)一步地,步驟107之前,還可以包括:創(chuàng)建虛擬機(jī)對(duì)應(yīng)的配置文件,配置文件中包括:受保護(hù)的文件以及受保護(hù)的文件的訪問權(quán)限;確定受保護(hù)的文件在操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中對(duì)應(yīng)的數(shù)據(jù)塊;將受保護(hù)的文件在操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中對(duì)應(yīng)的數(shù)據(jù)塊確定為受保護(hù)數(shù)據(jù)塊;將受保護(hù)的文件的訪問權(quán)限確定為與受保護(hù)的文件對(duì)應(yīng)的受保護(hù)數(shù)據(jù)塊的訪問權(quán)限;將受保護(hù)數(shù)據(jù)塊和受保護(hù)數(shù)據(jù)塊的訪問權(quán)限保存到受保護(hù)數(shù)據(jù)塊集合中。
[0060]其中,配置文件為基于用戶配置的特定文件集合。配置文件中特定文件的訪問權(quán)限分為只讀和不可讀不可寫。前者只允許可疑進(jìn)程對(duì)特定文件進(jìn)行讀操作,后者不允許可疑進(jìn)程對(duì)特定文件的任何操作。虛擬機(jī)進(jìn)程監(jiān)控裝置創(chuàng)建虛擬機(jī)對(duì)應(yīng)的配置文件的具體過程可以為:在宿主機(jī)內(nèi)為啟用虛擬機(jī)進(jìn)程監(jiān)控裝置的所有虛擬機(jī)鏡像文件建立目錄,在每個(gè)目錄中創(chuàng)建用戶敏感文件的配置文件,用戶將需要進(jìn)行保護(hù)的文件寫進(jìn)該配置文件中。另外,在啟動(dòng)虛擬機(jī)之前,若用戶敏感文件發(fā)生了變化,虛擬機(jī)進(jìn)程監(jiān)控裝置還可以修改配置文件,指定本次啟動(dòng)虛擬機(jī)時(shí)需要進(jìn)行保護(hù)的文件集合。
[0061]進(jìn)一步地,虛擬機(jī)進(jìn)程監(jiān)控裝置確定受保護(hù)的文件在操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中對(duì)應(yīng)的數(shù)據(jù)塊的具體過程可以為:將虛擬機(jī)鏡像文件掛載在宿主機(jī)中,獲取虛擬機(jī)鏡像文件中各文件的文件名對(duì)應(yīng)的inode號(hào)。(2)在啟動(dòng)虛擬機(jī)時(shí)分析虛擬機(jī)鏡像文件的文件系統(tǒng)的相關(guān)信息,包括塊大小、inode大小、塊組個(gè)數(shù)等。(3)根據(jù)表1中的公式計(jì)算與各文
件--對(duì)應(yīng)的inode的地址。其中bg_num為inode所在的塊組,inode_offset表示inode
在inode表中的偏移位置。inode_addr表不inode在虛擬機(jī)鏡像文件中的塊號(hào),即inode對(duì)應(yīng)的結(jié)構(gòu)體的地址。(4)獲取該文件的inode結(jié)構(gòu)體后,第41~100字節(jié)是記錄該inode對(duì)應(yīng)的文件所占用的數(shù)據(jù)塊信息。其中,若虛擬機(jī)鏡像文件的文件系統(tǒng)為EXT2或EXT3文件系統(tǒng),則inode結(jié)構(gòu)體的第41~88字節(jié)為12個(gè)直接塊指針,即每四個(gè)字節(jié)表示一個(gè)存放數(shù)據(jù)的數(shù)據(jù)塊號(hào);第89~92字節(jié)為“一次間接塊指針”,即這四個(gè)字節(jié)表示一個(gè)塊號(hào),塊號(hào)對(duì)應(yīng)的塊中的每四個(gè)字節(jié)表示的才是存放數(shù)據(jù)的數(shù)據(jù)塊號(hào);以此類推,93~96字節(jié)為“二次間接塊指針”,97~100字節(jié)為“三次間接塊指針”。若虛擬機(jī)鏡像文件的文件系統(tǒng)為EXT4,則需要分析inode結(jié)構(gòu)體中的extent結(jié)構(gòu)體獲得文件所占用的所有塊號(hào)。
[0062]表1inode地址計(jì)算公式
[0063]
【權(quán)利要求】
1.一種虛擬機(jī)進(jìn)程監(jiān)控方法,其特征在于,包括: 獲取虛擬機(jī)的操作系統(tǒng)類型; 根據(jù)所述操作系統(tǒng)類型,查詢預(yù)設(shè)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移集合,確定與所述操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組,所述內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組中包括:所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)的進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu)以及所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程的進(jìn)程信息在各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中的偏移量; 根據(jù)所述進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu)確定所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址; 根據(jù)所述各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址以及所述各進(jìn)程的進(jìn)程信息在各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中的偏移量獲取所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程的進(jìn)程信息。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述獲取虛擬機(jī)的操作系統(tǒng)類型之前,還包括: 創(chuàng)建內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移集合,所述內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移集合中包括宿主機(jī)支持的各虛擬機(jī)的操作系統(tǒng)類型以及與各虛擬機(jī)的操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述根據(jù)所述進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu)確定所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址之前,還包括: 獲取所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中正在運(yùn)行的進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址; 所述根據(jù)所述進(jìn) 程鏈表數(shù)據(jù)結(jié)構(gòu)確定所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址,包括: 根據(jù)所述正在運(yùn)行的進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址查詢所述進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu),確定所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中除所述正在運(yùn)行的進(jìn)程之外的其他進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址。
4.根據(jù)權(quán)利要求1-3任一項(xiàng)所述的方法,其特征在于,所述根據(jù)所述各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址以及所述各進(jìn)程的進(jìn)程信息在各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中的偏移量獲取所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程的進(jìn)程信息之后,還包括: 創(chuàng)建與所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu)包括:所述操作系統(tǒng)類型,所述操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組,所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)的進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu)。
5.根據(jù)權(quán)利要求1-3任一項(xiàng)所述的方法,其特征在于,所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程的進(jìn)程信息包括:各進(jìn)程的進(jìn)程標(biāo)識(shí)號(hào); 所述根據(jù)所述各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址以及所述各進(jìn)程的進(jìn)程信息在各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中的偏移量獲取所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程的進(jìn)程信息之后,還包括: 獲取待終止進(jìn)程的進(jìn)程標(biāo)識(shí)號(hào); 根據(jù)所述待終止進(jìn)程的進(jìn)程標(biāo)識(shí)號(hào)終止所述待終止進(jìn)程。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述根據(jù)所述待終止進(jìn)程的進(jìn)程標(biāo)識(shí)號(hào)終止所述待終止進(jìn)程,包括: 根據(jù)所述待終止進(jìn)程的進(jìn)程標(biāo)識(shí)號(hào),獲取所述待終止進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址; 根據(jù)所述待終止進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址,在所述待終止進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中保存終止所述待終止進(jìn)程的終止進(jìn)程指令,以使所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)執(zhí)行所述終止進(jìn)程指令。
7.根據(jù)權(quán)利要求1-3任一項(xiàng)所述的方法,其特征在于,所述根據(jù)所述各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址以及所述各進(jìn)程的進(jìn)程信息在各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中的偏移量獲取所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程的進(jìn)程信息之后,還包括: 獲取所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中正在運(yùn)行的進(jìn)程中待操作數(shù)據(jù)塊的塊號(hào);在預(yù)設(shè)的受保護(hù)數(shù)據(jù)塊集合中存在所述待操作數(shù)據(jù)塊時(shí),判斷所述正在運(yùn)行的進(jìn)程是否為可疑進(jìn)程; 在所述正在運(yùn)行的進(jìn)程為可疑進(jìn)程時(shí),判斷所述正在運(yùn)行的進(jìn)程對(duì)所述待操作數(shù)據(jù)塊的操作是否超過所述待操作數(shù)據(jù)塊的訪問權(quán)限; 在所述正在運(yùn)行的進(jìn)程對(duì)所述待操作數(shù)據(jù)塊的操作超過所述待操作數(shù)據(jù)塊的訪問權(quán)限時(shí),終止所述正在運(yùn)行的進(jìn)程對(duì)所述待操作數(shù)據(jù)塊的操作。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述獲取所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中正在運(yùn)行的進(jìn)程中待操作數(shù)據(jù)塊的塊號(hào)之前,還包括: 創(chuàng)建所述虛擬機(jī)對(duì)應(yīng)的配置文件,所述配置文件中包括:受保護(hù)的文件以及所述受保護(hù)的文件的訪問權(quán)限; 確定所述受保護(hù)的文件在所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中對(duì)應(yīng)的數(shù)據(jù)塊; 將所述受保護(hù)的文件在所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中對(duì)應(yīng)的數(shù)據(jù)塊確定為受保護(hù)數(shù)據(jù)塊; 將所述受保護(hù) 的文件的訪問權(quán)限確定為與所述受保護(hù)的文件對(duì)應(yīng)的受保護(hù)數(shù)據(jù)塊的訪問權(quán)限; 將所述受保護(hù)數(shù)據(jù)塊和所述受保護(hù)數(shù)據(jù)塊的訪問權(quán)限保存到所述受保護(hù)數(shù)據(jù)塊集合中。
9.一種虛擬機(jī)進(jìn)程監(jiān)控裝置,其特征在于,包括: 獲取模塊,用于獲取虛擬機(jī)的操作系統(tǒng)類型; 確定模塊,用于根據(jù)所述操作系統(tǒng)類型,查詢預(yù)設(shè)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移集合,確定與所述操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組,所述內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組中包括:所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)的進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu)以及所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程的進(jìn)程信息在各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中的偏移量; 所述確定模塊還用于,根據(jù)所述進(jìn)程鏈表數(shù)據(jù)結(jié)構(gòu)確定所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址; 所述獲取模塊還用于,根據(jù)所述各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體的虛擬地址以及所述各進(jìn)程的進(jìn)程信息在各進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體中的偏移量獲取所述操作系統(tǒng)類型對(duì)應(yīng)的虛擬機(jī)中各進(jìn)程的進(jìn)程信息。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,還包括:創(chuàng)建模塊; 所述創(chuàng)建模塊用于,在所述獲取模塊獲取虛擬機(jī)的操作系統(tǒng)類型之前,創(chuàng)建內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移集合,所述內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移集合中包括宿主機(jī)支持的各虛擬機(jī)的操作系統(tǒng)類型以及與各虛擬機(jī)的操作系統(tǒng)類型對(duì)應(yīng)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移數(shù)組。
【文檔編號(hào)】G06F11/30GK103544090SQ201310485094
【公開日】2014年1月29日 申請(qǐng)日期:2013年10月16日 優(yōu)先權(quán)日:2013年10月16日
【發(fā)明者】李博, 李楠, 崔磊, 李建欣, 邰振贏 申請(qǐng)人:北京航空航天大學(xué)