0环创建线程,结构为Ethread
3环创建线程,结构为PEB
任何一个线程都必须挂在进程下面
实验
随便打开一个程序,我们通过Windbg遍历,取Process结构

会打印该程序的所有线程

dt _ETHREAD 86e42828
通过该指令就可以看到_ETHREAD完整的结构信息

我们发现第一位是KTHREAD,与KPROCESS类似,首地址相同,也可以详细查看
dt _KTHREAD 86e42828

重要结构成员
KTHREAD
ntdll!_KTHREAD
+0x000 Header : _DISPATCHER_HEADER //等待头
+0x028 InitialStack : 0x91f59ed0 Void //栈底
+0x02c StackLimit : 0x91f57000 Void //栈顶
+0x030 KernelStack : 0x91f599f8 Void //栈的当前所在位置
+0x034 ThreadLock : 0 //线程锁
+0x039 Running : 0 '' //运行状态
+0x03a Alerted : [2] "" //[0]内核警醒 [1]用户层警醒
+0x03c KernelStackResident : 0y1
+0x03c ReadyTransition : 0y0
+0x03c ProcessReadyQueue : 0y0
+0x03c WaitNext : 0y0
+0x03c SystemAffinityActive : 0y0
+0x03c Alertable : 0y0 //是否可被唤醒
+0x03c GdiFlushActive : 0y0
+0x03c UserStackWalkActive : 0y0
+0x03c ApcInterruptRequest : 0y0
+0x03c ForceDeferSchedule : 0y0
+0x03c QuantumEndMigrate : 0y0
+0x03c UmsDirectedSwitchEnable : 0y0
+0x03c TimerActive : 0y0
+0x03c SystemThread : 0y0 //1系统线程
+0x03c Reserved : 0y000000000000000000 (0)
+0x03c MiscFlags : 0n1
+0x040 ApcState : _KAPC_STATE
+0x040 ApcStateFill : [23] "h(???"
+0x057 Priority : 11 '' //线程优先级
+0x058 NextProcessor : 0 //下一次运行的核心
+0x05c DeferredProcessor : 0
+0x060 ApcQueueLock : 0 //APC队列锁
+0x064 ContextSwitches : 0x10b //线程切换记录
+0x068 State : 0x5 '' //线程状态
+0x069 NpxState : 0 ''
+0x06a WaitIrql : 0 ''
+0x06b WaitMode : 1 ''
+0x06c WaitStatus : 0n0
+0x070 WaitBlockList : 0x86e428e8 _KWAIT_BLOCK
+0x074 WaitListEntry : _LIST_ENTRY [ 0x86c87acc - 0x86b02ae4 ]
+0x074 SwapListEntry : _SINGLE_LIST_ENTRY
+0x07c Queue : (null)
+0x080 WaitTime : 0x110ef
+0x084 KernelApcDisable : 0n0
+0x086 SpecialApcDisable : 0n0
+0x084 CombinedApcDisable : 0
+0x088 Teb : 0x7ffdf000 Void
+0x090 Timer : _KTIMER
+0x0b8 AutoAlignment : 0y0
+0x0b8 DisableBoost : 0y0
+0x0b8 EtwStackTraceApc1Inserted : 0y0
+0x0b8 EtwStackTraceApc2Inserted : 0y0
+0x0b8 CalloutActive : 0y0
+0x0b8 ApcQueueable : 0y1
+0x0b8 EnableStackSwap : 0y1
+0x0b8 GuiThread : 0y0
+0x0b8 UmsPerformingSyscall : 0y0
+0x0b8 VdmSafe : 0y0
+0x0b8 UmsDispatched : 0y0
+0x0b8 ReservedFlags : 0y000000000000000000000 (0)
+0x0b8 ThreadFlags : 0n96
+0x0bc ServiceTable : 0x83f6da00 Void
+0x0c0 WaitBlock : [4] _KWAIT_BLOCK
+0x120 QueueListEntry : _LIST_ENTRY [ 0x0 - 0x0 ]
+0x128 TrapFrame : 0x91f59c34 _KTRAP_FRAME
+0x12c FirstArgument : 0x001ad4e0 Void
+0x130 CallbackStack : (null)
+0x130 CallbackDepth : 0
+0x134 ApcStateIndex : 0 ''
+0x135 BasePriority : 8 '' //进程优先级,继承
+0x136 PriorityDecrement : 2 ''
+0x136 ForegroundBoost : 0y0010
+0x136 UnusualBoost : 0y0000
+0x137 Preempted : 0 ''
+0x138 AdjustReason : 0 ''
+0x139 AdjustIncrement : 2 ''
+0x13a PreviousMode : 1 '' //判断用户模式还是内核模式
+0x13b Saturation : 0 ''
+0x13c SystemCallNumber : 0x11b9 //线程挂起次数
+0x140 FreezeCount : 0
+0x144 UserAffinity : _GROUP_AFFINITY
+0x150 Process : 0x88d36a58 _KPROCESS //创建线程的进程
+0x154 Affinity : _GROUP_AFFINITY
+0x160 IdealProcessor : 0
+0x164 UserIdealProcessor : 0
+0x168 ApcStatePointer : [2] 0x86e42868 _KAPC_STATE
+0x170 SavedApcState : _KAPC_STATE
+0x170 SavedApcStateFill : [23] "???"
+0x187 WaitReason : 0xd ''
+0x188 SuspendCount : 0 ''
+0x189 Spare1 : 0 ''
+0x18a OtherPlatformFill : 0 ''
+0x18c Win32Thread : 0xfd65d350 Void
+0x190 StackBase : 0x91f5a000 Void
+0x194 SuspendApc : _KAPC
+0x194 SuspendApcFill0 : [1] "??????"
+0x195 ResourceIndex : 0x1 ''
+0x194 SuspendApcFill1 : [3] "???"
+0x197 QuantumReset : 0x12 ''
+0x194 SuspendApcFill2 : [4] "???"
+0x198 KernelTime : 3
+0x194 SuspendApcFill3 : [36] "???"
+0x1b8 WaitPrcb : 0x83f2ed20 _KPRCB
+0x194 SuspendApcFill4 : [40] "???"
+0x1bc LegoData : (null)
+0x194 SuspendApcFill5 : [47] "???"
+0x1c3 LargeStack : 0 ''
+0x1c4 UserTime : 0
+0x1c8 SuspendSemaphore : _KSEMAPHORE
+0x1c8 SuspendSemaphorefill : [20] "???"
+0x1dc SListFaultCount : 0
+0x1e0 ThreadListEntry : _LIST_ENTRY [ 0x86bc7900 - 0x88d36a84 ] //线程链表
+0x1e8 MutantListHead : _LIST_ENTRY [ 0x86e42a10 - 0x86e42a10 ]
+0x1f0 SListFaultAddress : (null)
+0x1f4 ThreadCounters : (null)
+0x1f8 XStateSave : (null)
ETHREAD
ntdll!_ETHREAD
+0x000 Tcb : _KTHREAD
+0x200 CreateTime : _LARGE_INTEGER 0x01d80d2d4cc027e5 //创建时间 +0x208 ExitTime : _LARGE_INTEGER 0x86e42a30 86e42a30 //退出时间
+0x218 StartAddress : 0x9d49c838 Void
+0x22c Cid : _CLIENT_ID //一个进程ID一个线程ID
+0x260 Win32StartAddress : 0x00fd65c0 Void
+0x268 ThreadListEntry : _LIST_ENTRY [ 0x88080930 - 0x88d36be0 ] //线程链表
+0x274 ThreadLock : _EX_PUSH_LOCK //线程锁
+0x280 Terminated : 0y0 //是否已经结束
+0x280 ThreadInserted : 0y1 //置0线程保护
+0x280 HideFromDebugger : 0y0 //置1调试器无法调试
+0x280 ActiveImpersonationInfo : 0y0
+0x280 Reserved : 0y0
+0x280 HardErrorsAreDisabled : 0y0
+0x280 BreakOnTermination : 0y0 //置1线程无法结束 |