윈도우즈 커널 디버깅을 하다보면 이것저것 번거로운 경우가 많습니다. 일반적으로 VMWare를 이용하여 pipe를 통해 시리얼포트를 설정하여 WinDBG를 연결하게 되는데요. 여러 버젼의 윈도우를 설치하는 경우에는 또 다시 각각의 가상머신마다 설정을 해줘야합니다. 게다가 가상이지만 시리얼포트를 이용하기 때문에 속도가 115,200 bps로 제한이 되어있어 답답해 속 터질정도로 느립니다.
제가 이번에 소개드릴 프로그램은 제목을 보시면 아시겠지만, 가상머신을 통해 커널 디버깅을 수행하는 경우 빠른 속도로 디버깅을 할 수 있도록 도와주는 프로그램인 VirtualKD입니다. 게다가 디버거와 디버기의 설정도 자동으로 이루어지기 때문에 상당히 편리하다는 장점을 가지고 있습니다.
프로그램을 다운로드를 받고 압축을 해제하면 여러개의 폴더와 파일이 보이는데요, 이 중 필요한 것은 vmmon.exe(vmmon64.exe)와 target 폴더입니다.
압축 해제된 VirtualKD |
사용법은 굉장히 간단합니다. 우선 디버기(게스트 PC)에 target 폴더를 복사하고 vminstall.exe를 실행합니다. 실행하고나면 두 가지 옵션을 선택할 수 있는 다이얼로그 박스가 뜨는데, 첫 번째 옵션은 부팅 시 커널 디버깅을 수행할 수 있는 새로운 부트엔트리를 작성하는 것이고, 두 번째 옵션은 현재 부트엔트리에 덮어쓰는 것입니다. 저는 개인적으로 첫 번째 옵션을 추천합니다.
vminstall.exe |
원하시는 옵션을 선택한 후, Install 버튼을 누르면 부트엔트리가 작성이 되고 재부팅을 하시면 아래의 선택화면을 보실 수 있습니다. [VirtualKD]라 붙은 것을 선택하시면 VirtualKD를 통한 커널 디버깅을 수행하실 수 있습니다.
다음은 디버거(호스트 PC)에서 해주셔야 할 부분입니다. 매우 간단합니다. 그냥 vmmon.exe를 실행시키시고 Debugger Path만 설정해주시면 끝입니다. 이후부터는 원하는 가상머신을 선택한 후 Run Debugger 버튼을 누르면 WinDBG가 실행되면서 커널 디버깅을 수행하실 수 있습니다.
Tip : 커널 디버깅을 하는 경우에는 VirtualKD가 편리합니다만, 유저모드 디버깅을 하기위해 WinDBG를 실행하면 심볼경로가 리셋이 되어 있습니다. 이때는 단축아이콘에 다음과 같은 옵션을 넣고 실행하면 됩니다.
C:\WinDDK\7600.16385.0\Debuggers\windbg.exe -y "srv*C:\WebSymbols*http://msdl.microsoft.com/download/symbols"