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的擴充,我靠,暈了。還是要在線查查文檔啊。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM