WinDbg로 커널디버깅 중 다음과 같은 오류가 발생합니다. 

pdb를 reload시켜도 똑같습니다.

가끔가다 제대로 동작할때도 있지만.. 안될 때가 더 많습니다. ㅡ.ㅡ


kd> !object \objecttypes

Object objecttypes not found


kd> !object \

Could not read ObjectType address

kd> !handle

processor number 0, process 83dc2ab0

PROCESS 83dc2ab0  SessionId: none  Cid: 0004    Peb: 00000000  ParentCid: 0000

    DirBase: 00185000  ObjectTable: 85601c50  HandleCount: 466.

    Image: System


Handle table at 9c47c000 with 828 Entries in use

0004: Object: 83dc2ab0  GrantedAccess: 001fffff Entry: 85603008

Could not read ObjectType address


0008: Object: 856404d8  GrantedAccess: 0002001f Entry: 85603010

Could not read ObjectType address



위의 명령들을 입력했을 때 원래는 다음과 같이 되어야 하죠. ^^

kd> !object \

Object: 85607f58  Type: (83dbc6d8) Directory

    ObjectHeader: 85607f40 (new version)

    HandleCount: 0  PointerCount: 42

    Directory Object: 00000000  Name: \


    Hash Address  Type          Name

    ---- -------  ----          ----

     00  8560e1d8 Directory     ArcName

         8956a640 Device        Ntfs

     01  8e7826f0 ALPC Port     SeLsaCommandPort

         8e617458 Event         UniqueInteractiveSessionIdEvent

     03  8560d0b0 Key           \REGISTRY

     04  83de59d0 ALPC Port     PowerPort

     05  85b196e8 ALPC Port     ThemeApiPort

     09  8564c1d8 Directory     NLS

     10  85608db0 SymbolicLink  DosDevices

     12  85b7f328 ALPC Port     UxSmsApiPort

     13  89d918c0 ALPC Port     SeRmCommandPort

     14  8e640d68 Event         LanmanServerAnnounceEvent

         8b016de0 SymbolicLink  Dfs

         85658550 Directory     UMDFCommunicationPorts

     16  8565de88 Directory     Driver

     18  895b6690 Device        clfs

     19  8560e100 Directory     Device

     20  8b06d328 Directory     Windows

         85b26580 ALPC Port     MmcssApiPort

         89fe68d0 Event         CsrSbSyncEvent

     21  85a3e960 Event         SAM_SERVICE_STARTED

(이하 생략...)


인터넷을 찾아보면 여러가지 이야기가 있습니다.. WinDbg를 최신으로 다시 깔았더니 되더란 얘기도 있고...


저의 경우엔... Debugger PC (Host PC)는 x64, Debuggee PC (Target PC)는 x86 VMWARE인 상황이었는데요...

WinDbg가 x64버젼이었을때만 문제가 발생하는 것을 확인했습니다.

WinDbg x86 버젼을 깔아서 해보니 잘 되더군요.

결론은... 

Live Kernel Debugging 시, WinDbg 버젼(x86용? x64용?)은 Host PC가 아닌 TargetPC의 플랫폼과 일치시켜야 한다.

정도로 요약할 수 있겠습니다. ^^


MSDN에서 WinDbg 사용시 x64 / x86 버젼 중 어느 것을 선택할 것인지를 설명하는 글을 살펴보면... 다음과 같은 부분이 있습니다. (http://msdn.microsoft.com/en-us/library/windows/hardware/ff539099(v=VS.85).aspx)

Choosing the 32-Bit or 64-Bit Debugging Tools

(중간 생략...)
  • If you are analyzing a dump file, you can use either the 32-bit debugging tools or the 64-bit debugging tools. (It is not important whether the dump file is a user-mode dump file or a kernel-mode dump file, and it is not important whether the dump file was made on an x86-based or an x64-based platform.)

  • If you are performing live kernel-mode debugging, you can use either the 32-bit debugging tools or the x64 debugging tools. (This situation applies to both x86-based and x64-based targets.)

  • If you are debugging live user-mode code that is running on the same computer as the debugger, use the 64-bit tools for debugging 64-bit code and 32-bit code running on WOW64. To set the debugger for 32-bit or 64-bit mode, use the .effmach command.

  • If you are debugging live 32-bit user-mode code that is running on a separate target computer, use the 32-bit debugging tools.


붉은색 부분을 보면 "라이브 커널 디버깅" 시에는 32bit Debugging Tools를 사용하든 x64 Debugging Tools를 사용하든 별 문제가 없다고 설명하고 있습니다. (타겟 시스템이 x86이든 x64든...) 단지, Remote PC에서 32bit 프로세스를 유저모드 라이브디버깅하는 경우에만 32비트 Debugging Tools를 사용해야 한다고 되어 있죠. 

하지만... 제가 경험한 이 상황은... 상관이 있어보이네요. ^^



Posted by kuaaan
,


사랑합니다. 편안히 잠드소서