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



使用"显示类型"命令,您可以选择指定一个伪寄存器。这将添加基地地址。然而,我不清楚指定伪寄存器的好处是什么。

添加"@$teb"伪寄存器:

dt ntdll!_TEB @$teb ThreadLocalStoragePointer

+0x02c ThreatLocalStoragePointer : (null)

不加"@$teb"伪寄存器:

dt ntdll!_TEB ThreadLocalStoragePointer

+0x02c ThreatLocalStoragePointer : Ptr32 Void

如果您指定一个伪寄存器,它将被计算为一个地址输出将显示求值的结果

就像指定一个地址,如dt ntdll!_teb 12345678的9 abcdef0

如果没有提供可求值表达式,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>