흔히들 Windows 운영체제 내부구조를 살펴보거나 자신이 개발중인 커널 드라이버를 디버깅 할때, VMWare나 VirtualBox등의 가상 환경에 테스트 운영체제를 띄운 후, WinDbg로 파이프 연결해서 커널 디버깅을 하곤 합니다.

이때, 디버깅 속도는 그래도 나름 빠른 정도이긴 하지만, 가끔 속터질때가 있었을겁니다.


이번에 소개하는 플러그인은 VMWare와 WinDbg를 연동한 Windows 운영체제의 디버깅을 수행할 때, 심지어 올리디버그의 Trace보다 훨씬 빠른 초강력 스피드를 내게 해주는 WinDbg Extension 입니다.



출처 : http://virtualkd.sysprogs.org/





설치 방법 (이하 방법은 VMWare를 기준으로 합니다.)



0. 먼저 VirtualKD를 다운로드 받는다. (http://virtualkd.sysprogs.org/download/VirtualKD-2.8.exe)


1. VMWare에서 자신이 디버깅하고자 하는 OS를 실행시킨다. 

    (가상머신의 하드웨어 구성에서 커널 디버깅을 위한 COM포트 등을 따로 추가할 필요 없음)


2. 다운로드 받은 VirtualKD의 압축을 풀고 target 폴더안에 존재하는 "vminstall.exe" 를 가상머신으로 옮긴다.


3. 가상머신 내부에서 vminstall.exe 을 실행한다.




4. 위 스샷과 같이 Create a new boot entry 를 선택하고 Install을 누른다. 기타 체크박스 옵션들은 본인의 취향에 맞게 선택한다.


5. 설치가 끝나면 재부팅 하겠냐는 메시지가 뜨는데, 잠시 보류하고 다운로드 받은 VirtualKD를 실행하기 위해서 vmmon.exe (64비트는 vmmon64.exe) 를 실행한다.




6. Debugger Path... 를 클릭해서 WinDbg의 실행파일 경로를 지정해준다.


7. VM List에서 본인이 연결하고자 하는 VM을 선택해주고 (이때 VM의 pipe name이 vmmon에 떠있어야 함) 

    Run debugger를 눌러서 WinDbg를 띄워준다.


8. WinDbg는 Pipe를 기다리는 상태가 되고, 5에서 보류했었던 메시지를 Yes 눌러서 가상머신을 재부팅 한다.


9. 이후에 뜨는 Boot Entry에서 VirtualKD 엔트리를 선택하여 부팅한다.




위 스샷과 같이 vmmon화면에서 OS와 debugger 항목이 yes로 나오면 정상적으로 연결된 것입니다.

DbgBreakPoint() on start에 체크가 되어져 있는 경우, 위 화면과 같이 KiSystemStartup에서 KdInitSystem을 호출하게 되고,

KdInitSystem 내부에서 BP가 걸리게 됩니다. 극초반에 BP가 걸리기 때문에 Windows OS의 부트 프로세스를 파악할때는 좋은 옵션이 될것 같습니다.



VirtualKD를 이용할 경우,  무슨 60FPS 게임 조작하듯이 엄청난 응답성을 보장받게 되니, 디버깅할때 훨씬 수월해집니다.

이것도 러시아 사람이 만든것 같은데, 머리 좋은 사람이 참 많은듯..

저작자 표시 비영리 변경 금지
신고
by Sone 2013.05.25 04:42