Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
METHODS AND APPARATUSES FOR IDENTIFYING AND TRACKING PROCESS OF OPERATING SYSTEM, AND FOR OBTAINING INFORMATION
Document Type and Number:
WIPO Patent Application WO/2014/131319
Kind Code:
A1
Abstract:
Embodiments of the present invention provide methods and apparatuses for identifying and tracking a process of an operating system, and for obtaining information, and relate to the technical field of software, which can effectively obtain information about a current process of the operating system of a user in a virtual environment. The method comprises: identifying a current process of an operating system of a user, and obtaining onsite information about a current register; generating control block field offset knowledge information about the current process of the operating system of the user; calculating a base address of a control block of the current process of the operating system of the user by using the onsite information about the current register; and reading, by using a process information obtaining function, the information about the current process of the operating system of the user according to the base address of the control block of the current process of the operating system of the user and the control block field offset knowledge information about the current process of the operating system of the user. The present invention is applied in obtaining information about a current process of an operating system of a user in a virtual environment.

Inventors:
XIONG HAIQUAN (CN)
TANG ZHIMIN (CN)
ZHANG ZHIMIN (CN)
FAN DONGRUI (CN)
Application Number:
PCT/CN2014/070497
Publication Date:
September 04, 2014
Filing Date:
January 13, 2014
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
HUAWEI TECH CO LTD (CN)
International Classes:
G06F12/06
Foreign References:
CN101499016A2009-08-05
CN101876918A2010-11-03
CN101727323A2010-06-09
Download PDF:
Claims:
权 利 要 求

1、 一种操作系统进程识别跟踪及信息获取的方法, 其特征在于, 包括:

识别客户操作系统当前进程, 获取当前的寄存器现场信息; 生成客户操作系统当前进程控制块字段偏移知识信息;

通过所述当前的寄存器现场信息计算客户操作系统当前进程控制 块基地址;

根据所述客户操作系统当前进程控制块基地址和所述客户操作系 统当前进程控制块字段偏移知识信息, 利用进程信息获取函数读取客 户操作系统当前进程信息。

2、 根据权利要求 1所述的方法, 其特征在于, 所述识别客户操作 系统当前进程获取当前的寄存器现场信息, 包括:

当监测到客户操作系统发生进程切换敏感特权操作时, 识别所述 客户操作系统当前进程;

定位存储有所述客户操作系统当前进程的特定系统寄存器的代码 改写位置;

在所述特定系统寄存器的代码改写位置上获取所述特定系统寄存 器的改写代码;

在所述特定系统寄存器的改写代码中获取所述当前的寄存器现场 信息。

3、 根据权利要求 1或 2所述的方法, 其特征在于, 所述生成客户 操作系统当前进程控制块字段偏移知识信息, 包括:

选取至少一段所述客户操作系统当前进程的进程字段;

编写并计算所述至少一段所述客户操作系统当前进程的进程字段 的偏移信息宏, 并将所述至少一段所述客户操作系统当前进程的进程 字段的偏移信息宏添加到操作系统内核源代码文件中;

对所述操作系统内核源代码文件进行编译, 获取所述客户操作系 统当前进程控制块字段偏移知识信息。 4、 根据权利要求 3所述的方法, 其特征在于, 所述通过所述当前 的寄存器现场信息计算客户操作系统当前进程控制块基地址, 包括: 在所述当前的寄存器现场信息中获取 ESP栈指针寄存器的值; 采用所述 ESP栈指针寄存器的值计算客户操作系统当前进程基地 址;

根据所述客户操作系统当前进程基地址获取所述客户操作系统当 前进程控制块基地址。

5、 根据权利要求 4所述的方法, 其特征在于, 所述根据所述客户 操作系统当前进程控制块基地址和所述客户操作系统当前进程控制块 字段偏移知识信息, 利用进程信息获取函数读取当前客户操作系统当 前进程信息, 包括:

根据所述客户操作系统当前进程控制块基地址和所述客户操作系 统当前进程控制块字段偏移知识信息, 生成客户操作系统当前进程虚 拟地址;

