2. 윈도우 디버거 환경을 준비하자
- 하제소프트 대표이사 이봉석님의 윈도우 드라이버 연대기 강의를 보고 기록한 내용이다.
WinDBG
MS Windows의 다용도 디버거이다.
유저 모드 애플리케이션 뿐만 아니라 장치 드라이버나 커널 모드에서 운영체제 자체를 디버깅할 수도 있다.
GUI가 있으며 VS 디버거보다 강력하다.
덤프 파일을 통해 디버깅할 수 있다.
고려 사항
타겟 컴퓨터(가상 머신)의 부트 설정을 변경해야 한다.
디버깅이 가능하도록 부트설정을 변경한다.
가상 머신의 실행 창에서
msconfig
입력 후, 부팅 탭에서 고급 옵션에 들어간다.전역 디버그 설정에서 디버그 포트를
COM1
, 전송 속도를115200
으로 맞추고 확인을 누른다.종료하지 않고 TESTSIGNING 모드 설정을 진행한다.
TESTSIGNING 모드 설정
윈도우에서 드라이버가 작동하려면 MS로부터 인증을 받아야 하는데, 테스트 환경으로 부팅하면 이러한 인증 절차가 생략된다.
CMD
를 관리자 권한으로 실행 후, 아래 명령어를 입력한다.bcdedit /set testsigning on
완료되면 가상 머신을 종료한다.
호스트 컴퓨터에서도 설정해야 하는게 두 가지 있다.
디버깅할 타겟 컴퓨터와 연결할 방법을 결정한다. (가상 시리얼 포트)
VirtualBox 가상 머신의 설정에서 직렬 포트 탭에 들어간다.
직렬 포트 사용에 체크하고, 포트 번호를 위에서 설정한 포트 번호와 맞춰준다.
포트 모드를
Host Pipe
로 설정하고,Connect to existing pipe/socket
을 체크 해제한다.아래의
Path/Address
에 다음과 같이 입력한다.\\.\pipe\com1
WinDbg(x64)에서 포트를 설정해야 한다.
File - Kernel Debug (Ctrl + K)
클릭 후 COM 탭으로 이동한다.Pipe와 Reconnect에 체크하고 포트를 아래와 같이 작성한다.
타겟 컴퓨터의 운영체제 심볼을 자동으로 받도록 설정한다.
C:\sym\websym
폴더를 생성한다.WinDbg의
File - Symbol File Path
를 클릭하고 아래 내용을 작성한다.C:\sym;
우측의
Help
를 클릭하여Search
탭에web symbol
을 검색한다.Microsoft public symbol server를 클릭하면 다음과 같이 나온다.
The Microsoft symbol server makes Windows debugger symbols publicly available. You can refer directly to the public symbol server in your symbol path in the following manner: set _NT_SYMBOL_PATH=srv*DownstreamStore*https://msdl.microsoft.com/download/symbols
srv 이하 내용을 복사하여 아까의 세미콜론 뒤에 붙여넣고,
DownstreamStore
을 지우고C:\sym\websym
을 작성한다.C:\sym;srv*C:\sym\websym*https://msdl.microsoft.com/download/symbols
설정을 저장하기 위해
File - SaveWorkspace
를 클릭한다.
실습
위의 과정을 모두 마치고나서 가상 머신을 작동시키면, WinDbg에서 커맨드 창이 열리고 다음과 같이 뜨는 것을 볼 수 있다.
Microsoft (R) Windows Debugger Version 10.0.19041.685 AMD64 Copyright (c) Microsoft Corporation. All rights reserved. Opened \\.\pipe\com1 Waiting to reconnect... Connected to Windows 10 19041 x64 target at (Sun Apr 18 21:01:11.597 2021 (UTC + 9:00)), ptr64 TRUE Kernel Debugger connection established. ************* Path validation summary ************** Response Time (ms) Location OK C:\sym Deferred srv*C:\sym\websym*https://msdl.microsoft.com/download/symbols Symbol search path is: C:\sym;srv*C:\sym\websym*https://msdl.microsoft.com/download/symbols Executable search path is: Windows 10 Kernel Version 19041 MP (1 procs) Free x64 Built by: 19041.1.amd64fre.vb_release.191206-1406 Machine Name: Kernel base = 0xfffff801`37800000 PsLoadedModuleList = 0xfffff801`3842a3b0 System Uptime: 0 days 0:00:00.000 KDTARGET: Refreshing KD connection Capacity:25500, FullChargedCapacity:50000, Voltage:10000, Rate:0
메뉴 탭의
Break
를 클릭하면, 가상 머신을 멈출 수 있고 커맨드 창에 다음 내용이 출력된다.Break instruction exception - code 80000003 (first chance) ******************************************************************************* * * * You are seeing this message because you pressed either * * CTRL+C (if you run console kernel debugger) or, * * CTRL+BREAK (if you run GUI kernel debugger), * * on your debugger machine's keyboard. * * * * THIS IS NOT A BUG OR A SYSTEM CRASH * * * * If you did not intend to break into the debugger, press the "g" key, then * * press the "Enter" key now. This message might immediately reappear. If it * * does, press "g" and "Enter" again. * * * ******************************************************************************* nt!DbgBreakPointWithStatus: fffff801`37bfd0b0 cc int 3
- 다시
Go
버튼을 누를 때까지 가상 머신이 멈춘 상태로 유지된다.
- 다시
'Windows > DeviceDriver' 카테고리의 다른 글
06. 프로그램 실행 제어 (0) | 2021.04.25 |
---|---|
05. 5편 구조체분석1 (DRIVER_OBJECT, UNICODE_STRING) (0) | 2021.04.25 |
4. 프로세스 강제 종료 방지 연습 (0) | 2021.04.20 |
3. 간단한 드라이버와 디버깅 (0) | 2021.04.20 |
1. 윈도우 드라이버 개발 환경 준비 (0) | 2021.04.20 |