티스토리 뷰

Application/Win32

WInDbg VMware와 연결하여 커널디버깅하기

알 수 없는 사용자 2011. 3. 21. 17:24

Source : http://kyh1026.tistory.com/5

 

 

윈도우 커널프로그래밍을 하다보니 필요하게 됐다.
윈도우에서 커널디버깅을 하기위해서는 뭐 대충 SoftICE를 이용하는 방법과  WinDBG를 이용하는 방법
두가지가 있는데 SoftICE는 깔다가 어떻게 하는지 복잡한거같기도하고 시간이 없어서
SoftICE보다 간단하게 설치할 수 있는(그냥 내 생각이다.) WinDBG를 이용하게 됐다.
나중에 SoftICE도 까는걸 꼭 성공해야지~~ ^^
우선 WinDBG를 이용하여 커널을 살펴 보려면 Debug 와 Debugee 두가지가 필요하다. 
여기서 Debug는 보통 개발하는 컴퓨터를 칭하고 Debugee는 대상컴퓨터를 말하는데
간단하게 VMware를 이용한다.(다른 데스크탑을 이용해도 상관은 없다.)
이 글은 Windows XP버젼에서 했던것을 정리한것이다.
이제부터 순서를 이야기 하겠다.
[Debugee 설정하기]
1. VMWare에 SerialPort를 하나 만든다.

clip_image001

추가를 하고 next를 누른다.

clip_image002

Output to named pipe를 선택

clip_image003

이름은 \\.\pipe\com_1로 적어주고
첫번째 This end is the server로 선택
두번째 The other end is an aplication. 선택 후 Finish누른다.

clip_image004

Yield CPU on poll를 체크해주고 OK를 눌러서 VMware의 설정을 마친다.
2. VMware의 윈도우를 시작하고 boot.ini파일을 수정해야한다.
boot.ini파일의 밑쪽에 보면
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect
이런식으로 작성된 부분을 볼 수 있을 것이다. 이 밑에
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional - Debug" /fastdetect /debugport=com1 /baudrate=115200
라고 한줄로 입력한다.  이 부분은 부팅할때 디버깅모드로 부팅을 할지 아니면 그냥 원래쓰던대로 부팅할지를
결정권을 주는 부분이다. 이렇게 하면 Debugee의 설정은 끝이다.
[Debuger 설정하기]
1. WinDBG를 설치한다. 디버깅대상이 윈도우이기 때문에 윈도우의 디버깅 심볼이 필요하다.
1.1 디버깅심볼은 http://www.microsoft.com/whdc/DevTools/Debugging/symbolpkg.mspx 에서 심볼을 수 있으나
받아서 해본결과 심볼서버를 통해 받는게 더 편하다는것을 느꼈다.
우선 심볼을 직접 받아 설치하면 C:\Windows\symbols 에 깔리게 될것이다.(뭐 경로를 바꿔줘도 상관은 없다.)
위 심볼경로를 WinDBG에 설정해준다. File -> SymbolFilePath에 위 경로대로 설치 했다면
C:\Windows\symbols 라고 적어준다. 
1.2 심볼서버에서 디버깅심볼을 받으려면 심볼서버에서 받은 디버깅심볼을 저장할 폴더를 하나 만들고
그 경로를 File -> SymbolFilePath에 srv*저장할 폴더경로*http://msdl.microsoft.com/download/symbols
이라고 적어준다. 이러면 나중에 DMP파일을 분석할때 DMP파일에 맞춰서 디버깅심볼이 다운로드 된다.
참고로 DMP파일은 윈도우의 설정에 따라 안생길 수도 있으니 주의해야한다.

clip_image005

한번쯤 내컴퓨터 -> 속성 -> 고급탭 -> 시작 및 복구 로 가면

clip_image006

설정을 해줘야 한다. 이러면 c:\windows\minidump 가 생길것이다.
이미 설정이 되 있다면 상관없는 이야기지만 혹시나 확인해보길.........
2. WinDBG의 속성을 클릭하고 대상에 보면 원래 뭐라고 적혀있는 글이 있다. 그 뒤에 한칸띄우고
-b -k com:pipe,port=\\.\pipe\com_1 를 입력해 준다.

clip_image007

3. 디버기를 실행시키고 부팅중에 디버깅모드로 부팅을 할것인지 일반모드로 부팅을 할 것인지를 물어보게되는데
디버깅모드로 실행을 시키고 WinDBG를 실행시키면 WindowXP가 실행하다가 멈추게 될것이다. 
그리고 WinDBG로 명령을 내리게 되면 그때부터 커널 내부를 들여다 볼 수 있게 된다.