ETHREAD结构中哪个成员可获取当前执行线程的代码起始地址?
问题解答
Windows内核的_ETHREAD结构中,存储线程代码起始地址的就是你内核调试转储中展示的StartAddress成员,你给出的结构定义中确实包含该字段。
详细说明
- 你提供的
dt _ETHREAD输出里,偏移+0x5f8位置的StartAddress类型为Ptr64 Void,该字段记录的就是线程创建时指定的入口函数的起始地址,不管是用户态线程还是内核线程,该字段都会保存对应初始执行入口的地址。 - 注意区分:该字段存储的是线程初始入口的固定起始地址,不是线程运行过程中动态变化的当前指令指针(RIP/PC)值,如果你需要获取线程当前执行位置的地址,需要从
_ETHREAD内嵌的_KTHREAD结构的上下文相关字段中获取。 - 调试场景下要提取指定
_ETHREAD对象的起始地址,直接执行命令:dt nt!_ETHREAD <你的ETHREAD对象地址> StartAddress即可直接得到对应值。
你提供的内核调试转储结构参考:
lkd> dt _ETHREAD nt!_ETHREAD +0x000 Tcb : _KTHREAD +0x5d0 CreateTime : _LARGE_INTEGER +0x5d8 ExitTime : _LARGE_INTEGER +0x5d8 KeyedWaitChain : _LIST_ENTRY +0x5e8 ChargeOnlySession : Ptr64 Void +0x5f0 PostBlockList : _LIST_ENTRY +0x5f0 ForwardLinkShadow : Ptr64 Void +0x5f8 StartAddress : Ptr64 Void +0x600 TerminationPort : Ptr64 _TERMINATION_PORT +0x600 ReaperLink : Ptr64 _ETHREAD .... +0x6bd SuppressSymbolLoad : Pos 3, 1 Bit +0x6bd Prefetching : Pos 4, 1 Bit +0x6bd OwnsVadExclusive : Pos 5, 1 Bit +0x6bd OwnsChangeControlAreaExclusive : Pos 6, 1 Bit +0x6bd OwnsChangeControlAreaShared : Pos 7, 1 Bit +0x6be OwnsPagedPoolWorkingSetExclusive : Pos 0, 1 Bit +0x6be OwnsPagedPoolWorkingSetShared : Pos 1, 1 Bit +0x6be OwnsSystemPtesWorkingSetExclusive : Pos 2, 1 Bit +0x6be OwnsSystemPtesWorkingSetShared : Pos 3, 1 Bit +0x6be TrimTrigger : Pos 4, 2 Bits +0x6be Spare2 : Pos 6, 2 Bits +0x6bf SystemPagePriorityActive : Pos 0, 1 Bit +0x6bf SystemPagePriority : Pos 1, 3 Bits +0x6bf Spare3 : Pos 4, 4 Bits +0x6c0 CacheManagerActive : UChar +0x6c1 DisablePageFaultClustering : UChar +0x6c2 ActiveFaultCount : UChar +0x6c3 LockOrderState : UChar +0x6c8 AlpcMessageId : Uint8B +0x6d0 AlpcMessage : Ptr64 Void +0x6d0 AlpcReceiveAttributeSet : Uint4B +0x6d8 ExitStatus : Int4B +0x6e0 AlpcWaitListEntry : _LIST_ENTRY +0x6f0 CacheManagerCount : Uint4B +0x6f4 IoBoostCount : Uint4B +0x6f8 BoostList : _LIST_ENTRY +0x708 DeboostList : _LIST_ENTRY +0x718 BoostListLock : Uint8B +0x720 IrpListLock : Uint8B +0x728 ReservedForSynchTracking : Ptr64 Void +0x730 CmCallbackListHead : _SINGLE_LIST_ENTRY +0x738 ActivityId : Ptr64 _GUID +0x740 SeLearningModeListHead : _SINGLE_LIST_ENTRY +0x748 VerifierContext : Ptr64 Void +0x750 KernelStackReference : Uint4B +0x758 AdjustedClientToken : Ptr64 Void +0x760 UserFsBase : Uint4B +0x768 UserGsBase : Uint8B +0x770 PicoContext : Ptr64 Void
内容的提问来源于stack exchange,提问作者JoeT
相关产品推荐
相关产品推荐

