windbg调试命令9(dt、d)

dt命令显示局部变量、全局变量或数据类型的信息。它也可以仅显示数据类型。即结构和联合(union)的信息。

 0: kd> dt _PEB  

  1. nt!_PEB  
  2.    +0x000 InheritedAddressSpace : UChar  
  3.    +0x001 ReadImageFileExecOptions : UChar  
  4.    +0x002 BeingDebugged    : UChar  
  5.    +0x003 SpareBool        : UChar  
  6.    +0x004 Mutant           : Ptr32 Void  
  7.    +0x008 ImageBaseAddress : Ptr32 Void  
  8.    +0x00c Ldr              : Ptr32 _PEB_LDR_DATA  
  9.    +0x010 ProcessParameters : Ptr32 _RTL_USER_PROCESS_PARAMETERS  
  10. [...]  

 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*命令,ddb 的效果相同。

注意d重复前一个以d开头的命令。包括ddaddpddudpadppdpudqadqpdquddsdpsdqsdsdSdgdldtdv,以及本页中的显示命令。如果在d之后的参数不适当,可能会产生错误。

0:001> d  
  1. 7c92120e  cc c3 8b ff cc c3 8b ff-8b 44 24 04 cc c2 04 00  .........D$.....  
  2. 7c92121e  64 a1 18 00 00 00 c3 57-8b 7c 24 0c 8b 54 24 08  d......W.|$..T$.  
  3. 7c92122e  c7 02 00 00 00 00 89 7a-04 0b ff 74 1e 83 c9 ff  .......z...t....  
  4. 7c92123e  33 c0 f2 ae f7 d1 81 f9-ff ff 00 00 76 05 b9 ff  3...........v...  
  5. 7c92124e  ff 00 00 66 89 4a 02 49-66 89 0a 5f c2 08 00 57  ...f.J.If.._...W  
  6. 7c92125e  8b 7c 24 0c 8b 54 24 08-c7 02 00 00 00 00 89 7a  .|$..T$........z  
  7. 7c92126e  04 0b ff 74 1e 83 c9 ff-33 c0 f2 ae f7 d1 81 f9  ...t....3.......  
  8. 7c92127e  ff ff 00 00 76 05 b9 ff-ff 00 00 66 89 4a 02 49  ....v......f.J.I  
  9. 0:001> d  
  10. 7c92128e  66 89 0a 5f c2 08 00 57-8b 7c 24 0c 8b 54 24 08  f.._...W.|$..T$.  
  11. 7c92129e  c7 02 00 00 00 00 89 7a-04 0b ff 74 22 83 c9 ff  .......z...t"...  
  12. 7c9212ae  33 c0 66 f2 af f7 d1 d1-e1 81 f9 fe ff 00 00 76  3.f............v  
  13. 7c9212be  05 b9 fe ff 00 00 66 89-4a 02 49 49 66 89 0a 5f  ......f.J.IIf.._  
  14. 7c9212ce  c2 08 00 83 ec 0c dd 14-24 e8 bf cf 00 00 e8 0d  ........$.......  
  15. 7c9212de  00 00 00 83 c4 0c c3 8d-54 24 04 e8 6a cf 00 00  ........T$..j...  
  16. 7c9212ee  52 9b d9 3c 24 74 50 66-81 3c 24 7f 02 74 06 d9  R..<$tPf.<$..t..  
  17. 7c9212fe  2d 5c e7 92 7c d9 fe 9b-df e0 9e 7a 1d 83 3d ac  -\..|......z..=.  

我们可以看出第二个d显示的地址是前面的地址的延续

da:ASCII 字符每行最多48个字符。显示一直继续直到遇到第一个null字节或者到达range 值指定的所有字符都已经显示。所有不可打印字符,如回车和换行都被显示为点号(.)。

