본문 바로가기

Enginius/C / C++

[윈도우] WinDBG를 이용한 VMware Window커널 디버깅

출처: http://core.ahnlab.com/137
 


오늘은 가상머신(Virtual Machine)인 VMware에 WinDBG를 붙여 커널 디버깅을 해보겠습니다!

WinDBG는 Microsoft사에서 제공하는 디버깅 tool로서 
http://www.microsoft.com/whdc/devtools/debugging/installx86.Mspx 에서 무료로 다운 받을 수 있습니다.

본격적인 작업에 앞서 디버거(debugger)의 종류에 대해 잠깐 살펴볼까요! ^^
디버거의 종류는 크게 유저모드(user mode) 디버거와 커널모드(kernel mode) 디버거로 나눌수 있습니다.
이해를 돕기 위해 인텔 아키텍쳐(Intel Architecture)로 설명드리겠습니다.


다들 이해되셨나요? 다시 한번 간단히 말씀드리면 "WinDBG는 커널 접근이 가능한 디버깅 tool이다~" 라고 이해하시면 됩니다! 

그럼 이제 부터 본격적인 커널 디버깅의 세계로 고고씽~^^


가장 먼저 Debugee(대상컴퓨터로서 여기서는 VMware임)를 설정해야 합니다.

 

  1. VMware 시리얼 포트(Serial Port)를 추가 해줍니다.

    (1)   [ 
    Edit virtual machine settings ] 클릭!


    (2)   
    [Add...] 클릭!



    (3)   
    [Serial Port] 선택 후 Next로 진행합니다
    .


    (4)
       
    [Output to named pipe] 선택 후 Next로 진행합니다
    .


    (5)
       
    Named pipe 이름을 설정한 후 Finish~

           -> Named pipe 이름 형식은 \\.\pipe\임의지정 으로 하시면 됩니다. 

               (이 글에서는 ASEC_windbg로 설정하였습니다.)




    (6)
       아래 그림과 같이 항목을 체크해 줍니다.


    (7)   
    Serial Port가 추가 된 것이 확인 됩니다.

     2.   Debugee(VMware내의 OS)를 설정해 줍니다.

          
(1)   cmd 창에서 boot.ini 파일을 notepad로 불러옵니다.

접기

c:\> notepad boot.ini

접기



     
          (2)   
boot.ini 파일을 다음 내용으로 바꿔줍니다.

접기

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /debugport=COM1 /baudrate=115200

접기



   
3.   이제 디버거(WinDBG)를 설정해 줍니다.


     
(1)   위의 링크에서 다운받은 WinDBG를 설치합니다.



     (2)   설치된 WinDBG파일의 속성값을 불러옵니다.

    
      (3)   표시된
 com_dbg 부분은 1.(5)에서 설정한 이름을 적어 줍니다
.

접기

C:\Program Files\Debugging Tools for Windows\windbg.exe" -k com:port=\\.\pipe\ASEC_windbg,baud=115200,pipe,reconnect

접기



     4. 이제 디버기(Debugee)와 디버거를 연결합니다.

       (1)   WinDBG를 실행합니다.


   
 (2)
   
VMware내의 OS가 부팅되면 다음과 같이 WinDBG와 연결됩니다
.


 (3)
   
Ctrl+Break를 누르면 다음과 같이 디버깅 모드로 전환 됩니다
.
     (kb를 통해 현재 커널 디버깅중 임을 확인 할 수 있습니다.)


5.   디버깅 작업을 좀 더 수월하게 해주기 위해서 WinDBG의 심볼 설정을 해주어야 합니다.

      (1)   WinDBG에서 [File -> Symbol File Path]메뉴를 선택합니다.



      (2)   다음과 같이 심볼파일 경로를 설정하면 OS의 심볼을 로드할 수 있습니다.

접기

srv*c:\symbols.pub*http://msdl.microsoft.com/download/symbols;

접기




지금까지 VMware에 WinDBG를 붙여 커널 디버깅 환경을 구성해 보았습니다. 이제 WinDBG를 이용한 본격적인 커널 디버깅은 여러분들의 몫입니다. 아래 그림은 WinDBG 관련 서적인데요. 관심있으신 분은 참고해 보심이 좋을듯 합니다! 
이상 글을 마치겠습니다~ 좋은 하루 되세요.^^