大理寺少卿 发表于 2025-6-12 23:44:23

驱动开发与系统原理-内核中的线程结构体

0环创建线程,结构为Ethread

3环创建线程,结构为PEB

任何一个线程都必须挂在进程下面

实验
----

随便打开一个程序,我们通过Windbg遍历,取Process结构

![](https://raw.githubusercontent.com/Whitebird0/tuchuang/main/QQ%E6%88%AA%E5%9B%BE20220119201023.png)

会打印该程序的所有线程

![](https://raw.githubusercontent.com/Whitebird0/tuchuang/main/QQ%E6%88%AA%E5%9B%BE20220119201157.png)

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

![](https://raw.githubusercontent.com/Whitebird0/tuchuang/main/QQ%E6%88%AA%E5%9B%BE20220119201237.png)

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

dt _KTHREAD 86e42828
![](https://raw.githubusercontent.com/Whitebird0/tuchuang/main/QQ%E6%88%AA%E5%9B%BE20220119201447.png)

重要结构成员
------------

**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线程无法结束

asmprofan 发表于 6 天前

膜拜神贴,后面的请保持队形~
页: [1]
查看完整版本: 驱动开发与系统原理-内核中的线程结构体