0:001> r  
  1. eax=00000009 ebx=00000001 ecx=00000002 edx=00000003 esi=00000004 edi=00000005  
  2. eip=7c92120e esp=00c1ffcc ebp=00c1fff4 iopl=0         nv up ei pl zr na pe nc  
  3. cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00000246  
  4. ntdll!DbgBreakPoint:  
  5. 7c92120e cc              int     3  
  6. 0:001> da ebp  
  7. 00c1fff4  ""  
  8. 0:001> da  
  9. 00c1fff5  ""  
  10. </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> dc eip  
  1. 7c92120e  ff8bc3cc ff8bc3cc 0424448b 0004c2cc  .........D$.....  
  2. 7c92121e  0018a164 57c30000 0c247c8b 0824548b  d......W.|$..T$.  
  3. 7c92122e  000002c7 7a890000 74ff0b04 ffc9831e  .......z...t....  
  4. 7c92123e  aef2c033 f981d1f7 0000ffff ffb90576  3...........v...  
  5. 7c92124e  660000ff 49024a89 5f0a8966 570008c2  ...f.J.If.._...W  
  6. 7c92125e  0c247c8b 0824548b 000002c7 7a890000  .|$..T$........z  
  7. 7c92126e  74ff0b04 ffc9831e aef2c033 f981d1f7  ...t....3.......  
  8. 7c92127e  0000ffff ffb90576 660000ff 49024a89  ....v......f.J.I  
  9. 0:001> dd eip  
  10. 7c92120e  ff8bc3cc ff8bc3cc 0424448b 0004c2cc  
  11. 7c92121e  0018a164 57c30000 0c247c8b 0824548b  
  12. 7c92122e  000002c7 7a890000 74ff0b04 ffc9831e  
  13. 7c92123e  aef2c033 f981d1f7 0000ffff ffb90576  
  14. 7c92124e  660000ff 49024a89 5f0a8966 570008c2  
  15. 7c92125e  0c247c8b 0824548b 000002c7 7a890000  
  16. 7c92126e  74ff0b04 ffc9831e aef2c033 f981d1f7  
  17. 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字节)。

0:001> dd eip  
  1. 7c92120e  ff8bc3cc ff8bc3cc 0424448b 0004c2cc  
  2. 7c92121e  0018a164 57c30000 0c247c8b 0824548b  
  3. 7c92122e  000002c7 7a890000 74ff0b04 ffc9831e  
  4. 7c92123e  aef2c033 f981d1f7 0000ffff ffb90576  
  5. 7c92124e  660000ff 49024a89 5f0a8966 570008c2  
  6. 7c92125e  0c247c8b 0824548b 000002c7 7a890000  
  7. 7c92126e  74ff0b04 ffc9831e aef2c033 f981d1f7  
  8. 7c92127e  0000ffff ffb90576 660000ff 49024a89  
  9. 0:001> dw eip  
  10. 7c92120e  c3cc ff8b c3cc ff8b 448b 0424 c2cc 0004  
  11. 7c92121e  a164 0018 0000 57c3 7c8b 0c24 548b 0824  
  12. 7c92122e  02c7 0000 0000 7a89 0b04 74ff 831e ffc9  
  13. 7c92123e  c033 aef2 d1f7 f981 ffff 0000 0576 ffb9  
  14. 7c92124e  00ff 6600 4a89 4902 8966 5f0a 08c2 5700  
  15. 7c92125e  7c8b 0c24 548b 0824 02c7 0000 0000 7a89  
  16. 7c92126e  0b04 74ff 831e ffc9 c033 aef2 d1f7 f981  
  17. 7c92127e  ffff 0000 0576 ffb9 00ff 6600 4a89 4902  
  18. 0:001> dW eip  
  19. 7c92120e  c3cc ff8b c3cc ff8b 448b 0424 c2cc 0004  .........D$.....  
  20. 7c92121e  a164 0018 0000 57c3 7c8b 0c24 548b 0824  d......W.|$..T$.  
  21. 7c92122e  02c7 0000 0000 7a89 0b04 74ff 831e ffc9  .......z...t....  
  22. 7c92123e  c033 aef2 d1f7 f981 ffff 0000 0576 ffb9  3...........v...  
  23. 7c92124e  00ff 6600 4a89 4902 8966 5f0a 08c2 5700  ...f.J.If.._...W  
  24. 7c92125e  7c8b 0c24 548b 0824 02c7 0000 0000 7a89  .|$..T$........z  
  25. 7c92126e  0b04 74ff 831e ffc9 c033 aef2 d1f7 f981  ...t....3.......  
  26. 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位的,分别等于dddq。默认显示数量为32个DWORD或者16个四字(quad-word) (128 字节)。

