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를 사용해야 한다고 되어 있죠.
하지만... 제가 경험한 이 상황은... 상관이 있어보이네요. ^^
'C++ > Debug' 카테고리의 다른 글
Debugging Tips (11) - 서비스(Service) 디버깅하기 (Vista 이후 OS) (2) | 2012.12.12 |
---|---|
CodeMachine Debugger Extension DLL (CMKD.dll) (2) | 2012.10.04 |
특정 프로세스 실행시 자동으로 Windbg Attach시키기 (2) | 2012.03.30 |
Debugging Tips (10) - 메모리 덤프 분석시 CallStack 수동으로 재구성하기 (6) | 2012.03.07 |
Windbg 에서 IAT 확인하는 방법 (0) | 2012.01.12 |