dt命令显示局部变量、全局变量或数据类型的信息。它也可以仅显示数据类型。即结构和联合(union)的信息。
0:kd>dt_PEB
- nt!_PEB
- +0x000InheritedAddressSpace:UChar
- +0x001ReadImageFileExecOptions:UChar
- +0x002BeingDebugged:UChar
- +0x003SpareBool:UChar
- +0x004Mutant:Ptr32Void
- +0x008ImageBaseAddress:Ptr32Void
- +0x00cLdr:Ptr32_PEB_LDR_DATA
- +0x010ProcessParameters:Ptr32_RTL_USER_PROCESS_PARAMETERS
- [...]
dt查看特定地址的eprocess结构内容
- 0:kd>dt_EPROCESS8055d0c0
- ntdll!_EPROCESS
- +0x000Pcb:_KPROCESS
- [...]
- +0x160PhysicalVadList:_LIST_ENTRY[0x8055d220-0x8055d220]
- +0x168PageDirectoryPte:_HARDWARE_PTE_X86
- +0x168Filler:0
- +0x170Session:(null)
- +0x174ImageFileName:[16]"Idle"
- +0x184JobLinks:_LIST_ENTRY[0x0-0x0]
- +0x18cLockedPagesList:(null)
- +0x190ThreadListHead:_LIST_ENTRY[0x8055d250-0x8055d250]
- +0x198SecurityPort:(null)
- [...]
dt通配符显示模块结构名称
kd> dt ntdll!_peb*
ntdll!_PEB
ntdll!_PEB_LDR_DATA
ntdll!_PEB_FREE_BLOCK
d*命令显示给定范围内存的内容。
d, da, db, dc, dd, dD, df, dp, dq, du, dw, dW, dyb, dyd (Display Memory)
如果省略掉Range ,命令将会从上一条内存查看命令结束的位置开始。这使得可以连续的进行内存查看。
d这种显示的格式和最近一次d*命令的格式相同。如果之前没有使用过d*命令,d 和db 的效果相同。
注意d重复前一个以d开头的命令。包括dda、ddp、ddu、dpa、dpp、dpu、dqa、dqp、dqu、dds、dps、dqs、ds、dS、dg、dl、dt和dv,以及本页中的显示命令。如果在d之后的参数不适当,可能会产生错误。
0:001>d
- 7c92120eccc38bffccc38bff-8b442404ccc20400.........D$.....
- 7c92121e64a118000000c357-8b7c240c8b542408d......W.|$..T$.
- 7c92122ec70200000000897a-040bff741e83c9ff.......z...t....
- 7c92123e33c0f2aef7d181f9-ffff00007605b9ff3...........v...
- 7c92124eff000066894a0249-66890a5fc2080057...f.J.If.._...W
- 7c92125e8b7c240c8b542408-c70200000000897a.|$..T$........z
- 7c92126e040bff741e83c9ff-33c0f2aef7d181f9...t....3.......
- 7c92127effff00007605b9ff-ff000066894a0249....v......f.J.I
- 0:001>d
- 7c92128e66890a5fc2080057-8b7c240c8b542408f.._...W.|$..T$.
- 7c92129ec70200000000897a-040bff742283c9ff.......z...t"...
- 7c9212ae33c066f2aff7d1d1-e181f9feff0000763.f............v
- 7c9212be05b9feff00006689-4a02494966890a5f......f.J.IIf.._
- 7c9212cec2080083ec0cdd14-24e8bfcf0000e80d........$.......
- 7c9212de00000083c40cc38d-542404e86acf0000........T$..j...
- 7c9212ee529bd93c24745066-813c247f027406d9R..<$tPf.<$..t..
- 7c9212fe2d5ce7927cd9fe9b-dfe09e7a1d833dac-\..|......z..=.
我们可以看出第二个d显示的地址是前面的地址的延续
da:ASCII 字符每行最多48个字符。显示一直继续直到遇到第一个null字节或者到达range 值指定的所有字符都已经显示。所有不可打印字符,如回车和换行都被显示为点号(.)。
0:001>r
- eax=00000009ebx=00000001ecx=00000002edx=00000003esi=00000004edi=00000005
- eip=7c92120eesp=00c1ffccebp=00c1fff4iopl=0nvupeiplzrnapenc
- cs=001bss=0023ds=0023es=0023fs=0038gs=0000efl=00000246
- ntdll!DbgBreakPoint:
- 7c92120eccint3
- 0:001>daebp
- 00c1fff4""
- 0:001>da
- 00c1fff5""
- </SPAN>
这个用来查ASCII字符串好像不错哦,但是应该注意到,这个打印只有ASCII码,没有字节数显示
db:字节值和ASCII字符每个显示行都包含该行第一个字节的地址,后面跟16进制字节值。这些字节值后面会紧跟它们对应的ASCII值。第8和第9个16进制值之间会用连字号(-)分隔。所有不可打印字符,如回车和换行都被显示为点号(.)。
默认的显示个数为128字节。
这个就不写例子了,第一个d给出的就是db的例子
dc:双字值(4字节)和ASCII字符。每个显示行都会显示行中第一个数据的地址,并且每行最多显示8个16进制值以及它们对应的ASCII字符。默认的显示数量为32个DWORD(128字节)。
dd:双字值(4字节) 默认的显示数量为32个DWORD(128字节)。
这两个比对着给个例子:
0:001>dceip
- 7c92120eff8bc3ccff8bc3cc0424448b0004c2cc.........D$.....
- 7c92121e0018a16457c300000c247c8b0824548bd......W.|$..T$.
- 7c92122e000002c77a89000074ff0b04ffc9831e.......z...t....
- 7c92123eaef2c033f981d1f70000ffffffb905763...........v...
- 7c92124e660000ff49024a895f0a8966570008c2...f.J.If.._...W
- 7c92125e0c247c8b0824548b000002c77a890000.|$..T$........z
- 7c92126e74ff0b04ffc9831eaef2c033f981d1f7...t....3.......
- 7c92127e0000ffffffb90576660000ff49024a89....v......f.J.I
- 0:001>ddeip
- 7c92120eff8bc3ccff8bc3cc0424448b0004c2cc
- 7c92121e0018a16457c300000c247c8b0824548b
- 7c92122e000002c77a89000074ff0b04ffc9831e
- 7c92123eaef2c033f981d1f70000ffffffb90576
- 7c92124e660000ff49024a895f0a8966570008c2
- 7c92125e0c247c8b0824548b000002c77a890000
- 7c92126e74ff0b04ffc9831eaef2c033f981d1f7
- 7c92127e0000ffffffb90576660000ff49024a89
我们可以发现dd相对来说,少了右边的Asii码字符,所以推荐用dc,不过dd好记,和debug运用相同嘛.
dq:四字值(Quad-word values) (8 bytes)。默认显示数量为16个四字 (128 字节)。
dw:WORD值(2字节)。 每个显示行都会显示行中第一个数据的地址,并且每行最多显示8个16进制值。默认显示数量为64个WORD(128字节)。
dW:WORD值(2字节)和ASCII字符。每个显示行都会显示行中第一个数据的地址,并且每行最多显示8个16进制值。默认显示数量为64个WORD(128字节)。
0:001>ddeip
- 7c92120eff8bc3ccff8bc3cc0424448b0004c2cc
- 7c92121e0018a16457c300000c247c8b0824548b
- 7c92122e000002c77a89000074ff0b04ffc9831e
- 7c92123eaef2c033f981d1f70000ffffffb90576
- 7c92124e660000ff49024a895f0a8966570008c2
- 7c92125e0c247c8b0824548b000002c77a890000
- 7c92126e74ff0b04ffc9831eaef2c033f981d1f7
- 7c92127e0000ffffffb90576660000ff49024a89
- 0:001>dweip
- 7c92120ec3ccff8bc3ccff8b448b0424c2cc0004
- 7c92121ea1640018000057c37c8b0c24548b0824
- 7c92122e02c7000000007a890b0474ff831effc9
- 7c92123ec033aef2d1f7f981ffff00000576ffb9
- 7c92124e00ff66004a89490289665f0a08c25700
- 7c92125e7c8b0c24548b082402c7000000007a89
- 7c92126e0b0474ff831effc9c033aef2d1f7f981
- 7c92127effff00000576ffb900ff66004a894902
- 0:001>dWeip
- 7c92120ec3ccff8bc3ccff8b448b0424c2cc0004.........D$.....
- 7c92121ea1640018000057c37c8b0c24548b0824d......W.|$..T$.
- 7c92122e02c7000000007a890b0474ff831effc9.......z...t....
- 7c92123ec033aef2d1f7f981ffff00000576ffb93...........v...
- 7c92124e00ff66004a89490289665f0a08c25700...f.J.If.._...W
- 7c92125e7c8b0c24548b082402c7000000007a89.|$..T$........z
- 7c92126e0b0474ff831effc9c033aef2d1f7f981...t....3.......
- 7c92127effff00000576ffb900ff66004a894902....v......f.J.I</SPAN>
dD:双精度浮点数(8字节) 默认的显示数量是15个数字(120字节)。
df:单精度浮点数(4字节) 默认的显示数量是16个数字(64字节)。
dp:指针大小的值。该命令根据目标机的处理器是32位还是64位的,分别等于dd 或dq。默认显示数量为32个DWORD或者16个四字(quad-word) (128 字节)。
du:Unicode字符 。每行最多显示48个字符。显示一直继续直到遇到第一个null字节或者到达range 值指定的所有字符都已经显示。所有不可打印字符,如回车和换行都被显示为点号(.)。
dyb:二进制值和字节的值。默认显示数量为32字节。
dyd:二进制值和双字值(4字节)。默认显示数量为8个DWORD(32字节)。
0:001>dDeip
- 7c92120e-2.43714230651e+3066.62088185061e-3095.84873529654e+114
- 7c9212261.92413942387e-2691.81520618711e+282-3.58305289924e+307
- 7c92123e-1.97432319055e+277-1.75705767106e+3075.09883096248e+043
- 7c9212561.20502524006e+1111.92413942387e-2691.81520618711e+282
- 7c92126e-3.58305289924e+307-1.97432319055e+277-1.75705767106e+307
- 0:001>dfeip
- 7c92120e-1.#QNAN-1.#QNAN1.9309581e-0364.3722194e-040
- 7c92121e2.261948e-0394.2880953e+0141.2671579e-0314.9451335e-034
- 7c92122e9.9632321e-0433.5567233e+0351.6165272e+032-1.#QNAN
- 7c92123e-1.1039027e-010-8.4258111e+0349.1834095e-041-1.#QNAN
- 0:001>dpeip
- 7c92120eff8bc3ccff8bc3cc0424448b0004c2cc
- 7c92121e0018a16457c300000c247c8b0824548b
- 7c92122e000002c77a89000074ff0b04ffc9831e
- 7c92123eaef2c033f981d1f70000ffffffb90576
- 7c92124e660000ff49024a895f0a8966570008c2
- 7c92125e0c247c8b0824548b000002c77a890000
- 7c92126e74ff0b04ffc9831eaef2c033f981d1f7
- 7c92127e0000ffffffb90576660000ff49024a89
- 0:001>dueip
- 7c92120e"쏌ヒ쏌ヒ䒋Ф싌.ꅤ."
- 0:001>dybeip
- 76543210765432107654321076543210
- --------------------------------
- 7c92120e11001100110000111000101111111111ccc38bff
- 7c92121211001100110000111000101111111111ccc38bff
- 7c921216100010110100010000100100000001008b442404
- 7c92121a11001100110000100000010000000000ccc20400
- 7c92121e0110010010100001000110000000000064a11800
- 7c921222000000000000000011000011010101110000c357
- 7c921226100010110111110000100100000011008b7c240c
- 7c92122a100010110101010000100100000010008b542408
- 0:001>dydeip
- 3210
- 10987654321098765432109876543210
- --------------------------------
- 7c92120e11111111100010111100001111001100ff8bc3cc
- 7c92121211111111100010111100001111001100ff8bc3cc
- 7c921216000001000010010001000100100010110424448b
- 7c92121a000000000000010011000010110011000004c2cc
- 7c92121e000000000001100010100001011001000018a164
- 7c9212220101011111000011000000000000000057c30000
- 7c921226000011000010010001111100100010110c247c8b
- 7c92122a000010000010010001010100100010110824548b</STRONG></SPAN>
个人觉得最难记的就是,db-dd-dw,但是dW是dw的扩展,dD却不是dd的扩充,而是双精度显示,dc才是dd的扩充,我靠,晕了。还是要在线查查文档啊。