[Windbg Command]dt 사용 팁

디버깅을 진행 하다 보면 특정 메모리의 tag는 확인하였으나 구조체를 알 수 없는 경우가 많이 있습니다. 이 때 dt 명령을 적절히 사용하면 손쉽게 원하는 정보를 얻을 수 있습니다.

먼저 process 정보를 확인해 본 후 fffffa8004952c10 가 어떤 구조체를 가지는지 확인해 보도록 하겠습니다.

lkd> !process 0 0 explorer.exe
PROCESS fffffa8004952c10
    SessionId: 1  Cid: 12dc    Peb: 7fffffdb000  ParentCid: 1248
    DirBase: a3fd9000  ObjectTable: fffff8800b1a30f0  HandleCount: 1003.
    Image: explorer.exe

 

!pool 명령을 사용해서 이 주소는 NonPagedPool 이고 Proc 즉 Process object 와 관련이 있다는 것을 알 수 있습니다.

lkd> !pool fffffa8004952c10 2
Pool page fffffa8004952c10 region is Nonpaged pool
*fffffa8004952bd0 size:  430 previous size:  130  (Allocated) *Proc (Protected)
        Pooltag Proc : Process objects, Binary : nt!ps

Process 와 관련이 있다는 것을 알았으므로 아래와 깉은 방법으로 어떤 구조체들이 존재하는지 확인해 볼 수 있습니다.

lkd> dt nt!_*proc*
          ntkrnlmp!_KPROCESSOR_STATE
          ntkrnlmp!_PROCESSOR_POWER_STATE
          ntkrnlmp!_KPROCESS
          ntkrnlmp!_EPROCESS
          ntkrnlmp!_EPROCESS_QUOTA_BLOCK
          ntkrnlmp!_WOW64_PROCESS
          ntkrnlmp!_SE_AUDIT_PROCESS_CREATION_INFO
          ntkrnlmp!_ALPC_PROCESS_CONTEXT
          ntkrnlmp!_WHEA_GENERIC_PROCESSOR_ERROR
          ntkrnlmp!_RTL_USER_PROCESS_PARAMETERS
          ntkrnlmp!_PROCESSOR_CACHE_TYPE
          ntkrnlmp!_WHEA_GENERIC_PROCESSOR_ERROR_VALIDBITS

 

감사합니다.