采用所述客户操作系统当前进程虚拟地址计算客户操作系统当前 进程逻辑物理地址;

通过进程信息获取函数从所述客户操作系统当前进程逻辑物理地 址中读取客户操作系统当前进程信息。

6、 一种操作系统进程识别跟踪及信息获取装置, 其特征在于, 包 括:

进程识别单元, 用于识别客户操作系统当前进程, 获取当前的寄 存器现场信息;

信息生成单元, 用于生成客户操作系统当前进程控制块字段偏移 知识信息;

基地址计算单元, 用于通过所述信息生成单元生成的所述当前的 寄存器现场信息计算当前客户操作系统当前进程控制块基地址;

进程信息读取单元, 用于根据所述基地址计算单元计算的所述客 户操作系统当前进程控制块基地址和所述信息生成单元生成的所述客 户操作系统当前进程控制块字段偏移知识信息, 利用进程信息获取函 数读取客户操作系统当前进程信息。

7、 根据权利要求 6所述的装置, 其特征在于, 所述进程识别单元, 包括:

进程识别模块, 用于当监测到客户操作系统发生进程切换敏感特 权操作时, 识别所述客户操作系统当前进程;

位置定位模块, 用于定位存储有所述进程识别模块识别的所述客 户操作系统当前进程的特定系统寄存器的代码改写位置;

第一信息获取模块, 用于在所述位置定位模块定位的所述特定系 统寄存器的代码改写位置上获取所述特定系统寄存器的改写代码;

所述第一信息获取模块, 还用于在所述第一信息获取模块获取的 所述特定系统寄存器的改写代码中获取所述当前的寄存器现场信息。

8、 根据权利要求 6或 7所述的装置, 其特征在于, 所述信息生成 单元, 包括:

进程字段选取模块, 用于选取至少一段所述客户操作系统当前进 程的进程字段;

信息处理模块, 用于编写并计算所述进程字段选取模块选取的所 述至少一段所述客户操作系统当前进程的进程字段的偏移信息宏, 并 将所述进程字段选取模块选取的所述至少一段所述客户操作系统当前 进程的进程字段的偏移信息宏添加到操作系统内核源代码文件中;

偏移信息获取模块, 用于对所述信息处理模块生成的所述操作系 统内核源代码文件进行编译, 获取所述客户操作系统当前进程控制块 字段偏移知识信息。

9、 根据权利要求 8所述的装置, 其特征在于, 所述基地址计算单 元, 包括:

第二信息获取模块, 用于在所述信息生成单元生成的所述当前的 寄存器现场信息中获取 ESP栈指针寄存器的值;

基地址获取模块,用于采用所述第二信息获取模块获取的所述 ESP 栈指针寄存器的值计算当前客户操作系统当前进程基地址;

所述基地址获取模块, 还用于根据所述基地址获取模块获取的所 述客户操作系统当前进程基地址获取所述客户操作系统当前进程控制 块基地址。

10、 根据权利要求 9 所述的装置, 其特征在于, 所述进程信息读 取单元, 包括:

地址获取模块, 用于根据所述基地址计算单元获取的所述客户操 作系统当前进程控制块基地址和所述信息生成单元生成的所述客户操 作系统当前进程控制块字段偏移知识信息, 生成客户操作系统当前进 程虚拟地址;

所述地址获取模块, 还用于采用所述地址获取模块获取的所述客 户操作系统当前进程虚拟地址计算客户操作系统当前进程逻辑物理地 址;

进程信息读取模块, 用于通过进程信息获取函数从所述地址获取 模块获取的所述客户操作系统当前进程逻辑物理地址中读取客户操作 系统当前进程信息。

Description:
一种操作系统进程识别跟踪及信息获取的方法 和装置 本申请要求于 2013 年 02 月 27 日提交中国专利局、 申请号为 201310062081.3、 发明名称为 "一种操作系统进程识别跟踪及信息获取的方 和装置"的中国专利申请的优先权, 其全部内容通过引用结合在本申请中。

