1、视频提供:昆山滴水信息技术有限公司官网地址:论坛地址:QQ交流 :49759272,本节内容进程结构体EPROCESS,内容回顾从这一节课开始学习进程、线程相关的知识。进程线程的知识点很多,如果我们想了解问题的本质,就要从一些关键的结构体学起,这节课的内容是介绍一个与进程密切相关的结构体:EPROCESS,1、进程结构体EPROCESS 每个windows进程在0环都有一个对应的结构体:EPROCESS 这个结构体包含了进程所有重要的信息。 (在winbbg中查看EPROCESS结构体),2、KPROCESS主要成员介绍1)+0x000 Header : _DISPATCHER_HEADER
2、“可等待”对象,比如Mutex互斥体、Event事件等(WaitForSingleObject)2)+0x018 DirectoryTableBase : 2 Uint4B 页目录表的基址3)+0x020 LdtDescriptor : _KGDTENTRY +0x028 Int21Descriptor : _KIDTENTRY 历史遗留,16位Windows 段选择子不够 每个进程都有一个LDT表 Int21Descriptor 是 DOS下要用的,3、KPROCESS主要成员介绍4)+0x038 KernelTime : Uint4B+0x03c UserTime : Uint4B统计信息
3、 记录了一个进程在内核模式/用户模式下所花的时间5) +0x05c Affinity : Uint4B规定进程里面的所有线程能在哪个CPU上跑,如果值为1,那这个进程的所以线程只能在0号CPU上跑(00000001)如果值为3,那这个进程的所以线程能在0、1号CPU上跑(000000011)如果值为4,那这个进程的所以线程能在2号CPU上跑(000000100)如果值为5,那这个进程的所以线程能在0,2号CPU上跑(000000101)4个字节共32位 所以最多32核 Windows64位 就64核如果只有一个CPU 把这个设置为4 那么这个进程就死了6) +0x062 BasePriorit
4、y : Char基础优先级或最低优先级 该进程中的所有线程最起码的优先级.,4、EPROCESS其他成员1)+0x070 CreateTime : _LARGE_INTEGER+0x078 ExitTime : _LARGE_INTEGER进程的创建/退出时间2)+0x084 UniqueProcessId : Ptr32 Void进程的编号 任务管理器中的PID3)+0x088 ActiveProcessLinks : _LIST_ENTRY双向链表 所有的活动进程都连接在一起,构成了一个链表PsActiveProcessHead指向全局链表头,4、EPROCESS其他成员,5、EPROCE
5、SS其他成员4)+0x090 QuotaUsage : 3 Uint4B+0x09c QuotaPeak : 3 Uint4B物理页相关的统计信息5)+0x0a8 CommitCharge : Uint4B +0x0ac PeakVirtualSize : Uint4B +0x0b0 VirtualSize : Uint4B虚拟内存相关的统计信息6)+0x11c VadRoot : Ptr32 Void标识0-2G哪些地址没占用了,6、EPROCESS其他成员7)+0x0bc DebugPort : Ptr32 Void+0x0c0 ExceptionPort : Ptr32 Void 调试相
6、关8)+0x0c4 ObjectTable : Ptr32 _HANDLE_TABLE句柄表9)+0x174 ImageFileName : 16 UChar进程镜像文件名 最多16个字节10)+0x1a0 ActiveThreads : Uint4B活动线程的数量,7、EPROCESS其他成员11)+0x1b0 Peb : Ptr32 _PEBPEB(Process Environment Block 进程环境块):进程在3环的一个结构体,里面包含了进程的模块列表、是否处于调试状态等信息。关于PEB或者其他成员更加详细的说明:参考 潘爱民老师Windows内核原理与实现 中的第3章,4、课后练习:VIP会员可见,