1、进程结构体EPROCESS
每个windows进程在0环都有一个对应的结构体:EPROCESS 这个结构体包含了进程所有重要的信息。
kd> dt _EPROCESS
+0x000 Pcb : _KPROCESS
+0x078 ProcessLock : _EX_PUSH_LOCK
+0x080 CreateTime : _LARGE_INTEGER
+0x088 ExitTime : _LARGE_INTEGER
+0x090 RundownProtect : _EX_RUNDOWN_REF
+0x094 UniqueProcessId : Ptr32 Void
+0x098 ActiveProcessLinks : _LIST_ENTRY
+0x0a0 QuotaUsage : [3] Uint4B
+0x0ac QuotaPeak : [3] Uint4B
+0x0b8 CommitCharge : Uint4B
+0x0bc PeakVirtualSize : Uint4B
+0x0c0 VirtualSize : Uint4B
+0x0c4 SessionProcessLinks : _LIST_ENTRY
+0x0cc DebugPort : Ptr32 Void
+0x0d0 ExceptionPort : Ptr32 Void
+0x0d4 ObjectTable : Ptr32 _HANDLE_TABLE
+0x0d8 Token : _EX_FAST_REF
+0x0dc WorkingSetPage : Uint4B
+0x0e0 AddressCreationLock : _KGUARDED_MUTEX
+0x100 HyperSpaceLock : Uint4B
+0x104 ForkInProgress : Ptr32 _ETHREAD
+0x108 HardwareTrigger : Uint4B
+0x10c PhysicalVadRoot : Ptr32 _MM_AVL_TABLE
+0x110 CloneRoot : Ptr32 Void
+0x114 NumberOfPrivatePages : Uint4B
+0x118 NumberOfLockedPages : Uint4B
+0x11c Win32Process : Ptr32 Void
+0x120 Job : Ptr32 _EJOB
+0x124 SectionObject : Ptr32 Void
+0x128 SectionBaseAddress : Ptr32 Void
+0x12c QuotaBlock : Ptr32 _EPROCESS_QUOTA_BLOCK
+0x130 WorkingSetWatch : Ptr32 _PAGEFAULT_HISTORY
+0x134 Win32WindowStation : Ptr32 Void
+0x138 InheritedFromUniqueProcessId : Ptr32 Void
+0x13c LdtInformation : Ptr32 Void
+0x140 VadFreeHint : Ptr32 Void
+0x144 VdmObjects : Ptr32 Void
+0x148 DeviceMap : Ptr32 Void
+0x14c Spare0 : [3] Ptr32 Void
+0x158 PageDirectoryPte : _HARDWARE_PTE_X86
+0x158 Filler : Uint8B
+0x160 Session : Ptr32 Void
+0x164 ImageFileName : [16] UChar
+0x174 JobLinks : _LIST_ENTRY
+0x17c LockedPagesList : Ptr32 Void
+0x180 ThreadListHead : _LIST_ENTRY
+0x188 SecurityPort : Ptr32 Void
+0x18c PaeTop : Ptr32 Void
+0x190 ActiveThreads : Uint4B
+0x194 GrantedAccess : Uint4B
+0x198 DefaultHardErrorProcessing : Uint4B
+0x19c LastThreadExitStatus : Int4B
+0x1a0 Peb : Ptr32 _PEB
+0x1a4 PrefetchTrace : _EX_FAST_REF
+0x1a8 ReadOperationCount : _LARGE_INTEGER
+0x1b0 WriteOperationCount : _LARGE_INTEGER
+0x1b8 OtherOperationCount : _LARGE_INTEGER
+0x1c0 ReadTransferCount : _LARGE_INTEGER
+0x1c8 WriteTransferCount : _LARGE_INTEGER
+0x1d0 OtherTransferCount : _LARGE_INTEGER
+0x1d8 CommitChargeLimit : Uint4B
+0x1dc CommitChargePeak : Uint4B
+0x1e0 AweInfo : Ptr32 Void
+0x1e4 SeAuditProcessCreationInfo : _SE_AUDIT_PROCESS_CREATION_INFO
+0x1e8 Vm : _MMSUPPORT
+0x230 MmProcessLinks : _LIST_ENTRY
+0x238 ModifiedPageCount : Uint4B
+0x23c JobStatus : Uint4B
+0x240 Flags : Uint4B
+0x240 CreateReported : Pos 0, 1 Bit
+0x240 NoDebugInherit : Pos 1, 1 Bit
+0x240 ProcessExiting : Pos 2, 1 Bit
+0x240 ProcessDelete : Pos 3, 1 Bit
+0x240 Wow64SplitPages : Pos 4, 1 Bit
+0x240 VmDeleted : Pos 5, 1 Bit
+0x240 OutswapEnabled : Pos 6, 1 Bit
+0x240 Outswapped : Pos 7, 1 Bit
+0x240 ForkFailed : Pos 8, 1 Bit
+0x240 Wow64VaSpace4Gb : Pos 9, 1 Bit
+0x240 AddressSpaceInitialized : Pos 10, 2 Bits
+0x240 SetTimerResolution : Pos 12, 1 Bit
+0x240 BreakOnTermination : Pos 13, 1 Bit
+0x240 SessionCreationUnderway : Pos 14, 1 Bit
+0x240 WriteWatch : Pos 15, 1 Bit
+0x240 ProcessInSession : Pos 16, 1 Bit
+0x240 OverrideAddressSpace : Pos 17, 1 Bit
+0x240 HasAddressSpace : Pos 18, 1 Bit
+0x240 LaunchPrefetched : Pos 19, 1 Bit
+0x240 InjectInpageErrors : Pos 20, 1 Bit
+0x240 VmTopDown : Pos 21, 1 Bit
+0x240 ImageNotifyDone : Pos 22, 1 Bit
+0x240 PdeUpdateNeeded : Pos 23, 1 Bit
+0x240 VdmAllowed : Pos 24, 1 Bit
+0x240 SmapAllowed : Pos 25, 1 Bit
+0x240 CreateFailed : Pos 26, 1 Bit
+0x240 DefaultIoPriority : Pos 27, 3 Bits
+0x240 Spare1 : Pos 30, 1 Bit
+0x240 Spare2 : Pos 31, 1 Bit
+0x244 ExitStatus : Int4B
+0x248 NextPageColor : Uint2B
+0x24a SubSystemMinorVersion : UChar
+0x24b SubSystemMajorVersion : UChar
+0x24a SubSystemVersion : Uint2B
+0x24c PriorityClass : UChar
+0x250 VadRoot : _MM_AVL_TABLE
+0x270 Cookie : Uint4B
2、EPROCESS的KPROCESS主要成员介绍
1) +0x000 Header : _DISPATCHER_HEADER
“可等待”对象,比如Mutex互斥体、Event事件等(WaitForSingleObject)
2) +0x018 DirectoryTableBase : [2] Uint4B
页目录表的基址
3) +0x020 LdtDescriptor : _KGDTENTRY
+0x028 Int21Descriptor : _KIDTENTRY
历史遗留,16位Windows 段选择子不够 每个进程都有一个LDT表
Int21Descriptor 是 DOS下要用的
4) +0x038 KernelTime : Uint4B
+0x03c UserTime : Uint4B
统计信息 记录了一个进程在内核模式/用户模式下所花的时间
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) +0x064 BasePriority : Char
基础优先级或最低优先级 该进程中的所有线程最起码的优先级.
其他成员:
1) +0x080 CreateTime : _LARGE_INTEGER +0x078 ExitTime : _LARGE_INTEGER
进程的创建/退出时间
2) +0x094 UniqueProcessId : Ptr32 Void
进程的编号 任务管理器中的PID
3) +0x098 ActiveProcessLinks : _LIST_ENTRY
双向链表 所有的活动进程都连接在一起,构成了一个链表。ActiveProcessLinks 断链可实现进程隐藏。
PsActiveProcessHead指向全局链表头
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哪些地址没占用了
7) +0x0bc DebugPort : Ptr32 Void
+0x0c0 ExceptionPort : Ptr32 Void
调试相关
8) +0x0c4 ObjectTable : Ptr32 _HANDLE_TABLE
句柄表
9) +0x174 ImageFileName : [16] UChar
进程镜像文件名 最多16个字节
10) +0x1a0 ActiveThreads : Uint4B
活动线程的数量
11) +0x1b0 Peb : Ptr32 _PEB
PEB((Process Environment Block 进程环境块):进程在3环的一个结构体,里面包含了进程的模块列表、是否处于调试状态等信息。