技术领域

本发明涉及软件技术领域, 尤其涉及一种操作系统进程识别跟踪 及信息获取的方法和装置。

背景技术

现今, 基于虚拟化技术实现的多个高效虚拟机计算环 境技术特征, 使其在服务器资源整合、 系统软件开发与调试、 系统容错、 系统安全、 绿色计算、 负载均衡等众多领域得到了广泛的应用。 为了能使其可以 应用的更加广泛, 还需要解决虚拟化技术中的许多问题。 而语义鸿沟 就是其中最重要的问题之一, 所谓语义鸿沟是指当前主流虚拟化技术 中 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、操作系统进程识别跟踪及信息获取装置 取至少一段客户操 作系统当前进程的进程字段。

具体的, 这里选取的至少一段当前进程的进程字段是根 据实际需 要所选取的, 这里可以将上述的字段标记为 si , s2 , ... ... 。

102b , 操作系统进程识别跟踪及信息获取装置编写并 计算至少一 段客户操作系统当前进程的进程字段的偏移信 息宏, 并将至少一段客 户操作系统当前进程的进程字段的偏移信息宏 添加到操作系统内核源 代码文件中。

其中, 在计算至少一段当前进程的进程字段的偏移信 息宏之前, 首先根据实际系统找到对应的构架分支目录, 其中典型目录格式为 arch/X/kernel/asm-offsetsY.c ,其中 X代表 CPU( Central Processing Unit, 中央处理器) 的结构类型, Y则代表同一架构下不同位宽, 如 32位或 64位。 其次, 在其中定位到一个名称为 void foo(void)的函数, 并在其 末尾添加所需的进程字段的偏移信息宏, 具体格式为:

BLANK0

0FFSET(GPS 1 , task— struct, si)

OFFSET(GPS2 , task— struct, s2)

102c、操作系统进程识别跟踪及信息获取装 对操作系统内核源代 码文件进行编译, 获取客户操作系统当前进程控制块字段偏移知 识信 息。

此外, 由于客户操作系统当前进程控制块字段偏移知 识信息只有 应用在当前的寄存器现场信息中, 才能够获取客户操作系统当前进程 中所需要的信息, 进而利用进程信息获取函数读取客户操作系统 当前 进程信息。

103、 操作系统进程识别跟踪及信息获取装置通过当 前的寄存器现 场信息计算客户操作系统当前进程控制块基地 址。

进一步可选的, 如图 2所示, 步骤 103具体包括如下步骤: 103a、操作系统进程识别跟踪及信息获取装置 当前的寄存器现场 信息中获取 ESP栈指针寄存器的值。

103b , 操作系统进程识别跟踪及信息获取装置采用 ESP栈指针寄 存器的值计算客户操作系统当前进程基地址。

103c、操作系统进程识别跟踪及信息获取装置 据客户操作系统当 前进程基地址获取客户操作系统当前进程控制 块基地址。

具体的, 若这里以 Linux操作系统为例, 在 Linux 2.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- l) )

在获得了 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进程, 获取当前的 寄存器现场信息。

al、 基于 VMM对特权敏感指令会产生陷入的特点, 据此在 KVM 中定位到 CR3控制寄存器改写代码地方。

a2、 从上一步找到了 CR3 控制寄存器改写的代码位于 vmx.c 的 handle— cr, 定位到 CR3 控制寄存器相关的部分, 此时可以获得 Linux 当前的寄存器现场信息。

( 2 ) 生成 Linux进程控制块字段偏移知识信息

al、 在 Linux内核源代码文件 ( arch/x86/kernel/asm-offsets_32.c ) 中加入进程字段的偏移信息宏。 其中, 本进程只关注进程 id和进程名两个字段的字段信息, 而这 两个字段信息具体的获取过程如下: 首先定位到函数 void foo (void)的 末尾处, 此位置用于添加计算系统进程控制块字段偏移 知识信息, 并 在该位置加入需要的进程字段偏移信息来计算 进程字段的偏移信息 宏, 其中 GPPID , GPCOMM代表的是进程 id和进程名字段的进程字 段的偏移信息宏(用这两个宏名字作为传递给 V M M的字段偏移知识信 息) , task— struct代表 Linux进程控制块数据结构名, 而 pid, comm则 代表 Linux进程控制块结构体中进程 id和进程名字段, 具体的实现代 码如下:

void foo(void) {

BLANKO

OFFSET(GPPID,task_struct,pid)

OFFSET(GPCOMM,task_struct,comm)

·.. ·.. }

a2、对经过上步处理过的 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和 进程名的信息时就需要用到这个偏移值。

a3、将操作 Linux控制块字段偏移知识信息应用到当前的寄 器现 场信息中。

其中,为了在当前的寄存器现场信息中加入 Linux控制块字段偏移 知识信息, 需要将前面生成的头文件 asm-offsets— 32. h增力。到 vmx.c文 件中。

( 3 ) 计算当前 Linux进程控制块基地址

al、 获取 Linux中 ESP栈指针寄存器的值。

识别到 Linux当前进程后,在 VMM中就可以获得当前 Linux操作 系统的寄存器现场信息,其中对于获取 Linux进程信息最为关键的就是 ESP栈指针寄存器的值, 且其具体获取方法如下:

通过 kvm— register— read获取 ESP栈指针寄存器的值, 如下所示: esp_addr = kvm— register— read(vcpu, VCPU REGS RSP)

a2、 计算当前 Linux进程 thread— info基地址。

在 Linux 2.6以后的版本中, Linux进程的内核堆栈是与 Linux进 程的 thread— info结构体共享的, 其中, 在 thread— info结构体的第一个 字段, 就是执行 Linux进程控制块的指针, 因此, 为了获得 Linux进程 控制块的基地址, 首先需要获得 thread— info的基地址, 具体方法如下: 由于系统可能是 64位或 32位, 因此配置的内核堆栈的大小也不 尽不同, 例如, 有的内核堆栈配置为 8KB , 也可能配置为 4KB , 则当 内核堆栈大小为 8KB时, 将 ESP值的低 13位设置为 0 , 当内核堆栈大 小为 4KB 时, 将低位的 12 为设置为 0 , 实际的代码如下, 其中, gpdvaddr_ 代表当前进程 thread— info的基地址。

#ifdef STACKSIZE8KB

gpdvaddr_p = OxFFFFEOOO&esp addr;

#else

gpdvaddr_p = OxFFFFFOOO&esp addr;

#endif

a3、 获取当前 Linux进程控制块基地址。

在获得当前进程 thread info数据结构的基地址后,在 KVM中需要 将其转换之后才能用 kvm— read— guest读取信息, 这样读取的第一个字 段即是当前 Linux进程控制块基地址, 具体由下面两行实例代码完成, 其中, gpdaddr代表当前进程控制块基地址。

〃地址变换

gpdpaddr_p= vcpu->arch.mmu.gva_to_gpa(vcpu, gpdvaddr_p,

0,NULL);

〃当前 Linux进程控制块基地址的读取

kvm_read_guest(vcpu->kvm,(gpa_t)(gpdpaddr_p),(void

*)&gpdaddr,sizeof(gpa— t));

( 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, 1 6);

经过以上代码的处理,在 gppid和 gpcomm中分别得到关于当前进 程的进程 pid和进程名信息。

具体实施例二: 具体的, 这里以 Linux操作系统为例, 且基于 Xen (—个开源的虚 拟机监视器 )的 HVM ( Hardware Virtual Machin, 硬件虚拟机 )完全虚 拟化环境, 获取基于 Linux的 Guest OS 系统中进程的进程 ID和进程 comm两个基本信息来说明此方法, 从原理上来看, Xen的 HVM完全 虚拟化方式与 KVM基本一致,因此此类情形的处理跟 KVM差异不大, 主要区别在于关键函数的名称有差异, 具体描述如下: ( 1 ) Linux进程识别跟踪装置识别当前 Linux进程, 获取当前的 寄存器现场信息。

