- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第三章进程管理实验3.1实验概述进程管理实验包括进程创建和进程
第三章 进程管理实验
3.1 实验概述
进程管理实验包括进程创建和进程终止两部分。进程创建实验分析了进程创建过程和Windows API中CreateProcess函数对内核函数的调用过程。进程终止实验分析了进程终止过程,并修改内核代码,调整系统进程终止行为。
3.2进程创建
3.2.1 进程创建分析
进程创建过程中需要完成一些内核数据结构初始化,包括EPROCESS,PCB和PEB等。
每一个Windows进程都有一个执行体进程块(EPROCESS),执行体进程块描述进程的基本信息,并指向其他与进程控制相关的数据结构。如图3-1为EPROCESS的结构图:
图 3-1 EPROCESS的结构
内核进程块的核心进程块(Kernel Process Block 或者叫PCB)和进程环境块(PEB)也包含很多用于线程调度的相关信息,它们的结构如图 3-2 和图 3-3所示:
图 3-2 核心进程块(PCB)的结构
Kernel Time是内核时间;User Time是用户时间;Process State是进程状态;Process Page Directory是进程页目录;Process Base Priority是进程的基本优先级。
图 3-3 进程环境块(PEB)的结构
Image Base Address是映像基地址;Module List是模块列表;Thread-Local Storage Data是线程局部存储区数据;Code Page Data是代码页数据;Image Version Information是映像版本信息。
Windows环境进程的创建包括以下几个步骤:
打开EXE文件,创建局部的段对象;
创建Windows执行体进程对象;
创建和初始化主线程(包括栈、上下文、执行体线程块对象的创建);
通知Windows子系统新的进程已经创建,系统为新的进程运行设置环境;
开始执行初始线程(如果在创建进程的时候使用了CREATE_SUSPENDED标志,那么就挂起主线程);
在新的进程和线程的上下文中,完成地址空间的初始化(如动态链接库的加载等)和开始执行程序。
如图 3-4所示为进程创建过程图。
图 3-4进程创建过程图
3.2.2 关键代码分析
3.2.2.1 Stage2: 创建进程内核对象NtCreateProcessNtCreateProcessExPspCreateProcess创建进程内核对象设置EPROCESSLine 1108 ps\create.c
//创建EPROCESSStatus = ObCreateObject (PreviousMode,
PsProcessType,
ObjectAttributes,
PreviousMode,
NULL,
sizeof (EPROCESS),
0,
0,
Process);
if (!NT_SUCCESS (Status)) {
goto exit_and_deref_parent;
}
//把EPROCESS结构初始化为0。
// 初始化进程锁。
// 初始化进程的线程列表。
//
RtlZeroMemory (Process, sizeof(EPROCESS));
ExInitializeRundownProtection (Process-RundownProtect);
PspInitializeProcessLock (Process);
InitializeListHead (Process-ThreadListHead);
(2)创建进程地址空间进程的地址空间分为4种Boot Process :进程地址空间在内存初始化时被分配。Parent is not specified;
System Process:系统地址空间User Process (Cloned Address Space): 从指定的进程复制的User Process (New Image Address Space): 新的Line 1366 ps\create.c
//用户进程 (新的地址空间).
Status = MmInitializeProcessAddressSpace (Process,
文档评论(0)