2.线程结构体

kd> dt _ETHREAD
ntdll!_ETHREAD
   +0x000 Tcb              : _KTHREAD//子结构(微内核)
   +0x1c0 CreateTime       : _LARGE_INTEGER//线程的创建时间
   +0x1c0 NestedFaultCount : Pos 0, 2 Bits
   +0x1c0 ApcNeeded        : Pos 2, 1 Bit
   +0x1c8 ExitTime         : _LARGE_INTEGER//线程的退出时间
   +0x1c8 LpcReplyChain    : _LIST_ENTRY//跨进程通信双链表
   +0x1c8 KeyedWaitChain   : _LIST_ENTRY//带键值事件的等待双链表
   +0x1d0 ExitStatus       : Int4B//线程退出状态
   +0x1d0 OfsChain         : Ptr32 Void
   +0x1d4 PostBlockList    : _LIST_ENTRY//双链表头节点 (用于向配置管理器登录注册表键值的变化通知)
   +0x1dc TerminationPort  : Ptr32 _TERMINATION_PORT//链表头(当一个线程退出时,系统会通知所有已经登记过,要接收其终止事件的那些端口)
   +0x1dc ReaperLink       : Ptr32 _ETHREAD//单链表节点 (线程退出时会被挂上去)
   +0x1dc KeyedWaitValue   : Ptr32 Void//带键值事件的键值
   +0x1e0 ActiveTimerListLock : Uint4B//操作下面那个链表的自旋锁
   +0x1e4 ActiveTimerListHead : _LIST_ENTRY//双链表头(当前线程的所有定时器)
   +0x1ec Cid              : _CLIENT_ID//线程id,进程id都在里面
   +0x1f4 LpcReplySemaphore : _KSEMAPHORE//LPC应答通知
   +0x1f4 KeyedWaitSemaphore : _KSEMAPHORE//处理带键值的事件
   +0x208 LpcReplyMessage  : Ptr32 Void//LPC应答消息(其中包含了LPC应答通知)
   +0x208 LpcWaitingOnPort : Ptr32 Void//在那个端口对象上等待
   +0x20c ImpersonationInfo : Ptr32 _PS_IMPERSONATION_INFORMATION//线程的模仿信息
   +0x210 IrpList          : _LIST_ENTRY//当前线程所有正在处理尚未完成的IO请求 (双链表头) 
   +0x218 TopLevelIrp      : Uint4B//指向线程的顶级的IRP
   +0x21c DeviceToVerify   : Ptr32 _DEVICE_OBJECT//指向一个待校验的设备对象
   +0x220 ThreadsProcess   : Ptr32 _EPROCESS//自身进程结构体
   +0x224 StartAddress     : Ptr32 Void//线程的启动地址(系统DLL)
   +0x228 Win32StartAddress : Ptr32 Void//子系统接收到的线程启动的地址(CreateThread接收到的线程函数)
   +0x228 LpcReceivedMessageId : Uint4B//LPC接收到的消息ID
   +0x22c ThreadListEntry  : _LIST_ENTRY/*双向链表一个进程所有的线程都挂在一个链表中
   挂的就是这个位置一共有两个这样的链表
*/
   
   +0x234 RundownProtect   : _EX_RUNDOWN_REF//线程的停止保护锁
   +0x238 ThreadLock       : _EX_PUSH_LOCK//推锁 (保护线程的数据属性)
   +0x23c LpcReplyMessageId : Uint4B//指明当前线程正在等待的一个消息应答
   +0x240 ReadClusterSize  : Uint4B//指明了在一次io操作中读取了多少个页面
   +0x244 GrantedAccess    : Uint4B//线程的访问权限
   
   +0x248 CrossThreadFlags : Uint4B//一些针对跨线程访问的标志位
   +0x248 Terminated       : Pos 0, 1 Bit//线程已经执行终止操作
   +0x248 DeadThread       : Pos 1, 1 Bit//创建失败
   +0x248 HideFromDebugger : Pos 2, 1 Bit//该线程对于调试器不可见
   +0x248 ActiveImpersonationInfo : Pos 3, 1 Bit//线程正在模仿
   +0x248 SystemThread     : Pos 4, 1 Bit//是一个系统线程
   +0x248 HardErrorsAreDisabled : Pos 5, 1 Bit//对于该线程硬件错误无效
   +0x248 BreakOnTermination : Pos 6, 1 Bit//调试器在线程终止时停下该线程
   +0x248 SkipCreationMsg  : Pos 7, 1 Bit//不向调试器发送创建消息
   +0x248 SkipTerminationMsg : Pos 8, 1 Bit//不向调试器发送终止消息
   
   +0x24c SameThreadPassiveFlags : Uint4B//只有在最底中断级别才可访问的标志位,并且只能被该线程自身访问
   +0x24c ActiveExWorker   : Pos 0, 1 Bit
   +0x24c ExWorkerCanWaitUser : Pos 1, 1 Bit
   +0x24c MemoryMaker      : Pos 2, 1 Bit
   
   +0x250 SameThreadApcFlags : Uint4B//是一些在apc中断级别上,被该线程自身访问的标志位
   +0x250 LpcReceivedMsgIdValid : Pos 0, 1 Bit
   +0x250 LpcExitThreadCalled : Pos 1, 1 Bit
   +0x250 AddressSpaceOwner : Pos 2, 1 Bit
   +0x254 ForwardClusterOnly : UChar//是否仅仅前向聚集?
   +0x255 DisablePageFaultClustering : UChar//控制页面交换的聚集与否