bl、 基于 VMM对特权敏感指令会产生陷入的特点, 据此在 Xen 中定位到 CR3寄存器改写代码地方。

b2、 从上一步找到 了 CR3 控制寄存器改写的代码位于 arch/x 86/h vm/vmx/ vmx . c ό vmx—vmexit— handler, 通过检查只另 ll , 从而 定位到 CR3 控制寄存器相关的部分, 也即 vmx— cr— access , 最终到达 move— to— cr3 (即 CR3 控制寄存器的改写代码位置) , 此处可以作为 VMM获取 Linux进程信息的地方。

( 2 ) 生成 Linux进程控制块字段偏移知识信息

bl、 在 Linux内核源代码文件 ( arch/x86/kernel/asm-offsets_32.c ) 中加入进程字段的偏移信息宏。

其中, 本进程只关注进程 id和进程名两个字段的字段信息, 而这 两个字段信息具体的获取过程如下: 首先定位到函数 void foo (void)的 末尾处, 此位置用于添加计算系统进程控制块字段偏移 知识信息, 并 在该位置加入需要的进程字段偏移信息来计算 进程字段的偏移信息 宏, 其中 GPPID , GPCOMM代表的是进程 id和进程名字段的进程字 段的偏移信息宏(用这两个宏名字作为传递给 V M M的字段偏移知识信 息) , task— struct代表 Linux进程控制块数据结构名, 而 pid, comm则 代表 Linux进程控制块结构体中进程 id和进程名字段, 具体的实现代 码如下:

void foo(void) {

BLANKO

OFFSET(GPPID,task_struct,pid)

OFFSET(GPCOMM,task_struct,comm)

·.. ·.. }

b2、对经过上步处理过的 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和 进程名的信息时就需要用到这个偏移值。

b3、将操作 Linux控制块字段偏移知识信息添加到当前的寄 器现 场信息中。

其中,为了在当前的寄存器现场信息中加入 Linux控制块字段偏移 知识信息, 需要将前面生成的头文件 asm-offsets— 32. h增加到 vmx.c文 件中。

( 3 ) 计算当前 Linux进程控制块基地址

b l、 获取 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基地址。

在 Linux 2.6以后的版本中, Linux进程的内核堆栈是与 Linux进 程的 thread— info结构体共享的, 其中, 在 thread— info结构体的第一个 字段, 就是执行 Linux进程控制块的指针, 因此, 为了获得 Linux进程 控制块的基地址, 首先需要获得 thread info的基地址, 具体方法如下: 由于系统可能是 64位或 32位, 因此配置的内核堆栈的大小也不 尽不同, 例如, 有的内核堆栈配置为 8KB , 也可能配置为 4KB , 则当 内核堆栈大小为 8KB时, 将 ESP值的低 13位设置为 0 , 当内核堆栈大 小为 4KB 时, 将低位的 12 为设置为 0 , 实际的代码如下, 其中, gpdvaddr_ 代表当前进程 thread— info的基地址。

#ifdef STACKSIZE8KB

gpdvaddr_p = OxFFFFEOOO&esp addr;

#else

gpdvaddr_p = OxFFFFFOOO&esp addr;

#endif

b3、 获取当前 Linux进程控制块基地址。

在获得当前进程 thread— info数据结构的基地址后,在 KVM中需要 将其转换之后才能用 hvmemul— read ( Xen 中已有的服务函数) 读取信 息, 这样读取的第一个字段即是当前 Linux进程控制块基地址的读取, 具体由下面两行实例代码完成,其中 gpdaddr代表当前进程控制块基地 址:

〃地址变换

g d addr_p= vcpu->arch.mmu.gva_to_gpa(vcpu, gpdvaddr_p , 0 , NULL);

〃/当前 Linux进程控制块基地址的读取

hvmemul_read(vcpu->kvm,(gpa_t)(gpdpaddr_p),(void

*)&gpdaddr,sizeof(gpa— t));

( 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控制寄存器的改写代码, 具体说明如下:

cl、 当支持半虚拟化的 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进程控制块字段偏移知识信息

cl、 在 Linux内核源代码文件 ( arch/x86/kernel/asm-offsets_32.c ) 中加入进程字段的偏移信息宏。

其中, 本进程只关注进程 id和进程名两个字段的字段信息, 而这 两个字段信息具体的获取过程如下: 首先定位到函数 void foo (void)的 末尾处, 此位置用于添加计算系统进程控制块字段偏移 知识信息, 并 在该位置加入需要的进程字段偏移信息来计算 进程字段的偏移信息 宏, 其中 GPPID , GPCOMM代表的是进程 id和进程名字段的进程字 段的偏移信息宏(用这两个宏名字作为传递给 V M M的字段偏移知识信 息) , task— struct代表 Linux进程控制块数据结构名, 而 pid, comm则 代表 Linux进程控制块结构体中进程 id和进程名字段, 具体的实现代 码如下:

void foo(void) {

BLANKO OFFSET(GPPID,task_struct,pid)

OFFSET(GPCOMM,task_struct,comm)

·.. ·.. }

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, 具体步骤描述如下:

cl、 获得 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 , 包括: 进程识别 模块 31 1、 位置定位模块 312和第一信息获取模块 313 , 其中:

进程识别模块 31 1 ,用于当监测到操作系统发生进程切换敏感特 操作时, 识别当前客户操作系统当前进程。

位置定位模块 312 ,用于定位存储有进程识别模块 31 1识别的客户 操作系统当前进程的特定系统寄存器的代码改 写位置。 第一信息获取模块 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 生成的当前的寄存 器现场信息中获取 E S P栈指针寄存器的值。 基地址获取模块, 用于采用第二信息获取模块获取的 ESP栈指针 寄存器的值计算客户操作系统当前进程基地址 。

基地址获取模块, 还用于根据基地址获取模块获取的客户操作系 统当前进程基地址获取客户操作系统当前进程 控制块基地址。

进一步可选的, 进程信息读取单元 424 , 包括: 地址获取模块和进 程信息读取模块, 其中:

地址获取模块, 用于根据基地址计算单元 423 获取的客户操作系 统当前进程控制块基地址和信息生成单元 422 生成的客户操作系统当 前进程控制块字段偏移知识信息, 生成客户操作系统当前进程虚拟地 址。

地址获取模块, 还用于采用地址获取模块获取的客户操作系统 当 前进程虚拟地址计算客户操作系统当前进程逻 辑物理地址。

进程信息读取模块, 用于通过进程信息获取函数从地址获取模块 341 获取的客户操作系统当前进程逻辑物理地址中 读取客户操作系统 当前进程信息。

本发明的实施例提供一种操作系统进程识别跟 踪及信息获取装 置, 通过识别客户操作系统当前进程, 获取寄存器现场信息, 并根据 由寄存器现场信息计算出的客户操作系统当前 进程控制块基地址和客 户操作系统当前进程控制块字段偏移知识信息 , 再利用进程信息获取 函数, 能够在虚拟环境下有效地获取客户操作系统当 前进程信息。

本领域普通技术人员可以理解: 实现上述方法实施例的全部或部 分步骤可以通过程序指令相关的硬件来完成, 前述的程序可以存储于 一计算机可读取存储介质中, 该程序在执行时, 执行包括上述方法实 施例的步骤; 而前述的存储介质包括: ROM、 RAM, 磁碟或者光盘等 各种可以存储程序代码的介质。

以上所述, 仅为本发明的具体实施方式, 但本发明的保护范围并不 局限于此, 任何熟悉本技术领域的技术人员在本发明揭露 的技术范围内, 可轻易想到变化或替换, 都应涵盖在本发明的保护范围之内。 因此, 本 发明的保护范围应以所述权利要求的保护范围 为准。