1.进程结构体
其實我們創建進程或者線程就是分配一塊內存填充一個結構體賦上具體的值這樣進程或者線程也就創建出來了。
每個windows進程在0環執行體都有一個對應的結構體: _EPROCESS這個結構體包含了進程所有重要的信息。
kd> dt _EPROCESS nt!_EPROCESS//名稱 //類型+0x000 Pcb : _KPROCESS //子結構 (微內核)+0x06c ProcessLock : _EX_PUSH_LOCK//推鎖對象 保護_EPROCESS數據成員+0x070 CreateTime : _LARGE_INTEGER //進程創建的時間+0x078 ExitTime : _LARGE_INTEGER //進程退出時間+0x080 RundownProtect : _EX_RUNDOWN_REF//進程的停止保護鎖(所有線程釋放了才能釋放進程)+0x084 UniqueProcessId : Ptr32 Void //Pid+0x088 ActiveProcessLinks : _LIST_ENTRY /*所有活動進程組成的雙向鏈表,PsActiveProcessHead指向全局鏈表頭。dd PsActiveProcessHead得到的就是第一個進程 注意里面的地址都從_EPROCESS+0x88的位置開始 dt _EPROCESS 鏈表里的地址 -88*/+0x090 QuotaUsage : [3] Uint4B//內存使用量 物理頁統計信息+0x09c QuotaPeak : [3] Uint4B//尖峰使用量 物理頁統計信息+0x0a8 CommitCharge : Uint4B//虛擬內存以提交的頁面+0x0ac PeakVirtualSize : Uint4B//虛擬內存大小的尖峰值+0x0b0 VirtualSize : Uint4B//虛擬內存的大小+0x0b4 SessionProcessLinks : _LIST_ENTRY//系統會話鏈表節點地址+0x0bc DebugPort : Ptr32 Void//調試端口+0x0c0 ExceptionPort : Ptr32 Void//異常端口+0x0c4 ObjectTable : Ptr32 _HANDLE_TABLE//句柄表+0x0c8 Token : _EX_FAST_REF//進程安全訪問檢查+0x0cc WorkingSetLock : _FAST_MUTEX+0x0ec WorkingSetPage : Uint4B//包含進程工作集的頁面+0x0f0 AddressCreationLock : _FAST_MUTEX//保護虛擬地址的互斥鎖+0x110 HyperSpaceLock : Uint4B//自旋鎖 用于保護進程超空間+0x114 ForkInProgress : Ptr32 _ETHREAD//指向正在復制地址空間的那條線程+0x118 HardwareTrigger : Uint4B//記錄硬件錯誤性能分析次數+0x11c VadRoot : Ptr32 Void//用戶層 哪些地址沒占用?+0x120 VadHint : Ptr32 Void+0x124 CloneRoot : Ptr32 Void//當進程空間地址復制時,此樹會被創建+0x128 NumberOfPrivatePages : Uint4B//進程私有頁面的數量+0x12c NumberOfLockedPages : Uint4B//被鎖住的頁面數量+0x130 Win32Process : Ptr32 Void//不為NULL 說明是一個GUI進程+0x134 Job : Ptr32 _EJOB+0x138 SectionObject : Ptr32 Void//進程可執行映像文件的內存區對象+0x13c SectionBaseAddress : Ptr32 Void//該內存區對象的基地址+0x140 QuotaBlock : Ptr32 _EPROCESS_QUOTA_BLOCK//指向該進程的配額塊+0x144 WorkingSetWatch : Ptr32 _PAGEFAULT_HISTORY//用于監視一個進程的頁面錯誤+0x148 Win32WindowStation : Ptr32 Void//進程所屬的窗口站的句柄+0x14c InheritedFromUniqueProcessId : Ptr32 Void//父進程ID+0x150 LdtInformation : Ptr32 Void//LDT表+0x154 VadFreeHint : Ptr32 Void//指向一個提示VAD節點+0x158 VdmObjects : Ptr32 Void//指向當前進程的VDM數據區+0x15c DeviceMap : Ptr32 Void//指向進程使用的設備表+0x160 PhysicalVadList : _LIST_ENTRY+0x168 PageDirectoryPte : _HARDWARE_PTE+0x168 Filler : Uint8B+0x170 Session : Ptr32 Void+0x174 ImageFileName : [16] UChar//進程名稱 最多16個字節+0x184 JobLinks : _LIST_ENTRY+0x18c LockedPagesList : Ptr32 Void+0x190 ThreadListHead : _LIST_ENTRY//當前進程的所有線程 都在這個雙向鏈表中+0x198 SecurityPort : Ptr32 Void//安全端口+0x19c PaeTop : Ptr32 Void//支持PAE內存訪問機制+0x1a0 ActiveThreads : Uint4B//活動線程數量+0x1a4 GrantedAccess : Uint4B//進程的訪問權限+0x1a8 DefaultHardErrorProcessing : Uint4B//指定了默認的硬件錯誤處理 默認1+0x1ac LastThreadExitStatus : Int4B//記錄了剛才最后一條線程的退出狀態+0x1b0 Peb : Ptr32 _PEB //3環的描述進程的信息+0x1b4 PrefetchTrace : _EX_FAST_REF//快速引用+0x1b8 ReadOperationCount : _LARGE_INTEGER//NtReadFile系統服務被調用的次數+0x1c0 WriteOperationCount : _LARGE_INTEGER//NtWriteFile系統服務被調用的次數+0x1c8 OtherOperationCount : _LARGE_INTEGER//記錄除了讀寫操作以外的IO操作的次數+0x1d0 ReadTransferCount : _LARGE_INTEGER//IO讀操作的完成次數+0x1d8 WriteTransferCount : _LARGE_INTEGER//IO寫操作的完成次數+0x1e0 OtherTransferCount : _LARGE_INTEGER//非讀寫操作完成次數+0x1e8 CommitChargeLimit : Uint4B//已提交頁面數量的限制值 0表示沒有限制+0x1ec CommitChargePeak : Uint4B//尖峰時刻的已提交頁面數量+0x1f0 AweInfo : Ptr32 Void//支持AWE+0x1f4 SeAuditProcessCreationInfo : _SE_AUDIT_PROCESS_CREATION_INFO// 進程的完完整路徑名稱+0x1f8 Vm : _MMSUPPORT//虛擬內存的重要數據結構+0x238 LastFaultCount : Uint4B+0x23c ModifiedPageCount : Uint4B//進程中已修改頁面的數量+0x240 NumberOfVads : Uint4B+0x244 JobStatus : Uint4B//進程的標志位+0x248 Flags : Uint4B+0x248 CreateReported : Pos 0, 1 Bit+0x248 NoDebugInherit : Pos 1, 1 Bit+0x248 ProcessExiting : Pos 2, 1 Bit+0x248 ProcessDelete : Pos 3, 1 Bit+0x248 Wow64SplitPages : Pos 4, 1 Bit+0x248 VmDeleted : Pos 5, 1 Bit+0x248 OutswapEnabled : Pos 6, 1 Bit+0x248 Outswapped : Pos 7, 1 Bit+0x248 ForkFailed : Pos 8, 1 Bit+0x248 HasPhysicalVad : Pos 9, 1 Bit+0x248 AddressSpaceInitialized : Pos 10, 2 Bits+0x248 SetTimerResolution : Pos 12, 1 Bit+0x248 BreakOnTermination : Pos 13, 1 Bit+0x248 SessionCreationUnderway : Pos 14, 1 Bit+0x248 WriteWatch : Pos 15, 1 Bit+0x248 ProcessInSession : Pos 16, 1 Bit+0x248 OverrideAddressSpace : Pos 17, 1 Bit+0x248 HasAddressSpace : Pos 18, 1 Bit+0x248 LaunchPrefetched : Pos 19, 1 Bit+0x248 InjectInpageErrors : Pos 20, 1 Bit+0x248 VmTopDown : Pos 21, 1 Bit+0x248 Unused3 : Pos 22, 1 Bit+0x248 Unused4 : Pos 23, 1 Bit+0x248 VdmAllowed : Pos 24, 1 Bit+0x248 Unused : Pos 25, 5 Bits+0x248 Unused1 : Pos 30, 1 Bit+0x248 Unused2 : Pos 31, 1 Bit+0x24c ExitStatus : Int4B//進程的退出狀態+0x250 NextPageColor : Uint2B//物理頁面分配算法+0x252 SubSystemMinorVersion : UChar//進程子系統的次版本號+0x253 SubSystemMajorVersion : UChar//進程子系統的主版本號+0x252 SubSystemVersion : Uint2B//子系統版本+0x254 PriorityClass : UChar//進程的優先級+0x255 WorkingSetAcquiredUnsafe : UChar+0x258 Cookie : Uint4B//隨機值 //EPROCESS 的第一個成員 kd> dt _KPROCESS nt!_KPROCESS+0x000 Header : _DISPATCHER_HEADER //可等待對象(也稱為分發器對象),比如Mutex互斥體、Event事件等(WaitForSingleObject)+0x010 ProfileListHead : _LIST_ENTRY//參與性能分析?+0x018 DirectoryTableBase : [2] Uint4B//頁目錄基址+0x020 LdtDescriptor : _KGDTENTRY//LDT表+0x028 Int21Descriptor : _KIDTENTRY//允許使用int 21h(兼容DOS程序的)+0x030 IopmOffset : Uint2B//指定IOPM+0x032 Iopl : UChar+0x033 Unused : UChar+0x034 ActiveProcessors : Uint4B//當前進程在哪個處理器上運行+0x038 KernelTime : Uint4B//統計內核下所花的時間+0x03c UserTime : Uint4B//統計用戶下所花的時間+0x040 ReadyListHead : _LIST_ENTRY//就緒鏈表頭+0x048 SwapListEntry : _SINGLE_LIST_ENTRY//切換內存鏈表+0x04c VdmTrapcHandler : Ptr32 Void//處理Ctrl+c中斷的(僅用于DOS程序)+0x050 ThreadListHead : _LIST_ENTRY//該進程的所有線程+0x058 ProcessLock : Uint4B//自旋鎖(保護該進程的數據成員)+0x05c Affinity : Uint4B /*規定進程里面的所有線程能,哪個CPU上跑,如果值為1那這個進程的 "所有線程只能在0號CPU上跑(00000001)如果值為3那這個進程的所以線程能在0、1號CPU上跑(00000011) 轉二進制為 1的就是能跑的,也稱為cpu親和性*/+0x060 StackCount : Uint2B+0x062 BasePriority : Char//當前線程基礎優先級+0x063 ThreadQuantum : Char//當前進程的處理器+0x064 AutoAlignment : UChar//+0x065 State : UChar+0x066 ThreadSeed : UChar+0x067 DisableBoost : UChar+0x068 PowerState : UChar//電源狀態+0x069 DisableQuantum : UChar+0x06a IdealNode : UChar//進程的優先處理器節點+0x06b Flags : _KEXECUTE_OPTIONS+0x06b ExecuteOptions : UChar 3環的結構體,描述進程相關的 kd> dt _PEB nt!_PEB+0x000 InheritedAddressSpace : UChar+0x001 ReadImageFileExecOptions : UChar+0x002 BeingDebugged : UChar//當前進程被調試器附加會被置1+0x003 SpareBool : UChar+0x004 Mutant : Ptr32 Void+0x008 ImageBaseAddress : Ptr32 Void+0x00c Ldr : Ptr32 _PEB_LDR_DATA//子結構+0x010 ProcessParameters : Ptr32 _RTL_USER_PROCESS_PARAMETERS+0x014 SubSystemData : Ptr32 Void+0x018 ProcessHeap : Ptr32 Void+0x01c FastPebLock : Ptr32 _RTL_CRITICAL_SECTION+0x020 FastPebLockRoutine : Ptr32 Void+0x024 FastPebUnlockRoutine : Ptr32 Void+0x028 EnvironmentUpdateCount : Uint4B+0x02c KernelCallbackTable : Ptr32 Void+0x030 SystemReserved : [1] Uint4B+0x034 AtlThunkSListPtr32 : Uint4B+0x038 FreeList : Ptr32 _PEB_FREE_BLOCK+0x03c TlsExpansionCounter : Uint4B+0x040 TlsBitmap : Ptr32 Void+0x044 TlsBitmapBits : [2] Uint4B+0x04c ReadOnlySharedMemoryBase : Ptr32 Void+0x050 ReadOnlySharedMemoryHeap : Ptr32 Void+0x054 ReadOnlyStaticServerData : Ptr32 Ptr32 Void+0x058 AnsiCodePageData : Ptr32 Void+0x05c OemCodePageData : Ptr32 Void+0x060 UnicodeCaseTableData : Ptr32 Void+0x064 NumberOfProcessors : Uint4B+0x068 NtGlobalFlag : Uint4B+0x070 CriticalSectionTimeout : _LARGE_INTEGER+0x078 HeapSegmentReserve : Uint4B+0x07c HeapSegmentCommit : Uint4B+0x080 HeapDeCommitTotalFreeThreshold : Uint4B+0x084 HeapDeCommitFreeBlockThreshold : Uint4B+0x088 NumberOfHeaps : Uint4B+0x08c MaximumNumberOfHeaps : Uint4B+0x090 ProcessHeaps : Ptr32 Ptr32 Void+0x094 GdiSharedHandleTable : Ptr32 Void+0x098 ProcessStarterHelper : Ptr32 Void+0x09c GdiDCAttributeList : Uint4B+0x0a0 LoaderLock : Ptr32 Void+0x0a4 OSMajorVersion : Uint4B+0x0a8 OSMinorVersion : Uint4B+0x0ac OSBuildNumber : Uint2B+0x0ae OSCSDVersion : Uint2B+0x0b0 OSPlatformId : Uint4B+0x0b4 ImageSubsystem : Uint4B+0x0b8 ImageSubsystemMajorVersion : Uint4B+0x0bc ImageSubsystemMinorVersion : Uint4B+0x0c0 ImageProcessAffinityMask : Uint4B+0x0c4 GdiHandleBuffer : [34] Uint4B+0x14c PostProcessInitRoutine : Ptr32 void +0x150 TlsExpansionBitmap : Ptr32 Void+0x154 TlsExpansionBitmapBits : [32] Uint4B+0x1d4 SessionId : Uint4B+0x1d8 AppCompatFlags : _ULARGE_INTEGER+0x1e0 AppCompatFlagsUser : _ULARGE_INTEGER+0x1e8 pShimData : Ptr32 Void+0x1ec AppCompatInfo : Ptr32 Void+0x1f0 CSDVersion : _UNICODE_STRING+0x1f8 ActivationContextData : Ptr32 Void+0x1fc ProcessAssemblyStorageMap : Ptr32 Void+0x200 SystemDefaultActivationContextData : Ptr32 Void+0x204 SystemAssemblyStorageMap : Ptr32 Void+0x208 MinimumStackCommit : Uint4B //PEB->+0x00c Ldr : Ptr32 _PEB_LDR_DATA kd> dt _PEB_LDR_DATA nt!_PEB_LDR_DATA+0x000 Length : Uint4B+0x004 Initialized : UChar+0x008 SsHandle : Ptr32 Void//3個雙向鏈表+0x00c InLoadOrderModuleList : _LIST_ENTRY//模塊加載的順序+0x014 InMemoryOrderModuleList : _LIST_ENTRY//模塊在內存中的順序+0x01c InInitializationOrderModuleList : _LIST_ENTRY//模塊初始化的順序+0x024 EntryInProgress : Ptr32 Void總結
- 上一篇: 4.API的调用过程(系统服务表)
- 下一篇: 2.线程结构体