//_ETHREAD-> +0x000 Tcb              : _KTHREAD
kd> dt _KTHREAD
ntdll!_KTHREAD
   +0x000 Header           : _DISPATCHER_HEADER//可等待对象
   +0x010 MutantListHead   : _LIST_ENTRY//突变体对象链表
   +0x018 InitialStack     : Ptr32 Void//记录原始栈的位置(高地址) (线程切换相关)
   +0x01c StackLimit       : Ptr32 Void//记录栈的低地址 (线程切换相关)
   +0x020 Teb              : Ptr32 Void//线程环境块,大小4KB,位于用户地址空间。用户层FS:[0]就是teb
   +0x024 TlsArray         : Ptr32 Void//
   +0x028 KernelStack      : Ptr32 Void/*内核调用栈的开始位置,由于顶部还记录了陷阱帧,浮点寄存器,
   它比InitialStack要低(KTRAP_FRAME_LENGTH+sizeof(FX_SAVE_AREA)) (线程切换相关)*/
   +0x02c DebugActive      : UChar//如果值为-1不能使用dr0~dr7
   +0x02d State            : UChar//线程状态:就绪、等待要是运行
   +0x02e Alerted          : [2] UChar//数组 用户/内核模式下是否可以被唤醒
   +0x030 Iopl             : UChar
   +0x031 NpxState         : UChar//浮点处理器状态
   +0x032 Saturation       : Char//线程基本优先级
   +0x033 Priority         : Char//动态优先级
   +0x034 ApcState         : _KAPC_STATE//APC相关信息结构
   +0x04c ContextSwitches  : Uint4B//该线程进行了多少次切换
   +0x050 IdleSwapBlock    : UChar
   +0x051 Spare0           : [3] UChar
   +0x054 WaitStatus       : Int4B//线程等待的结果状态
   +0x058 WaitIrql         : UChar//WaitNext为TRUE,记录原先IRQL
   +0x059 WaitMode         : Char
   +0x05a WaitNext         : UChar//TRUE:这个线程马上要调用一个内核等待函数
   +0x05b WaitReason       : UChar//线程的等待理由
   +0x05c WaitBlockList    : Ptr32 _KWAIT_BLOCK//线程在等待那个等待对象
   +0x060 WaitListEntry    : _LIST_ENTRY//等待链表(双链表) dd KiWaitListHead
   +0x060 SwapListEntry    : _SINGLE_LIST_ENTRY//调度链表(单链表) dd KiWaitListHead
   +0x068 WaitTime         : Uint4B
   +0x06c BasePriority     : Char/*静态优先级,可以通过KeSetBasePriorityThread()函数重新设定*/
   +0x06d DecrementCount   : UChar
   +0x06e PriorityDecrement : Char//记录线程动态调整优先级的递减值
   +0x06f Quantum          : Char//当线程的时间片限制
   +0x070 WaitBlock        : [4] _KWAIT_BLOCK//等待哪个对象(WaitForSingleObject)
   +0x0d0 LegoData         : Ptr32 Void
   +0x0d4 KernelApcDisable : Uint4B
   +0x0d8 UserAffinity     : Uint4B//线程的用户亲和性
   +0x0dc SystemAffinityActive : UChar
   +0x0dd PowerState       : UChar
   +0x0de NpxIrql          : UChar
   +0x0df InitialNode      : UChar
   +0x0e0 ServiceTable     : Ptr32 Void//该线程使用的系统服务表的基址(参考消息机制章节)
   +0x0e4 Queue            : Ptr32 _KQUEUE//队列分发器对象
   +0x0e8 ApcQueueLock     : Uint4B//APC队列自旋锁
   +0x0f0 Timer            : _KTIMER//附在线程的定时器
   +0x118 QueueListEntry   : _LIST_ENTRY//加入到队列对象的线程链表中节点的地址
   +0x120 SoftAffinity     : Uint4B
   +0x124 Affinity         : Uint4B//线程的处理器的亲和性
   +0x128 Preempted        : UChar//TRUE:被优先级高的线程抢占了
   +0x129 ProcessReadyQueue : UChar//TRUE:线程在KPROCESS->ReadyListHead链表中
   +0x12a KernelStackResident : UChar//线程的内核栈是否在内存中 FALSE:被换出内存了 -282页
   +0x12b NextProcessor    : UChar//处理器调度选择
   +0x12c CallbackStack    : Ptr32 Void
   +0x130 Win32Thread      : Ptr32 Void//指向Windows子系统的管理区域
   +0x134 TrapFrame        : Ptr32 _KTRAP_FRAME//进0环时保存环境(寄存器)
   +0x138 ApcStatePointer  : [2] Ptr32 _KAPC_STATE//APC相关
   +0x140 PreviousMode     : Char//(先前模式)某些内核函数会判断程序是0环调用还是3环调用的
   +0x141 EnableStackSwap  : UChar//本线程内核栈是否允许被换出到外储存 -282页
   +0x142 LargeStack       : UChar
   +0x143 ResourceIndex    : UChar
   +0x144 KernelTime       : Uint4B
   +0x148 UserTime         : Uint4B
   +0x14c SavedApcState    : _KAPC_STATE//APC相关
   +0x164 Alertable        : UChar//线程是否可以被唤醒?
   +0x165 ApcStateIndex    : UChar//当前APC状态的索引ApcStatePointer
   +0x166 ApcQueueable     : UChar//是否可以插入APC
   +0x167 AutoAlignment    : UChar//
   +0x168 StackBase        : Ptr32 Void//当前栈的基址(高地址)(线程切换相关)
   +0x16c SuspendApc       : _KAPC//挂起APC (163)
   +0x19c SuspendSemaphore : _KSEMAPHORE//信号量状态
   +0x1b0 ThreadListEntry  : _LIST_ENTRY/*双向链表,一个进程所有的线程都挂在一个链表中
   ,一共有两个这样的链表,*/
   +0x1b8 FreezeCount      : Char
   +0x1b9 SuspendCount     : Char//当调试器调试目标进程,被中断时,由于目标进程线程的SuspendCount不为零,所以目标进程的线程就无法被暂停。
   +0x1ba IdealProcessor   : UChar
   +0x1bb DisableBoost     : UChar//

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值