WinDbg 디버깅2007. 9. 23. 02:19
반응형

dt (Display Type)

타입을 보여주는 명령인데 주로 구조체 타입을 확인할 때 사용합니다.

이 명령 역시 WinDbg Help 에는 무지 다양하고 복잡한 옵션들이 있습니다.
하지만 제가 주로 사용하는 구조체 확인에 대한 내용만 다루도록 하겠습니다.

1) dt 구조체타입이름
- 구조체의 멤버 필드를 확인합니다.

kd> dt _IO_STACK_LOCATION
   +0x000 MajorFunction    : UChar
   +0x001 MinorFunction    : UChar
   +0x002 Flags            : UChar
   +0x003 Control          : UChar
   +0x004 Parameters       : __unnamed
   +0x014 DeviceObject     : Ptr32 _DEVICE_OBJECT
   +0x018 FileObject       : Ptr32 _FILE_OBJECT
   +0x01c CompletionRoutine : Ptr32   
   +0x020 Context          : Ptr32 Void

구조체타입이름은 다음과 같이 선언된 구조체의 경우 맨 앞에 선언한 구조체 이름을 사용합니다.

typedef struct _IO_STACK_LOCATION {
    ...
} IO_STACK_LOCATION, *PIO_STACK_LOCATION;

2) dt 구조체타입이름 구조체주소
- 구조체의 멤버 필드와 실제 내용을 확인합니다.

kd> dt _IO_STACK_LOCATION 816441c0
   +0x000 MajorFunction    : 0xe ''
   +0x001 MinorFunction    : 0 ''
   +0x002 Flags            : 0x1 ''
   +0x003 Control          : 0 ''
   +0x004 Parameters       : __unnamed
   +0x014 DeviceObject     : 0x815d2030 _DEVICE_OBJECT
   +0x018 FileObject       : 0x8166b288 _FILE_OBJECT
   +0x01c CompletionRoutine : (null)
   +0x020 Context          : (null)

3) dt 구조체타입이름 멤버필드이름 [구조체주소]
- 구조체에서 특정한 멤버필드만 확인합니다.

kd> dt _IO_STACK_LOCATION MajorFunction
   +0x000 MajorFunction : UChar

kd> dt _IO_STACK_LOCATION MajorFunction 816441c0
   +0x000 MajorFunction : 0xe ''

4) dt -r 구조체타입이름 [구조체주소]
- 구조체의 멤버필드중 구조체가 있으면 펼쳐서 보여줍니다.

kd> dt -r _IO_STACK_LOCATION 816441c0
   +0x000 MajorFunction    : 0xe ''
   +0x001 MinorFunction    : 0 ''
   +0x002 Flags            : 0x1 ''
   +0x003 Control          : 0 ''
   +0x004 Parameters       : __unnamed
      +0x000 Create           : __unnamed
         +0x000 SecurityContext  : (null)
         +0x004 Options          : 0
         +0x008 FileAttributes   : 0x18
         +0x00a ShareAccess      : 0x22
         +0x00c EaLength         : 0
      +0x000 CreatePipe       : __unnamed
         +0x000 SecurityContext  : (null)
         +0x004 Options          : 0
      ...

5) dt -r[숫자] 구조체타입이름 [구조체주소]
- 구조체의 멤버필드중 구조체가 있으면 숫자만큼만 펼쳐서 보여줍니다.

kd> dt -r1 _IO_STACK_LOCATION 816441c0
   +0x000 MajorFunction    : 0xe ''
   +0x001 MinorFunction    : 0 ''
   +0x002 Flags            : 0x1 ''
   +0x003 Control          : 0 ''
   +0x004 Parameters       : __unnamed
      +0x000 Create           : __unnamed
      +0x000 CreatePipe       : __unnamed
   ...

6) dt 변수이름
- 심볼이 맞춰져 있다면 변수이름에 해당하는 타입과 정보를 보여줍니다.

kd> dt pIrpStack
Local var @ 0xf9c8bc30 Type _IO_STACK_LOCATION*
0x816441c0
   +0x000 MajorFunction    : 0xe ''
   +0x001 MinorFunction    : 0 ''
   +0x002 Flags            : 0x1 ''
   +0x003 Control          : 0 ''
   +0x004 Parameters       : __unnamed
   +0x014 DeviceObject     : 0x815d2030 _DEVICE_OBJECT
   +0x018 FileObject       : 0x8166b288 _FILE_OBJECT
   +0x01c CompletionRoutine : (null)
   +0x020 Context          : (null)

http://www.driveronline.org/bbs/view.asp?tb=tipbbs&GotoPage=4&s_bulu=&s_key=&no=56

반응형
Posted by GreeMate