(不是很全面。可以参考WinDbg的帮助文档。操作系统 win7 32)
dt命令主要用来查看相关的变量,结构体等的信息,它配合一些参数使用可以 获取想要的信息。
使用dt命令查看结构体:
lkd> dt nt!_list_entry
+0x000 Flink : Ptr32 _LIST_ENTRY
+0x004 Blink : Ptr32 _LIST_ENTRY
这是双向循环链表,它的表项结构有两个成员,类型都是_list_entry指针。
lkd> dt nt!_peb_ldr_data
+0x000 Length : Uint4B
+0x004 Initialized : UChar
+0x008 SsHandle : Ptr32 Void
+0x00c InLoadOrderModuleList : _LIST_ENTRY
+0x014 InMemoryOrderModuleList : _LIST_ENTRY
+0x01c InInitializationOrderModuleList : _LIST_ENTRY
+0x024 EntryInProgress : Ptr32 Void
+0x028 ShutdownInProgress : UChar
+0x02c ShutdownThreadId : Ptr32 Void
这是peb(process enviroment block 进程环境块)结构体的一个成员,可以看到里面就使用了3个双向循环链表来记录加载的模块信息。
lkd> dt nt!_mm_avl_table
+0x000 BalancedRoot : _MMADDRESS_NODE
+0x014 DepthOfTree : Pos 0, 5 Bits
+0x014 Unused : Pos 5, 3 Bits
+0x014 NumberGenericTableElements : Pos 8, 24 Bits
+0x018 NodeHint : Ptr32 Void
+0x01c NodeFreeHint : Ptr32 Void
lkd> dt nt!_mmaddress_node
+0x000 u1 : <unnamed-tag>
+0x004 LeftChild : Ptr32 _MMADDRESS_NODE
+0x008 RightChild : Ptr32 _MMADDRESS_NODE
+0x00c StartingVpn : Uint4B
+0x010 EndingVpn : Uint4B
avl树在内存的管理(mm--memory management)是被使用。
dt struct addr 来列出具体结构struct的给成员的值
lkd> dt nt!_kprocess 83864d40
+0x000 Header : _DISPATCHER_HEADER
+0x010 ProfileListHead : _LIST_ENTRY [ 0x83864d50 - 0x83864d50 ]
+0x018 DirectoryTableBase : 0x89233480
+0x01c LdtDescriptor : _KGDTENTRY
+0x024 Int21Descriptor : _KIDTENTRY
+0x02c ThreadListHead : _LIST_ENTRY [ 0x83864c38 - 0x88fbca30 ]
+0x034 ProcessLock : 0
+0x038 Affinity : _KAFFINITY_EX
+0x044 ReadyListHead : _LIST_ENTRY [ 0x83864d84 - 0x83864d84 ]
+0x04c SwapListEntry : _SINGLE_LIST_ENTRY
+0x050 ActiveProcessors : _KAFFINITY_EX
.......(还有没截下来的)
_kprocess结构里包含有结构体,那些部分没有给出值,可以加上-b 参数来展开那些结构体,如(dt nt!_kprocess -b 83864d40)。
lkd> dt nt!_eprocess -l ActiveProcessLinks.Flink -y Ima -yoi Uni 83864d40
ActiveProcessLinks.Flink at 0x83864d40
---------------------------------------------
UniqueProcessId : 0x00000ac0 Void
ActiveProcessLinks : [ 0x838cc0e8 - 0x8385fd00 ]
ImageFileName : [15] "DrClient.exe"
ImagePathHash : 0x66151206
ImageNotifyDone : 0y1
-l参数来列出ActiveProcessLinks.Flink链表里的每一个表向项;-y表明下一个参数的名字的开始,(ImageFileName,ImagePathHash都是以Ima开头);-yoi是y,o,i三个选项的组合,o表示省略结构域的偏移量,i表示不缩进子类型。
本文详细介绍了在WinDbg调试器中如何使用dt命令来查看和理解各种结构体及变量信息。通过实例展示了dt命令如何揭示不同结构体的布局,包括双向循环链表、PEB结构体和AVL树等,适用于操作系统调试与内核开发。
292

被折叠的 条评论
为什么被折叠?



