Windbg:使用 "dt" 命令时指定伪寄存器有什么好处

Windbg: what is the benefit of specifying pseudo register when using "dt" command

在 Windbg 中使用“显示类型”命令时,您可以选择指定伪寄存器。这将添加基地址。但是我不清楚指定伪寄存器有什么好处。

添加“@$teb”伪寄存器时:

dt ntdll!_TEB @$teb ThreadLocalStoragePointer

+0x02c ThreatLocalStoragePointer : (null)

不添加“@$teb”伪寄存器:

dt ntdll!_TEB ThreadLocalStoragePointer

+0x02c ThreatLocalStoragePointer : Ptr32 Void

如果您指定一个伪寄存器,它将被评估为一个地址 输出将显示评估结果

这就像指定一个地址 dt ntdll!_teb 12345678`9abcdef0

如果您不提供可评估的表达式,dt 将简单地打印结构

例子

0:001> dt ntdll!_TEB ProcessEnvironmentBlock->ProcessParameters->CommandLine @$teb
   +0x060 ProcessEnvironmentBlock                                 :
      +0x020 ProcessParameters                                       :
         +0x070 CommandLine               : _UNICODE_STRING "dbstk.exe"
0:001> dt ntdll!_TEB ProcessEnvironmentBlock->ProcessParameters->CommandLine
   +0x060 ProcessEnvironmentBlock                                 :
      +0x020 ProcessParameters                                       :
         +0x070 CommandLine               : _UNICODE_STRING
0:001>  

处理评论

是的,就像铸造 (TEB *) 0x12345678`9abcdef

您还可以在所有内置伪寄存器上使用如下所示的 C++ 表达式求值器或使用地址

0:001> ?? @$teb->ProcessEnvironmentBlock->ProcessParameters->CommandLine
struct _UNICODE_STRING
 "dbstk.exe"
   +0x000 Length           : 0x12
   +0x002 MaximumLength    : 0x14
   +0x008 Buffer           : 0x000002a6`27290fb0  "dbstk.exe"
0:001> ? @$teb
Evaluate expression: 1080494329856 = 000000fb`927b1000
0:001> dt ntdll!_TEB ProcessEnvironmentBlock->ProcessParameters->CommandLine 000000fb`927b1000
   +0x060 ProcessEnvironmentBlock                                 :
      +0x020 ProcessParameters                                       :
         +0x070 CommandLine                                             : _UNICODE_STRING "dbstk.exe"
0:001>