驱动开发与系统原理-内核中的线程结构体
0环创建线程,结构为Ethread3环创建线程,结构为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 : "" //内核警醒用户层警醒
+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 : "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 : _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: 0x86e42868 _KAPC_STATE
+0x170 SavedApcState : _KAPC_STATE
+0x170 SavedApcStateFill : "???"
+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: "??????"
+0x195 ResourceIndex : 0x1 ''
+0x194 SuspendApcFill1: "???"
+0x197 QuantumReset : 0x12 ''
+0x194 SuspendApcFill2: "???"
+0x198 KernelTime : 3
+0x194 SuspendApcFill3: "???"
+0x1b8 WaitPrcb : 0x83f2ed20 _KPRCB
+0x194 SuspendApcFill4: "???"
+0x1bc LegoData : (null)
+0x194 SuspendApcFill5: "???"
+0x1c3 LargeStack : 0 ''
+0x1c4 UserTime : 0
+0x1c8 SuspendSemaphore : _KSEMAPHORE
+0x1c8 SuspendSemaphorefill : "???"
+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 0x01d80d2d`4cc027e5//创建时间 +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线程无法结束
膜拜神贴,后面的请保持队形~
页:
[1]