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