登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 19|回复: 0

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

[复制链接]

102

主题

-6

回帖

149

积分

网站编辑

积分
149
发表于 前天 23:44 | 显示全部楼层 |阅读模式

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 0x86e42a3086e42a30 //退出时间 +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线程无法结束

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|断点社区 |网站地图

GMT+8, 2025-6-14 02:40 , Processed in 0.108727 second(s), 26 queries , Yac On.

Powered by XiunoBBS

Copyright © 2001-2025, 断点社区.

快速回复 返回顶部 返回列表