웬디의 기묘한 이야기

글 작성자: WENDYS
반응형

vmware & WinDbg

간단한 유저 프로세스 디버깅은 로컬에서도 상관없겠지만, 커널 디버깅을 위해선 원격지 PC가 필요한게 일반적입니다. 그렇다고 로컬에서 커널 디버깅이 불가능한건 아니지만, 제약적인 디버깅이 가능합니다.

그렇다면 설정을 어떻게 해야 vmware의 windows와 로컬PC의 WinDbg를 연결할 수 있을까요??


우선 이전에 소개드렸던 내용으로 WinDbg가 설치되어있어야 합니다.

2016/01/05 - [Development/Debugging] - [WinDbg] Kernel Debugging을 위한 디버거 다운로드 및 설치!


vmware와 windows는 설치되어있다는 가정 하에 설명드리겠습니다.


vmware 에서 Edit virtual machine settings을 클릭하여 설정을 시작하겠습니다.

vmware settings



아래와 같지 않아도 상관 없습니다.

저희가 추가해야할 내용은 기본으로 등록되어있지 않은 Serial Port 이니까요





Hardware Type 중 Serial Port를 추가하겠습니다.





WinDbg와 통신하기위해서 Output to named pipe 로 생성되어야합니다.





기본값으로 생성이 됩니다.

\\.\pipe\com_1이라는 값을 통신할때 사용하게 됩니다.

"com_1" 은 임의로 변경하셔도 상관없으며, pipe 통신을 하기 위한 port 입니다.





이제 Serial Port 설정이 끝이 났으니 윈도우를 부팅해보겠습니다.

이제부터가 중요합니다!


windows settings

관리자 권한으로 명령프롬프트를 실행합니다. (bcdedit에서 설정값을 바꾸기 위해선 관리자 권한이 필요)


bcdedit /debug on

bcdedit /dbgsettings serial debugport:2 baudrate:115200


/debug on을 이용하여 windows의 debug mode를 on 해줍니다.

만약 사용하지 않을경우엔 bcdedit /debug off 해주시면 됩니다.


/dbgsettings serial은 아까 vmware에서 추가했던 Serial Port와 연결하겠다는 뜻 입니다.

debugport:2 라고 되어있는 부분은 PC 설정마다 다를 수 있습니다.

Serial Port를 추가했던 부분을 보시게 되면 제 PC는 Serial Port 2 라고 되어있습니다.

만약 Serial Port 라고 되어있으면 debugport:1 이 되는것 입니다.


baudrate:115200은 Serial 통신 속도인데 이 값을 권장합니다.








<위에서 말한 Serial Port 2>


이제 모든 설정이 완료되었습니다.

vmware와 windows의 연결고리가 생성되었으니 실제 WinDbg와 붙이는 일만 남았습니다.


Connection vmware & WinDbg

WinDbg 커널 디버깅을 시작해보겠습니다.





이제 진짜 마지막 설정입니다!

위에서 vmware와 windows의 연결고리를 이어주었으니

이제 WinDbg와 vmware의 연결고리를 이어주기만 하면 끝납니다.


Baud Rate: 115200

Port : \\.\pipe\com_1 (vmware에서 설정한 port)


Serial을 통한 Pipe 통신 입니다. Pipe Check 해주세요





드디어 끝났습니다.

Waiting to reconnect...

네 모든 설정이 끝났고 연결을 기다리는 부분입니다.





윈도우를 부팅 하시면 자동으로 연결되며,

이미 윈도우가 작동중이라면 Ctrl + Break 키를 누르면 Break Point가 잡히게 됩니다.


디버거의 모든 명령어는 Break Point가 잡힌 상태에서 입력할 수 있으며, 심볼 추가 및 변경도 마찬가지로 Break 상태여야합니다.





WinDbg Symbol

기본 디버깅을 위하여 심볼을 설정합니다.

MS에서 기본으로 제공되는 심볼의 URL은 다음과 같습니다.

SRV*c:\symbols*http://msdl.microsoft.com/download/symbols


그 외에도 디버깅중인 exe, dll, sys 등의 *.pdb 의 경로를 추가하시면 소스코드 레벨 디버깅이 가능합니다.

pdb 파일은 디버깅 심볼이므로 개발중인 프로그램의 배포 버전에 따른 pdb는 별도로 보관되어야 합니다.








끝났습니다.

이제 마음껏 디버깅의 세계로 빠져들어 보세요~




반응형