[Tip] OS X에서 Windbg를 이용한 Windows Kernel Debugging

[Tip] OS X에서 Windbg를 이용한 Windows Kernel Debugging


맥북을 사용중이므로... windows kernel debugging하는 것에 많은 생각을 해보았습니다...
가상windows안에 vmware를 설치해서 그안에서 또 windows를 불러올까... 했는데
지인의 도움으로 가상windows를 2개 만들어서 디버깅이 가능하다는 것을 알게 되고!
하나는 서버로 하나는 클라이언트로 만들어서 커널 디버깅이 가능했습니다 


1. 작업 환경

운영체제 : OS X 10.8.2
Parallels : build 8.0.18101
Windows :

Windows XP SP3 x86
Windows 7 x64

일단 Windows를 kernel debugging하기 위해서 윈도우를 2개 준비합니다.


저는 "Windows 7_64"을 클라이언트, 즉 Kernel Debugging을 할 대상으로 사용합니다.
"Windows XP SP3 x86"에 Windbg를 설치해서 디버깅을 합니다. 

그렇다면 클라이언트(Windows 7)를 설정해보겠습니다. 아주 간단!!

2. 가상 머신 셋팅하기

클라이언트 설정

[ * ] 가상 컴퓨터 -> 구성 -> 장치 추가 -> 시리얼 포트 -> 원본 : 새 소캣 -> "/tmp/com_1" 입력 -> 모드 : 클라이언트 -> 연결 check!

클라이언트의 구성을 맞췄으니 이제 서버(Windows XP)를 구성해보겠습니다.

서버 설정

[ * ] 가상 컴퓨터 -> 구성 -> 장치 추가 -> 시리얼 포트 -> 원본 : 새 소캣 -> "/tmp/com_1" 입력 -> 모드 : 서버 -> 연결 check!

여기서 중요한 점이 있습니다.
시리얼 포트를 서버와 클라이언트로 설정해 두었기 때문에, 클라이언트를 실행하기 전에 서버를 부팅해놔야지 클라이언트의 포트가 연결됩니다. 서버를 부팅안하고, 클라이언트를 부팅하게 되면

이런 오류를... 보실 수 있으실 겁니다.... 클라이언트를 부팅하기 전에 꼭! 서버를 먼저 부팅하세요~

3. 서버와 클라이언트 Debugging 셋팅하기


이제 클라이언트의 부팅 옵션만 바꿔주면 간단하게 구성이 끝납니다. 여기서 주의할 점은, 클라이언트의 OS마다 설정 방법이 다 다릅니다. 저의 경우 Windows7을 사용하였구요, Windows XP를 클라이언트로 사용한다면 Windows XP로 설정 방법을 검색하시면 많이 나올 겁니다. 

클라이언트 설정


일단 클라이언트(Windows 7)을 부팅하구요~
[ * ] 시작 -> msconfig -> 부팅 -> 고급 옵션(V)... -> 디버그 Check! -> 디버그 포트(E) Check! (COM1) -> 전송 속도 Check! (115200) -> 확인 -> 확인


이제 클라이언트의 설정은 모두 끝났습니다. 이제 서버에서 windbg를 설정해서 정말로 kernel debugging이 가능한지! 확인을 해봅시당

서버 설정

일단 서버에 Windbg를 설치하시구요. 
Windbg -> file -> Kernel Debug... -> Baud Rate: "115200" -> Port: "com1" -> 확인!

클라이언트에서 설정했던 값과 똑같이 맞춰줍니다. 클라이언트에서 사용했던 값이나 서버에서 사용했던 값이나 둘다 디폴트로 맞춰져있기 때문에 틀릴 일은 없을 거에요.
확인 버튼 까지 누른다면 windbg가 디버깅을 하기 위해 대기중인 상태가 됩니다.

딱 봐도 아시다 시피 시리얼 포트로 신호가 오기 전까지 기다리고 있다는 것이죠.

디버깅 시작!

서버도 설정을 맞췄으니, 이제 클라이언트를 부팅을 한다면, 클라이언트에서 서버로 시리얼 포트로 신호가 가서 커널 디버깅이 가능해집니다.


신호가 아주 빠르게 잘됩니다. 가상 머신 2개를 이용해서 디버깅을 하는 거라 속도가 느릴 줄 알았는데, 아주 느린 정도는 아니라서 다행입니다.
추가로 커널 디버깅을 할 때 Windows의 심볼을 가지고 오는 게 정신 건강에 이로울 겁니다....
그거에 관한 것은 많은 블로그에서 설명하고 있고, 이번 글에서 정리할 필요가 없기 때문에 전 패쓰~ 하겠습니다

참고했던 사이트 : http://vcsjones.com/2012/04/17/kernel-debugging-with-parallels/

댓글