CN104007956A - 一种操作系统进程识别跟踪及信息获取的方法和装置 - Google Patents

一种操作系统进程识别跟踪及信息获取的方法和装置 Download PDF

Info

Publication number
CN104007956A
CN104007956A CN201310062081.3A CN201310062081A CN104007956A CN 104007956 A CN104007956 A CN 104007956A CN 201310062081 A CN201310062081 A CN 201310062081A CN 104007956 A CN104007956 A CN 104007956A
Authority
CN
China
Prior art keywords
operating system
client operating
information
current process
system current
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201310062081.3A
Other languages
English (en)
Other versions
CN104007956B (zh
Inventor
熊海泉
唐志敏
张志敏
范东睿
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Institute of Computing Technology of CAS
Original Assignee
Huawei Technologies Co Ltd
Institute of Computing Technology of CAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd, Institute of Computing Technology of CAS filed Critical Huawei Technologies Co Ltd
Priority to CN201310062081.3A priority Critical patent/CN104007956B/zh
Priority to PCT/CN2014/070497 priority patent/WO2014131319A1/zh
Publication of CN104007956A publication Critical patent/CN104007956A/zh
Application granted granted Critical
Publication of CN104007956B publication Critical patent/CN104007956B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/815Virtual
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明的实施例提供了一种操作系统进程识别跟踪及信息获取的方法和装置,涉及软件技术领域,能够在虚拟环境下有效地获取客户操作系统当前进程信息。该方法包括:识别客户操作系统当前进程,获取当前的寄存器现场信息;生成客户操作系统当前进程控制块字段偏移知识信息;通过当前的寄存器现场信息计算客户操作系统当前进程控制块基地址;根据客户操作系统当前进程控制块基地址和客户操作系统当前进程控制块字段偏移知识信息,利用进程信息获取函数读取客户操作系统当前进程信息。本发明应用于虚拟化环境下客户操作系统当前进程信息的获取。

Description

一种操作系统进程识别跟踪及信息获取的方法和装置
技术领域
本发明涉及软件技术领域,尤其涉及一种操作系统进程识别跟踪及信息获取的方法和装置。
背景技术
现今,基于虚拟化技术实现的多个高效虚拟机计算环境技术特征,使其在服务器资源整合、系统软件开发与调试、系统容错、系统安全、绿色计算、负载均衡等众多领域得到了广泛的应用。为了能使其可以应用的更加广泛,还需要解决虚拟化技术中的许多问题。而语义鸿沟就是其中最重要的问题之一,所谓语义鸿沟是指当前主流虚拟化技术中VMM(Virtual Machine Monitor,虚拟机管理器)因缺乏关于Guest OS(客户操作系统)内部软件抽象知识信息而对底层虚拟机陷入等事件所隐含的语义无法有效解释的现象。这种现象造成了VMM可以观测到所有来自Guest OS的底层陷入交互事件,但是在缺少Guest OS内部语义信息知识的情况下无法获知这些事件所隐含的意义。对于Linux(一种操作系统)操作系统来说,在运行进程时,将进程的页表基地址信息加载到MMU(Memory Management Unit,内存管理单元)中,而CR3控制寄存器代表当前进程的页目录基地址。由于每一个进程只有一套页面信息,因此每当遇到不同的值写到CR3中时,就代表新的进程开始运行,因此,只需对CR3进行监控,当其发生改变时就意味着进程发生切换,识别到操作系统的当前进程,进而基于虚拟CPU(Central Processing Unit,中央处理器)现场信息并借助于Guest OS进程软件抽象知识,如进程控制块字段偏移,便可进一步获取进程的信息。
在实现上述进程信息获取过程中,发明人发现现有技术中至少存在如下问题:上述的第一种方法只适用于Linux自身,但不适用于虚拟机环境,第二种方法基于逆向工程获取的信息量非常有限,且由于内核版本的差异,每次获取相同信息都需要进行一次逆向工程,工作量大。
发明内容
本发明的实施例提供一种操作系统进程识别跟踪及信息获取的方法和装置,能够在虚拟环境下有效地获取客户操作系统当前进程信息。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,提供一种操作系统进程识别跟踪及信息获取的方法,包括:
识别客户操作系统当前进程,获取当前的寄存器现场信息;
生成客户操作系统当前进程控制块字段偏移知识信息;
通过所述当前的寄存器现场信息计算客户操作系统当前进程控制块基地址;
根据所述客户操作系统当前进程控制块基地址和所述客户操作系统当前进程控制块字段偏移知识信息,利用进程信息获取函数读取客户操作系统当前进程信息。
在第一种可能的实现方式中,根据第一方面,所述识别客户操作系统当前进程获取当前的寄存器现场信息,包括:
当监测到客户操作系统发生进程切换敏感特权操作时,识别所述客户操作系统当前进程;
定位存储有所述客户操作系统当前进程的特定系统寄存器的代码改写位置;
在所述特定系统寄存器的代码改写位置上获取所述特定系统寄存器的改写代码;
在所述特定系统寄存器的改写代码中获取所述当前的寄存器现场信息。
在第二种可能的实现方式中,结合第一方面或第一种可能的实现方式,所述生成客户操作系统当前进程控制块字段偏移知识信息,包括:
选取至少一段所述客户操作系统当前进程的进程字段;
编写并计算所述至少一段所述客户操作系统当前进程的进程字段的偏移信息宏,并将所述至少一段所述客户操作系统当前进程的进程字段的偏移信息宏添加到操作系统内核源代码文件中;
对所述操作系统内核源代码文件进行编译,获取所述客户操作系统当前进程控制块字段偏移知识信息。
在第三种可能的实现方式中,根据第二种可能的实现方式所述通过所述当前的寄存器现场信息计算客户操作系统当前进程控制块基地址,包括:
在所述当前的寄存器现场信息中获取ESP栈指针寄存器的值;
采用所述ESP栈指针寄存器的值计算客户操作系统当前进程基地址;
根据所述客户操作系统当前进程基地址获取所述客户操作系统当前进程控制块基地址。
在第四种可能的实现方式中,根据第三种可能的实现方式,所述根据所述客户操作系统当前进程控制块基地址和所述客户操作系统当前进程控制块字段偏移知识信息,利用进程信息获取函数读取当前客户操作系统当前进程信息,包括:
根据所述客户操作系统当前进程控制块基地址和所述客户操作系统当前进程控制块字段偏移知识信息,生成客户操作系统当前进程虚拟地址;
采用所述客户操作系统当前进程虚拟地址计算客户操作系统当前进程逻辑物理地址;
通过进程信息获取函数从所述客户操作系统当前进程逻辑物理地址中读取客户操作系统当前进程信息。
第二方面,提供一种操作系统进程识别跟踪及信息获取装置,包括:
进程识别单元,用于识别客户操作系统当前进程,获取当前的寄存器现场信息;
信息生成单元,用于生成客户操作系统当前进程控制块字段偏移知识信息;
基地址计算单元,用于通过所述信息生成单元生成的所述当前的寄存器现场信息计算当前客户操作系统当前进程控制块基地址;
进程信息读取单元,用于根据所述基地址计算单元计算的所述客户操作系统当前进程控制块基地址和所述信息生成单元生成的所述客户操作系统当前进程控制块字段偏移知识信息,利用进程信息获取函数读取当前客户操作系统当前进程信息。
在第一种可能的实现方式中,根据第二方面,所述进程识别单元,包括:
进程识别模块,用于当监测到客户操作系统发生进程切换敏感特权操作时,识别所述客户操作系统当前进程;
位置定位模块,用于定位存储有所述进程识别模块识别的所述客户操作系统当前进程的特定系统寄存器的代码改写位置;
第一信息获取模块,用于在所述位置定位模块定位的所述特定系统寄存器的代码改写位置上获取所述特定系统寄存器的改写代码;
所述第一信息获取模块,还用于在所述第一信息获取模块获取的所述特定系统寄存器的改写代码中获取所述当前的寄存器现场信息。
在第二种可能的实现方式中,结合第二方面或第一种可能的实现方式,所述信息生成单元,包括:
进程字段选取模块,用于选取至少一段所述客户操作系统当前进程的进程字段;
信息处理模块,用于编写并计算所述进程字段选取模块选取的所述至少一段所述客户操作系统当前进程的进程字段的偏移信息宏,并将所述进程字段选取模块选取的所述至少一段所述客户操作系统当前进程的进程字段的偏移信息宏添加到操作系统内核源代码文件中;
偏移信息获取模块,用于对所述信息处理模块生成的所述操作系统内核源代码文件进行编译,获取所述客户操作系统当前进程控制块字段偏移知识信息。
在第三种可能的实现方式中,根据第二种可能的实现方式,所述基地址计算单元,包括:
第二信息获取模块,用于在所述信息生成单元生成的所述当前的寄存器现场信息中获取ESP栈指针寄存器的值;
基地址获取模块,用于采用所述第二信息获取模块获取的所述ESP栈指针寄存器的值计算当前客户操作系统当前进程基地址;
所述基地址获取模块,还用于根据所述基地址获取模块获取的所述当前客户操作系统当前进程基地址获取所述当前客户操作系统当前进程控制块基地址。
在第四种可能的实现方式中,根据第三种可能的实现方式,所述进程信息读取单元,包括:
地址获取模块,用于根据所述基地址计算单元获取的所述客户操作系统当前进程控制块基地址和所述信息生成单元生成的所述客户操作系统当前进程控制块字段偏移知识信息,生成客户操作系统当前进程虚拟地址;
所述地址获取模块,还用于采用所述地址获取模块获取的所述客户操作系统当前进程虚拟地址计算客户操作系统当前进程逻辑物理地址;
进程信息读取模块,用于通过进程信息获取函数从所述地址获取模块获取的所述客户操作系统当前进程逻辑物理地址中读取客户操作系统当前进程信息。
本发明的实施例提供一种操作系统进程识别跟踪及信息获取的方法和装置,通过识别客户操作系统当前进程,获取寄存器现场信息,并根据由寄存器现场信息计算出的客户操作系统当前进程控制块基地址和客户操作系统当前进程控制块字段偏移知识信息,再利用进程信息获取函数,能够在虚拟环境下有效地获取客户操作系统当前进程信息。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的实施例提供的一种操作系统进程识别跟踪及信息获取的方法的流程示意图;
图2为本发明的实施例提供的另一种操作系统进程识别跟踪及信息获取的方法的流程示意图;
图3为本发明的实施例提供的一种操作系统进程识别跟踪及信息获取装置的结构示意图;
图4为本发明的实施例提供的另一种操作系统进程识别跟踪及信息获取装置的结构示意图;
图5为本发明的另一实施例提供的一种操作系统进程识别跟踪及信息获取装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
现今,虽然虚拟化技术得到了广泛的应用,但是虚拟化技术还是存在很多的问题,如虚拟化技术中的语义鸿沟的问题,该问题造成了VMM(Virtual Machine Monitor虚拟机管理器)可以观测到所有来自Guest OS的底层陷入交互事件,但是在缺少Guest OS内部语义信息知识的情况下无法获知这些事件所隐含的意义,因此,本发明提供实施例提供的一种操作系统进程识别跟踪及信息获取的方法,可以使得VMM在虚拟环境下可以获取操作系统的进程信息,如图1所示,该方法包括如下步骤:
101、操作系统进程识别跟踪及信息获取装置识别客户操作系统当前进程,获取当前的寄存器现场信息。
其中,上述的客户操作系统是指在虚拟环境中应用的操作系统,该操作系统包括但不限定于:Linux操作系统(开源的)、Windows操作系统和Unix操作系统。
进一步可选的,如图2所示,步骤101具体包括如下步骤:
101a、当监测到客户操作系统发生进程切换敏感特权操作时,操作系统进程识别跟踪及信息获取装置识别客户操作系统当前进程。
具体的,每一个客户操作系统当前进程都有一个独立的虚拟地址空间,且每个客户操作系统当前进程都可以由对应的一个页目录基地址来确定。每当客户操作系统当前进程运行时,都需要将该客户操作系统当前进程加载到物理机器对应的特定系统寄存器当中(如X86(由Intel推出的一种复杂指令集,用于控制芯片的运行的程序)的CR3控制寄存器),而该操作过程在虚拟环境中为敏感特权操作,因此,当监测到客户操作系统当前进程发生进程切换敏感特权操作时,当前执行的客户操作系统当前进程会陷入到VMM中,从而使得VMM能够识别到操作系统当前的进程。
101b、操作系统进程识别跟踪及信息获取装置定位存储有所述客户操作系统当前进程的特定系统寄存器的代码改写位置。
101c、操作系统进程识别跟踪及信息获取装置在特定系统寄存器的代码改写位置上获取特定系统寄存器的改写代码。
101d、操作系统进程识别跟踪及信息获取装置在特定系统寄存器的改写代码中获取当前的寄存器现场信息。
102、操作系统进程识别跟踪及信息获取装置生成客户操作系统当前进程控制块字段偏移知识信息。
其中,操作系统内核在不同配置编译下,其中的进程控制块字段结构是不同的,因此一些关键字段域在其中的偏移也会不同,为了给出准确的字段偏移,这里采用在操作系统内核中添加计算进程控制块字段偏移的方法来生成客户操作系统当前进程控制块字段偏移知识信息。
进一步可选的,如图2所示,步骤102具体包括如下步骤:
102a、操作系统进程识别跟踪及信息获取装置选取至少一段客户操作系统当前进程的进程字段。
具体的,这里选取的至少一段当前进程的进程字段是根据实际需要所选取的,这里可以将上述的字段标记为s1,s2,......。
102b、操作系统进程识别跟踪及信息获取装置编写并计算至少一段客户操作系统当前进程的进程字段的偏移信息宏,并将至少一段客户操作系统当前进程的进程字段的偏移信息宏添加到操作系统内核源代码文件中。
其中,在计算至少一段当前进程的进程字段的偏移信息宏之前,首先根据实际系统找到对应的构架分支目录,其中典型目录格式为arch/X/kernel/asm-offsetsY.c,其中X代表CPU(Central ProcessingUnit,中央处理器)的结构类型,Y则代表同一架构下不同位宽,如32位或64位。其次,在其中定位到一个名称为void foo(void)的函数,并在其末尾添加所需的进程字段的偏移信息宏,具体格式为:
......
BLANK()
OFFSET(GPS1,task_struct,s1)
OFFSET(GPS2,task_struct,s2)
......
102c、操作系统进程识别跟踪及信息获取装置对操作系统内核源代码文件进行编译,获取客户操作系统当前进程控制块字段偏移知识信息。
此外,由于客户操作系统当前进程控制块字段偏移知识信息只有应用在当前的寄存器现场信息中,才能够获取客户操作系统当前进程中所需要的信息,进而利用进程信息获取函数读取客户操作系统当前进程信息。
103、操作系统进程识别跟踪及信息获取装置通过当前的寄存器现场信息计算客户操作系统当前进程控制块基地址。
进一步可选的,如图2所示,步骤103具体包括如下步骤:
103a、操作系统进程识别跟踪及信息获取装置在当前的寄存器现场信息中获取ESP栈指针寄存器的值。
103b、操作系统进程识别跟踪及信息获取装置采用ESP栈指针寄存器的值计算客户操作系统当前进程基地址。
103c、操作系统进程识别跟踪及信息获取装置根据客户操作系统当前进程基地址获取客户操作系统当前进程控制块基地址。
具体的,若这里以Linux操作系统为例,在Linux2.6以后的版本中,Linux进程内核堆栈、当前Linux进程的thread_info结构以及当前Linux进程控制块task_strcut有如下特点:
Linux进程内核堆栈与当前Linux进程的thread_info结构体共享一块存储区域,其中,thread_info结构体从共享存储区域块低位地址开始存放信息,而Linux进程内核堆栈则从共享块存储区域块高位地址开始存放信息。而当前Linux进程thread_info的第一个字段指向的是当前Linux进程控制块的指针。
根据上述特点,VMM中当前Linux进程控制块基地址计算方法步骤如下:
当Linux进程发生切换时,此刻Linux操作系统必然处于内核态,因此ESP(Extended stack pointer,栈指针寄存器)指向的地方一定位于Linux进程内核堆栈区域内,由此利用Linux进程内核堆栈与Linux进程thread_info结构体共享存储区域的特点,掩码屏蔽掉内核堆栈指针ESP栈指针寄存器低位部分获得当前进程的thread_info的基地址,具体如下公式所示,其中的Kernel Stack Size为Linux进程内核堆栈大小,典型的值有4KB和8KB两种。
thread_info_base=ESP&&(~(KernelStackSize-1))
在获得了thread_info的基地址之后,利用task_struct始终位于其第一个字段的特点,可以知道它的地址实际上也就是当前进程控制块task_struct的地址,简单的进行一下指针类型转换,就可以获取Linux当前进程控制块的基地址,从而为获取进程各种信息打下基础。
104、操作系统进程识别跟踪及信息获取装置根据客户操作系统当前进程控制块基地址和客户操作系统当前进程控制块字段偏移知识信息,利用进程信息获取函数读取客户操作系统当前进程信息。
进一步可选的,如图2所示,步骤104具体包括如下步骤:
104a、操作系统进程识别跟踪及信息获取装置根据客户操作系统当前进程控制块基地址和客户操作系统当前进程控制块字段偏移知识信息,生成客户操作系统当前进程虚拟地址。
104b、操作系统进程识别跟踪及信息获取装置采用客户操作系统当前进程虚拟地址计算客户操作系统当前进程逻辑物理地址。
104c、操作系统进程识别跟踪及信息获取装置通过进程信息获取函数从客户操作系统当前进程逻辑物理地址中读取客户操作系统当前进程信息。
本发明的实施例提供一种操作系统进程识别跟踪及信息获取的方法,通过识别客户操作系统当前进程,获取寄存器现场信息,并根据由寄存器现场信息计算出的客户操作系统当前进程控制块基地址和客户操作系统当前进程控制块字段偏移知识信息,再利用进程信息获取函数,能够在虚拟环境下有效地获取客户操作系统当前进程信息。
具体的,这里以Linux客户操作系统为例,在基于KVM(Kernel-based Virtual Machine,开源虚拟机)的VMM中,获取基于Linux的Guest OS(一种客户操作系统)系统中进程的进程id和进程comm两个基本信息来说明此方法,具体的实施步骤如下:
(1)Linux进程识别跟踪装置识别当前Linux进程,获取当前的寄存器现场信息。
a1、基于VMM对特权敏感指令会产生陷入的特点,据此在KVM中定位到CR3控制寄存器改写代码地方。
a2、从上一步找到了CR3控制寄存器改写的代码位于vmx.c的handle_cr,定位到CR3控制寄存器相关的部分,此时可以获得Linux当前的寄存器现场信息。
(2)生成Linux进程控制块字段偏移知识信息
a1、在Linux内核源代码文件(arch/x86/kernel/asm-offsets_32.c)中加入进程字段的偏移信息宏。
其中,本进程只关注进程id和进程名两个字段的字段信息,而这两个字段信息具体的获取过程如下:首先定位到函数void foo(void)的末尾处,此位置用于添加计算系统进程控制块字段偏移知识信息,并在该位置加入需要的进程字段偏移信息来计算进程字段的偏移信息宏,其中GPPID,GPCOMM代表的是进程id和进程名字段的进程字段的偏移信息宏(用这两个宏名字作为传递给VMM的字段偏移知识信息),task_struct代表Linux进程控制块数据结构名,而pid,comm则代表Linux进程控制块结构体中进程id和进程名字段,具体的实现代码如下:
a2、对经过上步处理过的Linux内核源代码进行编译,生成进程id和进程名的系统进程控制块字段偏移知识信息。
具体的,在对经过上步处理过的Linux内核源代码进行编译之后,会在Linux源代码的根目录下include/generated目录中生成asm-offsets_32.h文件,该文件包含了VMM中需要的系统进程控制块字段偏移知识信息。
其中,asm-offsets_32.h中关于字段偏移知识信息的格式如下:
#define GPPID508
#define GPCOMM752
其中GPPID,GPCOMM就是上一步在Linux内核源代码中增加的进程字段的偏移信息宏,而508,752代表Linux当前配置下,pid和comm在task_struct结构中的实际偏移值,当VMM需要获取进程id和进程名的信息时就需要用到这个偏移值。
a3、将操作Linux控制块字段偏移知识信息应用到当前的寄存器现场信息中。
其中,为了在当前的寄存器现场信息中加入Linux控制块字段偏移知识信息,需要将前面生成的头文件asm-offsets_32.h增加到vmx.c文件中。
(3)计算当前Linux进程控制块基地址
a1、获取Linux中ESP栈指针寄存器的值。
识别到Linux当前进程后,在VMM中就可以获得当前Linux操作系统的寄存器现场信息,其中对于获取Linux进程信息最为关键的就是ESP栈指针寄存器的值,且其具体获取方法如下:
通过kvm_register_read获取ESP栈指针寄存器的值,如下所示:
esp_addr=kvm_register_read(vcpu,VCPU_REGS_RSP)
a2、计算当前Linux进程thread_info基地址。
在Linux2.6以后的版本中,Linux进程的内核堆栈是与Linux进程的thread_info结构体共享的,其中,在thread_info结构体的第一个字段,就是执行Linux进程控制块的指针,因此,为了获得Linux进程控制块的基地址,首先需要获得thread_info的基地址,具体方法如下:
由于系统可能是64位或32位,因此配置的内核堆栈的大小也不尽不同,例如,有的内核堆栈配置为8KB,也可能配置为4KB,则当内核堆栈大小为8KB时,将ESP值的低13位设置为0,当内核堆栈大小为4KB时,将低位的12为设置为0,实际的代码如下,其中,gpdvaddr_p代表当前进程thread_info的基地址。
a3、获取当前Linux进程控制块基地址。
在获得当前进程thread_info数据结构的基地址后,在KVM中需要将其转换之后才能用kvm_read_guest读取信息,这样读取的第一个字段即是当前Linux进程控制块基地址,具体由下面两行实例代码完成,其中,gpdaddr代表当前进程控制块基地址。
(4)Linux进程信息的获取
具体的,根据获得的当前Linux进程控制块基地址和Linux进程控制块字段偏移知识信息,生成Linux进程虚拟地址,再采用Linux进程虚拟地址计算Linux进程逻辑物理地址,最后再通过KVM中的kvm_read_guest函数就可以依次获取到相应信息,具体实例代码如下,其中gpdaddr为进程控制块基地址,GPPID核GPCOMM分别为进程控制块字段偏移信息,gppid,gpcomm则分别获取进程id和进程名信息的变量。
kvm_read_guest(vcpu->kvm,(gpa_t)(gpdaddr+GPPID),gppid,4);
kvm_read_guest(vcpu->kvm,(gpa_t)(gpdaddr+GPCOMM),gpcomm,16);
经过以上代码的处理,在gppid和gpcomm中分别得到关于当前进程的进程pid和进程名信息。
具体实施例二:
具体的,这里以Linux操作系统为例,且基于Xen(一个开源的虚拟机监视器)的HVM(Hardware Virtual Machin,硬件虚拟机)完全虚拟化环境,获取基于Linux的Guest OS系统中进程的进程ID和进程comm两个基本信息来说明此方法,从原理上来看,Xen的HVM完全虚拟化方式与KVM基本一致,因此此类情形的处理跟KVM差异不大,主要区别在于关键函数的名称有差异,具体描述如下:
(1)Linux进程识别跟踪装置识别当前Linux进程,获取当前的寄存器现场信息。
b1、基于VMM对特权敏感指令会产生陷入的特点,据此在xen中定位到CR3寄存器改写代码地方。
b2、从上一步找到了CR3控制寄存器改写的代码位于arch/x86/hvm/vmx/vmx.c的vmx_vmexit_handler,通过检查识别,从而定位到CR3控制寄存器相关的部分,也即vmx_cr_access,最终到达move_to_cr3(即CR3控制寄存器的改写代码位置),此处可以作为VMM获取Linux进程信息的地方。
(2)生成Linux进程控制块字段偏移知识信息
b1、在Linux内核源代码文件(arch/x86/kernel/asm-offsets_32.c)中加入进程字段的偏移信息宏。
其中,本进程只关注进程id和进程名两个字段的字段信息,而这两个字段信息具体的获取过程如下:首先定位到函数void foo(void)的末尾处,此位置用于添加计算系统进程控制块字段偏移知识信息,并在该位置加入需要的进程字段偏移信息来计算进程字段的偏移信息宏,其中GPPID,GPCOMM代表的是进程id和进程名字段的进程字段的偏移信息宏(用这两个宏名字作为传递给VMM的字段偏移知识信息),task_struct代表Linux进程控制块数据结构名,而pid,comm则代表Linux进程控制块结构体中进程id和进程名字段,具体的实现代码如下:
b2、对经过上步处理过的Linux内核源代码进行编译,生成进程id和进程名的系统进程控制块字段偏移知识信息。
具体的,在对经过上步处理过的Linux内核源代码进行编译之后,会在Linux源代码的根目录下include/generated目录中生成asm-offsets_32.h文件,该文件包含了VMM中需要的系统进程控制块字段偏移知识信息。
其中,asm-offsets_32.h中关于字段偏移知识信息的格式如下:
#define GPPID508
#define GPCOMM752
其中GPPID,GPCOMM就是上一步在Linux内核源代码中增加的进程字段的偏移信息宏,而508,752代表Linux当前配置下,pid和comm在task_struct结构中的实际偏移值,当VMM需要获取进程id和进程名的信息时就需要用到这个偏移值。
b3、将操作Linux控制块字段偏移知识信息添加到当前的寄存器现场信息中。
其中,为了在当前的寄存器现场信息中加入Linux控制块字段偏移知识信息,需要将前面生成的头文件asm-offsets_32.h增加到vmx.c文件中。
(3)计算当前Linux进程控制块基地址
b1、获取Linux中ESP栈指针寄存器的值。
识别到Linux当前进程后,在VMM中就可以获得当前Linux操作系统的寄存器现场信息,其中对于获取Linux进程信息最为关键的就是ESP栈指针寄存器的值,且其具体获取方法如下:
通过CASE_GET_REG(Xen中的寄存器宏处理宏)获取ESP栈指针寄存器的值
esp_addr=CASE_GET_REG(vcpu,VCPU_REGS_RSP);
b2、计算当前Linux进程thread_info基地址。
在Linux2.6以后的版本中,Linux进程的内核堆栈是与Linux进程的thread_info结构体共享的,其中,在thread_info结构体的第一个字段,就是执行Linux进程控制块的指针,因此,为了获得Linux进程控制块的基地址,首先需要获得thread_info的基地址,具体方法如下:
由于系统可能是64位或32位,因此配置的内核堆栈的大小也不尽不同,例如,有的内核堆栈配置为8KB,也可能配置为4KB,则当内核堆栈大小为8KB时,将ESP值的低13位设置为0,当内核堆栈大小为4KB时,将低位的12为设置为0,实际的代码如下,其中,gpdvaddr_p代表当前进程thread_info的基地址。
b3、获取当前Linux进程控制块基地址。
在获得当前进程thread_info数据结构的基地址后,在KVM中需要将其转换之后才能用hvmemul_read(Xen中已有的服务函数)读取信息,这样读取的第一个字段即是当前Linux进程控制块基地址的读取,具体由下面两行实例代码完成,其中gpdaddr代表当前进程控制块基地址:
(4)Linux进程信息的获取
具体的,根据获得的当前Linux进程控制块基地址和Linux进程控制块字段偏移知识信息,生成Linux进程虚拟地址,再采用Linux进程虚拟地址计算Linux进程逻辑物理地址,最后再通过Xen中的hvmemul_read函数就可以依次获取到相应信息,具体实例代码如下,其中gpdaddr为进程控制块基地址,GPPID核GPCOMM分别为进程控制块字段偏移信息,gppid,gpcomm则分别获取进程id和进程名信息的变量。
hvmemul_read(vcpu->kvm,(gpa_t)(gpdaddr+GPPID),gppid,4);
hvmemul_read
(vcpu->kvm,(gpa_t)(gpdaddr+GPCOMM),gpcomm,16);
经过以上代码的处理,在gppid和gpcomm中分别得到关于当前进程的进程pid和进程名信息。
具体实施例三:
具体的,这里以Linux为客户操作系统为例,且基于Xen的PVM(Paravirtualized Virtual Machine,半虚拟化虚拟机)半虚拟化环境,获取基于Linux的Guest OS系统中进程的进程ID和进程comm两个基本信息来说明此方法,具体描述如下:
(1)Linux进程识别跟踪装置识别当前Linux进程,获取当前的寄存器现场信息。
具体的,在Xen的PVM半虚拟化方式下,由于支持Xen半虚拟化的Linux对CR3控制寄存器的改写不是直接进行的,而是通过Xen半虚拟化的接口pv_mmu_ops中的xen_write_cr3来改写CR3控制寄存器,而xen_write_cr3最终会触发对Xen的超级系统调用do_mmuext_op函数的调用。因此通过超级系统调用的参数,在do_mmuext_op中定位到CR3控制寄存器的改写部分,其后,在new_guest_cr3中可以定位到CR3控制寄存器的改写代码,具体说明如下:
c1、当支持半虚拟化的Linux操作系统发生进程切换时,会调用内存半虚拟化接口pv_mmu_ops中的xen_write_cr3函数。
c2、跟踪xen_write_cr3,其将触发对Xen超级系统调用do_mmuext_op函数的调用,从而进入Xen中,也即支持半虚拟化的Linux发生进程切换时会因为对Xen的do_mmuext_op同步调用而进入Xen的VMM中,这与KVM和Xen的HVM方式由硬件直接触发而进入VMM中在功能效果上是一致的,即Linux中需要VMM监管处理的操作,都会通知给VMM。
c3、进入Xen之后,在超级系统调用do_mmuext_op处理函数中,根据参数定位到MMUEXT_NEW_BASEPTR,也即CR3控制寄存器基地址改写部分,调用其中的new_guest_cr3。
c4、在new_guest_cr3中,加入相关的处理代码,就可以在Xen中获取Linux进程信息。
(2)生成Linux进程控制块字段偏移知识信息
c1、在Linux内核源代码文件(arch/x86/kernel/asm-offsets_32.c)中加入进程字段的偏移信息宏。
其中,本进程只关注进程id和进程名两个字段的字段信息,而这两个字段信息具体的获取过程如下:首先定位到函数void foo(void)的末尾处,此位置用于添加计算系统进程控制块字段偏移知识信息,并在该位置加入需要的进程字段偏移信息来计算进程字段的偏移信息宏,其中GPPID,GPCOMM代表的是进程id和进程名字段的进程字段的偏移信息宏(用这两个宏名字作为传递给VMM的字段偏移知识信息),task_struct代表Linux进程控制块数据结构名,而pid,comm则代表Linux进程控制块结构体中进程id和进程名字段,具体的实现代码如下:
c2、对经过上步处理过的Linux内核源代码进行编译,生成进程id和进程名的系统进程控制块字段偏移知识信息。
具体的,在对经过上步处理过的Linux内核源代码进行编译之后,会在Linux源代码的根目录下include/generated目录中生成asm-offsets_32.h文件,该文件包含了VMM中需要的系统进程控制块字段偏移知识信息。
其中,asm-offsets_32.h中关于字段偏移知识信息的格式如下:
#define GPPID 508
#define GPCOMM 752
其中GPPID,GPCOMM就是上一步在Linux内核源代码中增加的进程字段的偏移信息宏,而508,752代表Linux当前配置下,pid和comm在task_struct结构中的实际偏移值,当VMM需要获取进程id和进程名的信息时就需要用到这个偏移值。
c3、将操作Linux控制块字段偏移知识信息应用到当前的寄存器现场信息中。
其中,为了在当前的寄存器现场信息中加入Linux控制块字段偏移知识信息,需要将前面生成的头文件asm-offsets_32.h增加到vmx.c文件中。
(3)计算当前Linux进程控制块基地址
具体的,其中ESP栈指针寄存器的读取可以直接从当前vcpu数据结构获取,curr代表当前的vcpu;而进程信息获取函数采用get_user,具体步骤描述如下:
c1、获得Linux进程内核堆栈指针。
esp=curr->arch.guest_context.kernel_sp
c2、获得Linux进程thread_info基地址。
thread_info_base=esp&0xFFFF(E|F)000
c3、获得Linux进程控制块基地址。
task_struct_base=(unsigned long*)(thread_info_addr);
(4)Linux进程信息的获取
具体的,根据获得的当前Linux进程控制块基地址和Linux进程控制块字段偏移知识信息,生成Linux进程虚拟地址,再采用Linux进程虚拟地址计算Linux进程逻辑物理地址,最后再通过Xen中的get_user函数就可以依次获取到相应信息,如进程id和进程名comm,可以为GPPID和GPCOMM,获取方法如下:
gppid=get_user(task_struct_base,GPPID);
gpcomm=get_user(task_struct_base,GPCOMM);
经过以上代码的处理,在gppid和gpcomm中分别得到关于当前进程的进程pid和进程名信息。
本发明的实施例提供一种操作系统进程识别跟踪及信息获取的方法,通过识别客户操作系统当前进程,获取寄存器现场信息,并根据由寄存器现场信息计算出的客户操作系统当前进程控制块基地址和客户操作系统当前进程控制块字段偏移知识信息,再利用进程信息获取函数,能够在虚拟环境下有效地获取客户操作系统当前进程信息。
本发明的实施例提供一种操作系统进程识别跟踪及信息获取装置,该操作系统进程识别跟踪及信息获取装置用于实现上述操作系统进程识别跟踪及信息获取方法,如图3所示,该操作系统进程识别跟踪及信息获取装置包括:进程识别单元31、信息生成单元32、基地址计算单元33和进程信息读取单元34,其中:
进程识别单元31,用于识别客户操作系统当前进程,获取当前的寄存器现场信息。
信息生成单元32,用于生成客户操作系统当前进程控制块字段偏移知识信息。
基地址计算单元33,用于通过信息生成单元32生成当前的寄存器现场信息计算当前客户操作系统当前进程控制块基地址。
进程信息读取单元34,用于根据基地址计算单元33计算的客户操作系统当前进程控制块基地址和信息生成单元32生成的客户操作系统当前进程控制块字段偏移知识信息,利用进程信息获取函数读取客户操作系统当前进程信息。
进一步可选的,如图4所示,进程识别单元31,包括:进程识别模块311、位置定位模块312和第一信息获取模块313,其中:
进程识别模块311,用于当监测到操作系统发生进程切换敏感特权操作时,识别当前客户操作系统当前进程。
位置定位模块312,用于定位存储有进程识别模块311识别的客户操作系统当前进程的特定系统寄存器的代码改写位置。
第一信息获取模块313,用于在位置定位模块312定位的特定系统寄存器的代码改写位置上获取特定系统寄存器的改写代码。
第一信息获取模块313,还用于在第一信息获取模块313获取的特定系统寄存器的改写代码中获取当前的寄存器现场信息。
进一步可选的,如图4所示,信息生成单元32,包括:进程字段选取模块321、信息处理模块322和偏移信息获取模块323,其中:
进程字段选取模块321,用于选取至少一段客户操作系统当前进程的进程字段。
信息处理模块322,用于编写并计算进程字段选取模块321选取的至少一段客户操作系统当前进程的进程字段的偏移信息宏,并将进程字段选取模块321选取的至少一段客户操作系统当前进程的进程字段的偏移信息宏添加到操作系统内核源代码文件中。
偏移信息获取模块323,用于对信息处理模块322生成的操作系统内核源代码文件进行编译,获取客户操作系统当前进程控制块字段偏移知识信息。
进一步可选的,如图4所示,基地址计算单元33,包括:第二信息获取模块331和基地址获取模块332,其中:
第二信息获取模块331,用于在信息生成单元32生成的当前的寄存器现场信息中获取ESP栈指针寄存器的值。
基地址获取模块332,用于采用第二信息获取模块331获取的ESP栈指针寄存器的值计算当前客户操作系统当前进程基地址。
基地址获取模块332,还用于根据基地址获取模块332获取的客户操作系统当前进程基地址获取当前客户操作系统当前进程控制块基地址。
进一步可选的,如图4所示,进程信息读取单元34,包括:地址获取模块341和进程信息读取模块342,其中:
地址获取模块341,用于根据基地址计算单元33获取的客户操作系统当前进程控制块基地址和信息生成单元32生成的客户操作系统当前进程控制块字段偏移知识信息,生成客户操作系统当前进程虚拟地址。
地址获取模块341,还用于采用地址获取模块341获取的客户操作系统当前进程虚拟地址计算客户操作系统当前进程逻辑物理地址。
进程信息读取模块342,用于通过进程信息获取函数从地址获取模块341获取的客户操作系统当前进程逻辑物理地址中读取当前客户操作系统当前进程信息。
本发明的实施例提供一种操作系统进程识别跟踪及信息获取装置,通过识别客户操作系统当前进程,获取寄存器现场信息,并根据由寄存器现场信息计算出的客户操作系统当前进程控制块基地址和客户操作系统当前进程控制块字段偏移知识信息,再利用进程信息获取函数,能够在虚拟环境下有效地获取客户操作系统当前进程信息。
图5为本发明的另一实施例提供的一种操作系统进程识别跟踪及信息获取装置结构示意图,该操作系统进程识别跟踪及信息获取装置用于实现上述客操作系统进程识别跟踪及信息获取方法,该操作系统进程识别跟踪及信息获取装置5包括至少一个处理器41,存储器42,通信总线43以及至少一个通信接口44。
其中,通信总线43用于实现上述组件之间的连接并通信,该通信接口44用于与外部设备连接并通信。
存储器42中存储需要执行的程序代码,这些程序代码具体可以包括:进程识别单元421、信息生成单元422、基地址计算单元423和进程信息读取单元424。
处理器41用于执行所述存储器42中存储的单元,当上述单元被所述处理器41执行时,实现如下功能:
进程识别单元421,用于识别客户操作系统当前进程,获取当前的寄存器现场信息。
信息生成单元422,用于生成客户操作系统当前进程控制块字段偏移知识信息。
基地址计算单元423,用于通过信息生成单元422生成当前的寄存器现场信息计算客户操作系统当前进程控制块基地址。
进程信息读取单元424,用于根据基地址计算单元423计算的客户操作系统当前进程控制块基地址和信息生成单元422生成的客户操作系统当前进程控制块字段偏移知识信息,利用进程信息获取函数读取客户操作系统当前进程信息。
进一步可选的,进程识别单元421,包括:进程识别模块、位置定位模块和第一信息获取模块,其中:
进程识别模块,用于当监测到操作系统发生进程切换敏感特权操作时,识别客户操作系统当前进程。
位置定位模块,用于定位存储有进程识别模块识别的客户操作系统当前进程的特定系统寄存器的代码改写位置。
第一信息获取模块,用于在位置定位模块定位的特定系统寄存器的代码改写位置上获取特定系统寄存器的改写代码。
第一信息获取模块,还用于在第一信息获取模块获取的特定系统寄存器的改写代码中获取当前的寄存器现场信息。
进一步可选的,信息生成单元422,包括:进程字段选取模块、信息处理模块和偏移信息获取模块,其中:
进程字段选取模块,用于选取至少一段客户操作系统当前进程的进程字段。
信息处理模块,用于编写并计算进程字段选取模块选取的至少一段客户操作系统当前进程的进程字段的偏移信息宏,并将进程字段选取模块选取的至少一段客户操作系统当前进程的进程字段的偏移信息宏添加到操作系统内核源代码文件中。
偏移信息获取模块,用于对信息处理模块生成的操作系统内核源代码文件进行编译,获取客户操作系统当前进程控制块字段偏移知识信息。
进一步可选的,基地址计算单元423,包括:第二信息获取模块和基地址获取模块,其中:
第二信息获取模块,用于在信息生成单元422生成的当前的寄存器现场信息中获取ESP栈指针寄存器的值。
基地址获取模块,用于采用第二信息获取模块获取的ESP栈指针寄存器的值计算客户操作系统当前进程基地址。
基地址获取模块,还用于根据基地址获取模块获取的客户操作系统当前进程基地址获取客户操作系统当前进程控制块基地址。
进一步可选的,进程信息读取单元424,包括:地址获取模块和进程信息读取模块,其中:
地址获取模块,用于根据基地址计算单元423获取的客户操作系统当前进程控制块基地址和信息生成单元422生成的客户操作系统当前进程控制块字段偏移知识信息,生成客户操作系统当前进程虚拟地址。
地址获取模块,还用于采用地址获取模块获取的客户操作系统当前进程虚拟地址计算客户操作系统当前进程逻辑物理地址。
进程信息读取模块,用于通过进程信息获取函数从地址获取模块341获取的客户操作系统当前进程逻辑物理地址中读取客户操作系统当前进程信息。
本发明的实施例提供一种操作系统进程识别跟踪及信息获取装置,通过识别客户操作系统当前进程,获取寄存器现场信息,并根据由寄存器现场信息计算出的客户操作系统当前进程控制块基地址和客户操作系统当前进程控制块字段偏移知识信息,再利用进程信息获取函数,能够在虚拟环境下有效地获取客户操作系统当前进程信息。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

Claims (10)

1.一种操作系统进程识别跟踪及信息获取的方法,其特征在于,包括:
识别客户操作系统当前进程,获取当前的寄存器现场信息;
生成客户操作系统当前进程控制块字段偏移知识信息;
通过所述当前的寄存器现场信息计算客户操作系统当前进程控制块基地址;
根据所述客户操作系统当前进程控制块基地址和所述客户操作系统当前进程控制块字段偏移知识信息,利用进程信息获取函数读取客户操作系统当前进程信息。
2.根据权利要求1所述的方法,其特征在于,所述识别客户操作系统当前进程获取当前的寄存器现场信息,包括:
当监测到客户操作系统发生进程切换敏感特权操作时,识别所述客户操作系统当前进程;
定位存储有所述客户操作系统当前进程的特定系统寄存器的代码改写位置;
在所述特定系统寄存器的代码改写位置上获取所述特定系统寄存器的改写代码;
在所述特定系统寄存器的改写代码中获取所述当前的寄存器现场信息。
3.根据权利要求1或2所述的方法,其特征在于,所述生成客户操作系统当前进程控制块字段偏移知识信息,包括:
选取至少一段所述客户操作系统当前进程的进程字段;
编写并计算所述至少一段所述客户操作系统当前进程的进程字段的偏移信息宏,并将所述至少一段所述客户操作系统当前进程的进程字段的偏移信息宏添加到操作系统内核源代码文件中;
对所述操作系统内核源代码文件进行编译,获取所述客户操作系统当前进程控制块字段偏移知识信息。
4.根据权利要求3所述的方法,其特征在于,所述通过所述当前的寄存器现场信息计算客户操作系统当前进程控制块基地址,包括:
在所述当前的寄存器现场信息中获取ESP栈指针寄存器的值;
采用所述ESP栈指针寄存器的值计算客户操作系统当前进程基地址:
根据所述客户操作系统当前进程基地址获取所述客户操作系统当前进程控制块基地址。
5.根据权利要求4所述的方法,其特征在于,所述根据所述客户操作系统当前进程控制块基地址和所述客户操作系统当前进程控制块字段偏移知识信息,利用进程信息获取函数读取当前客户操作系统当前进程信息,包括:
根据所述客户操作系统当前进程控制块基地址和所述客户操作系统当前进程控制块字段偏移知识信息,生成客户操作系统当前进程虚拟地址;
采用所述客户操作系统当前进程虚拟地址计算客户操作系统当前进程逻辑物理地址;
通过进程信息获取函数从所述客户操作系统当前进程逻辑物理地址中读取客户操作系统当前进程信息。
6.一种操作系统进程识别跟踪及信息获取装置,其特征在于,包括:
进程识别单元,用于识别客户操作系统当前进程,获取当前的寄存器现场信息;
信息生成单元,用于生成客户操作系统当前进程控制块字段偏移知识信息;
基地址计算单元,用于通过所述信息生成单元生成的所述当前的寄存器现场信息计算当前客户操作系统当前进程控制块基地址;
进程信息读取单元,用于根据所述基地址计算单元计算的所述客户操作系统当前进程控制块基地址和所述信息生成单元生成的所述客户操作系统当前进程控制块字段偏移知识信息,利用进程信息获取函数读取客户操作系统当前进程信息。
7.根据权利要求6所述的装置,其特征在于,所述进程识别单元,包括:
进程识别模块,用于当监测到客户操作系统发生进程切换敏感特权操作时,识别所述客户操作系统当前进程;
位置定位模块,用于定位存储有所述进程识别模块识别的所述客户操作系统当前进程的特定系统寄存器的代码改写位置;
第一信息获取模块,用于在所述位置定位模块定位的所述特定系统寄存器的代码改写位置上获取所述特定系统寄存器的改写代码;
所述第一信息获取模块,还用于在所述第一信息获取模块获取的所述特定系统寄存器的改写代码中获取所述当前的寄存器现场信息。
8.根据权利要求6或7所述的装置,其特征在于,所述信息生成单元,包括:
进程字段选取模块,用于选取至少一段所述客户操作系统当前进程的进程字段;
信息处理模块,用于编写并计算所述进程字段选取模块选取的所述至少一段所述客户操作系统当前进程的进程字段的偏移信息宏,并将所述进程字段选取模块选取的所述至少一段所述客户操作系统当前进程的进程字段的偏移信息宏添加到操作系统内核源代码文件中;
偏移信息获取模块,用于对所述信息处理模块生成的所述操作系统内核源代码文件进行编译,获取所述客户操作系统当前进程控制块字段偏移知识信息。
9.根据权利要求8所述的装置,其特征在于,所述基地址计算单元,包括:
第二信息获取模块,用于在所述信息生成单元生成的所述当前的寄存器现场信息中获取ESP栈指针寄存器的值;
基地址获取模块,用于采用所述第二信息获取模块获取的所述ESP栈指针寄存器的值计算当前客户操作系统当前进程基地址;
所述基地址获取模块,还用于根据所述基地址获取模块获取的所述客户操作系统当前进程基地址获取所述客户操作系统当前进程控制块基地址。
10.根据权利要求9所述的装置,其特征在于,所述进程信息读取单元,包括:
地址获取模块,用于根据所述基地址计算单元获取的所述客户操作系统当前进程控制块基地址和所述信息生成单元生成的所述客户操作系统当前进程控制块字段偏移知识信息,生成客户操作系统当前进程虚拟地址;
所述地址获取模块,还用于采用所述地址获取模块获取的所述客户操作系统当前进程虚拟地址计算客户操作系统当前进程逻辑物理地址;
进程信息读取模块,用于通过进程信息获取函数从所述地址获取模块获取的所述客户操作系统当前进程逻辑物理地址中读取客户操作系统当前进程信息。
CN201310062081.3A 2013-02-27 2013-02-27 一种操作系统进程识别跟踪及信息获取的方法和装置 Expired - Fee Related CN104007956B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201310062081.3A CN104007956B (zh) 2013-02-27 2013-02-27 一种操作系统进程识别跟踪及信息获取的方法和装置
PCT/CN2014/070497 WO2014131319A1 (zh) 2013-02-27 2014-01-13 一种操作系统进程识别跟踪及信息获取的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310062081.3A CN104007956B (zh) 2013-02-27 2013-02-27 一种操作系统进程识别跟踪及信息获取的方法和装置

Publications (2)

Publication Number Publication Date
CN104007956A true CN104007956A (zh) 2014-08-27
CN104007956B CN104007956B (zh) 2017-08-04

Family

ID=51368625

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310062081.3A Expired - Fee Related CN104007956B (zh) 2013-02-27 2013-02-27 一种操作系统进程识别跟踪及信息获取的方法和装置

Country Status (2)

Country Link
CN (1) CN104007956B (zh)
WO (1) WO2014131319A1 (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107247579A (zh) * 2016-08-19 2017-10-13 北京金山安全管理系统技术有限公司 一种elf文件映像基地址的计算方法及装置
CN109697358A (zh) * 2018-11-05 2019-04-30 国网浙江省电力有限公司 基于虚拟化的应用可信保障方法
CN110597557A (zh) * 2019-09-12 2019-12-20 腾讯科技(深圳)有限公司 一种系统信息获取方法、终端及介质
CN113260977A (zh) * 2018-12-30 2021-08-13 微软技术许可有限责任公司 用于将软件代码更改自动并入到适当通道的机制

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101334751A (zh) * 2007-06-29 2008-12-31 联想(北京)有限公司 虚拟机监视器识别客户操作系统中进程的方法及装置
US20090254572A1 (en) * 2007-01-05 2009-10-08 Redlich Ron M Digital information infrastructure and method
CN102736969A (zh) * 2012-05-22 2012-10-17 中国科学院计算技术研究所 一种针对硬件虚拟化的内存监控方法和系统

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101499016B (zh) * 2008-01-31 2011-09-21 联想(北京)有限公司 虚拟机监视器、虚拟机系统及客户操作系统进程处理方法
CN101876918B (zh) * 2009-11-27 2013-02-13 北京航空航天大学 虚拟机客户操作系统同步任务感知方法
CN101727323B (zh) * 2009-12-04 2012-08-01 山东省计算中心 Vista操作系统下网络信息的获取方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090254572A1 (en) * 2007-01-05 2009-10-08 Redlich Ron M Digital information infrastructure and method
CN101334751A (zh) * 2007-06-29 2008-12-31 联想(北京)有限公司 虚拟机监视器识别客户操作系统中进程的方法及装置
CN102736969A (zh) * 2012-05-22 2012-10-17 中国科学院计算技术研究所 一种针对硬件虚拟化的内存监控方法和系统

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107247579A (zh) * 2016-08-19 2017-10-13 北京金山安全管理系统技术有限公司 一种elf文件映像基地址的计算方法及装置
CN107247579B (zh) * 2016-08-19 2020-09-11 北京金山安全管理系统技术有限公司 一种elf文件映像基地址的计算方法及装置
CN109697358A (zh) * 2018-11-05 2019-04-30 国网浙江省电力有限公司 基于虚拟化的应用可信保障方法
CN113260977A (zh) * 2018-12-30 2021-08-13 微软技术许可有限责任公司 用于将软件代码更改自动并入到适当通道的机制
CN110597557A (zh) * 2019-09-12 2019-12-20 腾讯科技(深圳)有限公司 一种系统信息获取方法、终端及介质
CN110597557B (zh) * 2019-09-12 2024-06-07 腾讯科技(深圳)有限公司 一种系统信息获取方法、终端及介质

Also Published As

Publication number Publication date
WO2014131319A1 (zh) 2014-09-04
CN104007956B (zh) 2017-08-04

Similar Documents

Publication Publication Date Title
EP2726977B1 (en) Virtual machine image analysis
KR101574403B1 (ko) 결합된 가상 그래픽 장치
US7506121B2 (en) Method and apparatus for a guest to access a memory mapped device
CN107807839B (zh) 一种修改虚拟机内存数据的方法、装置及电子设备
JP7212793B2 (ja) 関数ジャンプを実現するための方法、装置及びコンピュータ記憶媒体
US9158562B2 (en) Method and apparatus for supporting virtualization of loadable module
US8887139B2 (en) Virtual system and method of analyzing operation of virtual system
CN115269057B (zh) 基于设备树的隔离系统生成配置文件的方法
US11693722B2 (en) Fast memory mapped IO support by register switch
US9990216B2 (en) Providing hypercall interface for virtual machines
US10268595B1 (en) Emulating page modification logging for a nested hypervisor
US11061695B2 (en) Unikernel provisioning
CN104007956A (zh) 一种操作系统进程识别跟踪及信息获取的方法和装置
CN106033370A (zh) 64位Java虚拟机的实现方法及装置
US9779050B2 (en) Allocating virtual resources to root PCI bus
Yamamoto et al. Unified performance profiling of an entire virtualized environment
US9727356B2 (en) Scaling past the java virtual machine thread limit
CN113778838B (zh) 二进制程序动态污点分析方法及装置
Johnson et al. Composable multi-level debugging with Stackdb
CN109857522B (zh) 一种面向kvm的虚拟化层故障注入方法
CN103744851A (zh) 一种虚拟化环境中的进程信息监控系统及其方法
Rigo et al. Atomic Instruction Translation Towards A Multi-Threaded QEMU.
CN106293873B (zh) 一种准确获取虚拟机控制块(vmcs)中关键数据位置的方法
Teabe et al. (no) compromis: Paging virtualization is not a fatality
CN110795231A (zh) 一种虚拟cpu的处理方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20170804

Termination date: 20200227