du:Unicode字符 。每行最多显示48个字符。显示一直继续直到遇到第一个null字节或者到达range 值指定的所有字符都已经显示。所有不可打印字符,如回车和换行都被显示为点号(.)。

dyb:二进制值和字节的值。默认显示数量为32字节。

dyd:二进制值和双字值(4字节)。默认显示数量为8个DWORD(32字节)。

0:001> dD eip  

  1. 7c92120e     -2.43714230651e+306     6.62088185061e-309     5.84873529654e+114  
  2. 7c921226      1.92413942387e-269     1.81520618711e+282    -3.58305289924e+307  
  3. 7c92123e     -1.97432319055e+277    -1.75705767106e+307     5.09883096248e+043  
  4. 7c921256      1.20502524006e+111     1.92413942387e-269     1.81520618711e+282  
  5. 7c92126e     -3.58305289924e+307    -1.97432319055e+277    -1.75705767106e+307  
  6. 0:001> df eip  
  7. 7c92120e          -1.#QNAN         -1.#QNAN   1.9309581e-036   4.3722194e-040  
  8. 7c92121e     2.261948e-039   4.2880953e+014   1.2671579e-031   4.9451335e-034  
  9. 7c92122e    9.9632321e-043   3.5567233e+035   1.6165272e+032         -1.#QNAN  
  10. 7c92123e   -1.1039027e-010  -8.4258111e+034   9.1834095e-041         -1.#QNAN  
  11. 0:001> dp eip  
  12. 7c92120e  ff8bc3cc ff8bc3cc 0424448b 0004c2cc  
  13. 7c92121e  0018a164 57c30000 0c247c8b 0824548b  
  14. 7c92122e  000002c7 7a890000 74ff0b04 ffc9831e  
  15. 7c92123e  aef2c033 f981d1f7 0000ffff ffb90576  
  16. 7c92124e  660000ff 49024a89 5f0a8966 570008c2  
  17. 7c92125e  0c247c8b 0824548b 000002c7 7a890000  
  18. 7c92126e  74ff0b04 ffc9831e aef2c033 f981d1f7  
  19. 7c92127e  0000ffff ffb90576 660000ff 49024a89  
  20. 0:001> du eip  
  21. 7c92120e  "쏌ヒ쏌ヒ䒋Ф싌.ꅤ."  
  22. 0:001> dyb eip  
  23.           76543210 76543210 76543210 76543210  
  24.           -------- -------- -------- --------  
  25. 7c92120e  11001100 11000011 10001011 11111111  cc c3 8b ff  
  26. 7c921212  11001100 11000011 10001011 11111111  cc c3 8b ff  
  27. 7c921216  10001011 01000100 00100100 00000100  8b 44 24 04  
  28. 7c92121a  11001100 11000010 00000100 00000000  cc c2 04 00  
  29. 7c92121e  01100100 10100001 00011000 00000000  64 a1 18 00  
  30. 7c921222  00000000 00000000 11000011 01010111  00 00 c3 57  
  31. 7c921226  10001011 01111100 00100100 00001100  8b 7c 24 0c  
  32. 7c92122a  10001011 01010100 00100100 00001000  8b 54 24 08  
  33. 0:001> dyd eip  
  34.            3          2          1          0  
  35.           10987654 32109876 54321098 76543210  
  36.           -------- -------- -------- --------  
  37. 7c92120e  11111111 10001011 11000011 11001100  ff8bc3cc  
  38. 7c921212  11111111 10001011 11000011 11001100  ff8bc3cc  
  39. 7c921216  00000100 00100100 01000100 10001011  0424448b  
  40. 7c92121a  00000000 00000100 11000010 11001100  0004c2cc  
  41. 7c92121e  00000000 00011000 10100001 01100100  0018a164  
  42. 7c921222  01010111 11000011 00000000 00000000  57c30000  
  43. 7c921226  00001100 00100100 01111100 10001011  0c247c8b  
  44. 7c92122a  00001000 00100100 01010100 10001011  0824548b</STRONG></SPAN>  

个人觉得最难记的就是,db-dd-dw,但是dW是dw的扩展,dD却不是dd的扩充,而是双精度显示,dc才是dd的扩充,我靠,晕了。还是要在线查查文档啊。

 

posted on 2012-12-24 10:38  紫 陌  阅读(11023)  评论(1编辑  收藏  举报

导航