windbg调试命令9(dt、d)
dt命令显示局部变量、全局变量或数据类型的信息。它也可以仅显示数据类型。即结构和联合(union)的信息。
0: kd> dt _PEB
- nt!_PEB
- +0x000 InheritedAddressSpace : UChar
- +0x001 ReadImageFileExecOptions : UChar
- +0x002 BeingDebugged : UChar
- +0x003 SpareBool : UChar
- +0x004 Mutant : Ptr32 Void
- +0x008 ImageBaseAddress : Ptr32 Void
- +0x00c Ldr : Ptr32 _PEB_LDR_DATA
- +0x010 ProcessParameters : Ptr32 _RTL_USER_PROCESS_PARAMETERS
- [...]
dt查看特定地址的eprocess结构内容
- 0: kd> dt _EPROCESS 8055d0c0
- ntdll!_EPROCESS
- +0x000 Pcb : _KPROCESS
- [...]
- +0x160 PhysicalVadList : _LIST_ENTRY [ 0x8055d220 - 0x8055d220 ]
- +0x168 PageDirectoryPte : _HARDWARE_PTE_X86
- +0x168 Filler : 0
- +0x170 Session : (null)
- +0x174 ImageFileName : [16] "Idle"
- +0x184 JobLinks : _LIST_ENTRY [ 0x0 - 0x0 ]
- +0x18c LockedPagesList : (null)
- +0x190 ThreadListHead : _LIST_ENTRY [ 0x8055d250 - 0x8055d250 ]
- +0x198 SecurityPort : (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之后的参数不适当,可能会产生错误。
- 7c92120e cc c3 8b ff cc c3 8b ff-8b 44 24 04 cc c2 04 00 .........D$.....
- 7c92121e 64 a1 18 00 00 00 c3 57-8b 7c 24 0c 8b 54 24 08 d......W.|$..T$.
- 7c92122e c7 02 00 00 00 00 89 7a-04 0b ff 74 1e 83 c9 ff .......z...t....
- 7c92123e 33 c0 f2 ae f7 d1 81 f9-ff ff 00 00 76 05 b9 ff 3...........v...
- 7c92124e ff 00 00 66 89 4a 02 49-66 89 0a 5f c2 08 00 57 ...f.J.If.._...W
- 7c92125e 8b 7c 24 0c 8b 54 24 08-c7 02 00 00 00 00 89 7a .|$..T$........z
- 7c92126e 04 0b ff 74 1e 83 c9 ff-33 c0 f2 ae f7 d1 81 f9 ...t....3.......
- 7c92127e ff ff 00 00 76 05 b9 ff-ff 00 00 66 89 4a 02 49 ....v......f.J.I
- 0:001> d
- 7c92128e 66 89 0a 5f c2 08 00 57-8b 7c 24 0c 8b 54 24 08 f.._...W.|$..T$.
- 7c92129e c7 02 00 00 00 00 89 7a-04 0b ff 74 22 83 c9 ff .......z...t"...
- 7c9212ae 33 c0 66 f2 af f7 d1 d1-e1 81 f9 fe ff 00 00 76 3.f............v
- 7c9212be 05 b9 fe ff 00 00 66 89-4a 02 49 49 66 89 0a 5f ......f.J.IIf.._
- 7c9212ce c2 08 00 83 ec 0c dd 14-24 e8 bf cf 00 00 e8 0d ........$.......
- 7c9212de 00 00 00 83 c4 0c c3 8d-54 24 04 e8 6a cf 00 00 ........T$..j...
- 7c9212ee 52 9b d9 3c 24 74 50 66-81 3c 24 7f 02 74 06 d9 R..<$tPf.<$..t..
- 7c9212fe 2d 5c e7 92 7c d9 fe 9b-df e0 9e 7a 1d 83 3d ac -\..|......z..=.
我们可以看出第二个d显示的地址是前面的地址的延续
da:ASCII 字符每行最多48个字符。显示一直继续直到遇到第一个null字节或者到达range 值指定的所有字符都已经显示。所有不可打印字符,如回车和换行都被显示为点号(.)。
- eax=00000009 ebx=00000001 ecx=00000002 edx=00000003 esi=00000004 edi=00000005
- eip=7c92120e esp=00c1ffcc ebp=00c1fff4 iopl=0 nv up ei pl zr na pe nc
- cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246
- ntdll!DbgBreakPoint:
- 7c92120e cc int 3
- 0:001> da ebp
- 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字节)。
这两个比对着给个例子:
- 7c92120e ff8bc3cc ff8bc3cc 0424448b 0004c2cc .........D$.....
- 7c92121e 0018a164 57c30000 0c247c8b 0824548b d......W.|$..T$.
- 7c92122e 000002c7 7a890000 74ff0b04 ffc9831e .......z...t....
- 7c92123e aef2c033 f981d1f7 0000ffff ffb90576 3...........v...
- 7c92124e 660000ff 49024a89 5f0a8966 570008c2 ...f.J.If.._...W
- 7c92125e 0c247c8b 0824548b 000002c7 7a890000 .|$..T$........z
- 7c92126e 74ff0b04 ffc9831e aef2c033 f981d1f7 ...t....3.......
- 7c92127e 0000ffff ffb90576 660000ff 49024a89 ....v......f.J.I
- 0:001> dd eip
- 7c92120e ff8bc3cc ff8bc3cc 0424448b 0004c2cc
- 7c92121e 0018a164 57c30000 0c247c8b 0824548b
- 7c92122e 000002c7 7a890000 74ff0b04 ffc9831e
- 7c92123e aef2c033 f981d1f7 0000ffff ffb90576
- 7c92124e 660000ff 49024a89 5f0a8966 570008c2
- 7c92125e 0c247c8b 0824548b 000002c7 7a890000
- 7c92126e 74ff0b04 ffc9831e aef2c033 f981d1f7
- 7c92127e 0000ffff ffb90576 660000ff 49024a89
我们可以发现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字节)。
- 7c92120e ff8bc3cc ff8bc3cc 0424448b 0004c2cc
- 7c92121e 0018a164 57c30000 0c247c8b 0824548b
- 7c92122e 000002c7 7a890000 74ff0b04 ffc9831e
- 7c92123e aef2c033 f981d1f7 0000ffff ffb90576
- 7c92124e 660000ff 49024a89 5f0a8966 570008c2
- 7c92125e 0c247c8b 0824548b 000002c7 7a890000
- 7c92126e 74ff0b04 ffc9831e aef2c033 f981d1f7
- 7c92127e 0000ffff ffb90576 660000ff 49024a89
- 0:001> dw eip
- 7c92120e c3cc ff8b c3cc ff8b 448b 0424 c2cc 0004
- 7c92121e a164 0018 0000 57c3 7c8b 0c24 548b 0824
- 7c92122e 02c7 0000 0000 7a89 0b04 74ff 831e ffc9
- 7c92123e c033 aef2 d1f7 f981 ffff 0000 0576 ffb9
- 7c92124e 00ff 6600 4a89 4902 8966 5f0a 08c2 5700
- 7c92125e 7c8b 0c24 548b 0824 02c7 0000 0000 7a89
- 7c92126e 0b04 74ff 831e ffc9 c033 aef2 d1f7 f981
- 7c92127e ffff 0000 0576 ffb9 00ff 6600 4a89 4902
- 0:001> dW eip
- 7c92120e c3cc ff8b c3cc ff8b 448b 0424 c2cc 0004 .........D$.....
- 7c92121e a164 0018 0000 57c3 7c8b 0c24 548b 0824 d......W.|$..T$.
- 7c92122e 02c7 0000 0000 7a89 0b04 74ff 831e ffc9 .......z...t....
- 7c92123e c033 aef2 d1f7 f981 ffff 0000 0576 ffb9 3...........v...
- 7c92124e 00ff 6600 4a89 4902 8966 5f0a 08c2 5700 ...f.J.If.._...W
- 7c92125e 7c8b 0c24 548b 0824 02c7 0000 0000 7a89 .|$..T$........z
- 7c92126e 0b04 74ff 831e ffc9 c033 aef2 d1f7 f981 ...t....3.......
- 7c92127e ffff 0000 0576 ffb9 00ff 6600 4a89 4902 ....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> dD eip
- 7c92120e -2.43714230651e+306 6.62088185061e-309 5.84873529654e+114
- 7c921226 1.92413942387e-269 1.81520618711e+282 -3.58305289924e+307
- 7c92123e -1.97432319055e+277 -1.75705767106e+307 5.09883096248e+043
- 7c921256 1.20502524006e+111 1.92413942387e-269 1.81520618711e+282
- 7c92126e -3.58305289924e+307 -1.97432319055e+277 -1.75705767106e+307
- 0:001> df eip
- 7c92120e -1.#QNAN -1.#QNAN 1.9309581e-036 4.3722194e-040
- 7c92121e 2.261948e-039 4.2880953e+014 1.2671579e-031 4.9451335e-034
- 7c92122e 9.9632321e-043 3.5567233e+035 1.6165272e+032 -1.#QNAN
- 7c92123e -1.1039027e-010 -8.4258111e+034 9.1834095e-041 -1.#QNAN
- 0:001> dp eip
- 7c92120e ff8bc3cc ff8bc3cc 0424448b 0004c2cc
- 7c92121e 0018a164 57c30000 0c247c8b 0824548b
- 7c92122e 000002c7 7a890000 74ff0b04 ffc9831e
- 7c92123e aef2c033 f981d1f7 0000ffff ffb90576
- 7c92124e 660000ff 49024a89 5f0a8966 570008c2
- 7c92125e 0c247c8b 0824548b 000002c7 7a890000
- 7c92126e 74ff0b04 ffc9831e aef2c033 f981d1f7
- 7c92127e 0000ffff ffb90576 660000ff 49024a89
- 0:001> du eip
- 7c92120e "쏌ヒ쏌ヒ䒋Ф싌.ꅤ."
- 0:001> dyb eip
- 76543210 76543210 76543210 76543210
- -------- -------- -------- --------
- 7c92120e 11001100 11000011 10001011 11111111 cc c3 8b ff
- 7c921212 11001100 11000011 10001011 11111111 cc c3 8b ff
- 7c921216 10001011 01000100 00100100 00000100 8b 44 24 04
- 7c92121a 11001100 11000010 00000100 00000000 cc c2 04 00
- 7c92121e 01100100 10100001 00011000 00000000 64 a1 18 00
- 7c921222 00000000 00000000 11000011 01010111 00 00 c3 57
- 7c921226 10001011 01111100 00100100 00001100 8b 7c 24 0c
- 7c92122a 10001011 01010100 00100100 00001000 8b 54 24 08
- 0:001> dyd eip
- 3 2 1 0
- 10987654 32109876 54321098 76543210
- -------- -------- -------- --------
- 7c92120e 11111111 10001011 11000011 11001100 ff8bc3cc
- 7c921212 11111111 10001011 11000011 11001100 ff8bc3cc
- 7c921216 00000100 00100100 01000100 10001011 0424448b
- 7c92121a 00000000 00000100 11000010 11001100 0004c2cc
- 7c92121e 00000000 00011000 10100001 01100100 0018a164
- 7c921222 01010111 11000011 00000000 00000000 57c30000
- 7c921226 00001100 00100100 01111100 10001011 0c247c8b
- 7c92122a 00001000 00100100 01010100 10001011 0824548b</STRONG></SPAN>
个人觉得最难记的就是,db-dd-dw,但是dW是dw的扩展,dD却不是dd的扩充,而是双精度显示,dc才是dd的扩充,我靠,晕了。还是要在线查查文档啊。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步