1. 기본 디버깅 환경
Windows Driver 디버깅을 위해선 다음 그림과 같이 디버깅용 컴퓨터가 더 필요합니다. 디버깅 컴퓨터에는 타겟 컴퓨터와 같은 운영체제가 로딩되어 있어야 하고 디버깅을 위한 프로그램이 필요합니다. 디버깅 프로그램은 DDK에서 제공하는데 자세한 사용법은 도움말을 참조하시기 바랍니다.
Debugger Debuggee
위 그림에서 알 수 있듯이 컴퓨터간의 데이터 교환은 RSC-232 직렬 통신을 통해 이루어 지는데 통신에 필요한 케이블은 다음 그림과 같이 만들어 사용하면 됩니다.
2. Windows 2000/XP에서 디버깅 환경
디버깅을 시작하기 이전에 두 컴퓨터간의 통신 속도를 맞춰줘야 하고 타겟 컴퓨터를 디버그 모드 설정 해야 합니다. Windows NT 계열에서는 다음과 같이 boot.ini 파일에 다음과 같이 추가해 주면 부팅 시 디버그 모드로 부팅할 지 일반 모드로 부팅할 지 사용자에게 묻는데 이때 디버그 모드를 선택해 주면 디버그 모드로 부팅하게 됩니다.
[boot loader]
timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
[operating systems]
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" /fastdetect /debugport=com1 /baudrate=57600
통신 속도 설정은 위의 내용을 보면 알겠지만 /debugport는 직렬 케이블이 연결된 포트이고 /baudrate는 통신 속도를 나타냅니다. 여기에 설정된 속도와 Windows 2000 DDK에서 제공하는 디버깅 프로그램에서의 속도를 맞춰주면 됩니다.
다음은 Windbg를 실행하여 환경설정을 하고 디버깅 하는 방법입니다.
1번 방법은 ddk를 설치 시 같이 설치 되는 windbg 실행 방법이고, 2번의 방법은 최신 Windbg6.2.7.4의 실행 방법입니다. 2번의 Windbg6.2.7.4를 사용하는 것이 사용하기에도 쉽고 자세한 디버깅을 할 수 있습니다.
1) 기본 windbg실행
View->Options를 선택했을 때 뜨는 창으로 포트, 속도 및 Flags를 다음과 같이 설정해 주면 됩니다.
참고로 디버그 모드로 부팅하였는데 Windbg에 디버깅에 관련된 아무런 내용도 출력되지 않을 시에는 Windbg에서 디버깅 명령인 ‘Ctrl+C’와 ‘g+ Enter’를 번갈아 눌러 주시면 디버깅 내용이 출력됩니다.
2) Windbg 6.2.7.4
다운 방법: http://www.microsoft.com/whdc/ddk/debugging/installx86beta.mspx 에서
Install 32-bit Beta Version 6.2.7.4 (April 29, 2003) 8.2 MB 를 클릭하여 다운 받으시기 바랍니다.
실행 화면
kernel debugger 실행
속도와 포트 설정
위와 같이 하면 기본적인 디버깅은 설정이 됐습니다.
추가적으로,
File->Symbol File Path
: 드라이버를 컴파일 하면, xxx.pdb파일이 xxx.sys파일과 같이 생성되는데, 이 파일을 등록 해주면, break될 경우( 예) bluescreen) 해당 소스에 line과 함수 명들과 같은 자세한 정보가 출력이 됩니다.
이 xxx.pdb파일을 symbol(심볼) 파일이라고 합니다. 이 파일은 컴파일 된 드라이버 파일에 대해 함수위치와 소스정보에 대해 가지고 있습니다. 그래서 관련 이 파일이 로딩되면, 컴파일 된 소스에 대한 정보(함수들, 소스의 line 정보(소스가 있다면)등…)를 얻을 수 있습니다.
등록방법은 File->Symbol File Path 를 클릭할 경우, 심볼 파일의 경로를 설정하여주면, 해당 경로의 심볼을 로딩하게 됩니다. 심볼이 바뀐 경우에는 Reload를 check해 줍니다.
위 그림을 보면, 심볼이 세미콜론으로 2개가 등록이 되어있습니다.
SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols
: web으로 관련 심볼을 다운받는 것입니다. 예전에 심볼을 미리 다운받아서 위치를 지정해 주었지만, 지금은 필요할 경우 웹에서 직접 다운 받는다. 이 심볼파일 중에는 ndis.sys와 같은 커널 함수들에 대한 심볼들을 포함하고 있어서 커널 소스는 알 수 없어도 함수 이름 등은 알 수가 있습니다.
c:\symbols
: 이 경로는 사용자가 추가해 주는 심볼 파일 경로입니다. 사용자가 컴파일해서 만들어진 심볼파일을 이 폴더에 복사해놓으면 심볼이 로딩됩니다.
아래의 그림은 심볼이 등록되었음을 보여주고 있습니다.
File->Source File Path
소스의 경로를 지정해 줍니다. 소스를 로딩 할 경우, break 지점이 소스 내에 있으면, 해당 소스의 라인에서 “p” 명령어를 치며, 디버깅을 해 나갈 수 있습니다.
View
MFC 에서 디버기을 할 때 메모리, 디스어셈블, 스택 등을 알 수 있듯이 여기서도 알 수 있습니다.
3. 디버깅 명령어
Windows 드라이버의 디버깅은 Windows Visual Studio와는 달리 사용자가 디버깅 명령을 직접 입력하는 방식으로 진행됩니다. 디버깅을 위해선 여러 가지 디버깅 명령어들을 다룰 수 있어야 되는데 디버깅 명령어에 대한 자세한 내용은 DDK 도움말을 참고하시기 바랍니다.
다음은 디버깅에서 많이 사용하는 명령어를 정리한 것으로 이 정도의 명령어로도 간단한 디버깅은 충분히 수행할 수 있을 것이라 생각됩니다.
명령어 |
설 명 |
Ctrl + C, Ctrl + Break |
일시 중지 |
g |
계속 진행 |
bp |
Break Point 설정 예) bp SnSReceive |
bl |
Break Point List 보기 |
p |
Asm 명령어 한 줄씩 디버깅 |
bc |
Break Point 삭제 예) bp SnSReceive |
db, dw, dd |
메모리 덤프 |
Ln cs:eip |
현제 타겟 컴퓨터의 실행 위치 |
? |
명령어 도움말 |
.reboot |
타겟 컴퓨터 재부팅 |
. !analyze -v
디버기(debugee)가 BlueScreen이 발생하거나, 시스템에 문제가 있을 경우, Windbg 프로그램은 break가 걸리게 된다. 이때 break된 원인을 자세히 알기 위해서 “!analyze -v”명령을 명령줄에 치면, 자세한 정보를 얻을 수 있다.
4. Windows 98에서 디버깅 환경
디버깅을 시작하기 이전에 두 컴퓨터간의 통신 속도와 사용할 포트를 맞춰줘야 하고 디버깅이 시작될 때 타겟 컴퓨터를 디버그 모드 시작해야 합니다. Windows 98 에서는 두 컴퓨터간의 통신 속도를 맞추기 위해서 다음과 같은 절차가 필요합니다.
1) 타겟 컴퓨터에서 해야할 일.
a) 타겟 컴퓨터에 98DDK가 설치되어 있어야 한다.
b) 설치된 경로를 C:\98DDK라고 하면 C:\98DDK\bin\Runwdb98.bat 파일의 내용을 다음과 같이 수정해야한다.
수정전: @wdeb98 %1 /n /x /c:2 /r:19200 /f:runwdeb.wrf ..\win.com
수정후: @wdeb98 %1 /n /x /c:1 /r:19200 /f:runwdeb.wrf c:\windows\win.com
여기서 통신속도(/r)는 사용자가 정해주는 값으로 19200을 사용해도 되고 다른 값으로 사용해도 된다. 하지만 이 값은 반드시 디버거의 Rterm98.exe에서 사용하는 값과 같아야 한다. 디버깅을 하다가 종종 출력되는 내용이 깨지는 경우가 있는데 이럴때는 통신속도를 변경하여 알맞은 속도로 설정해주면 된다. 포트에 해당되는 것은 ‘/c’ 이다. 이 값도 기본적으로 2로 되어있고 그대로 사용하면 된다. 중요한 것은 어떤 포트를 사용하느냐가 아니라 시리얼케이블이 연결된 포트와 /c의 포트와 일치해야한다는 것이다. “/f:runwdeb.wrf”는 심볼파일을 등록할 때 사용하는 파일로 이 부분에 대해서는 ‘c)’에 자세하게 기술하겠다.
c) C:\98DDK\bin\ runwdeb.wrf의 내용은 아래와 같다.
사용자가 드라이버 소스를 컴파일해서 만들어진 심볼파일을 SnSDrv.sym이라고 하면 위의 그
림과 같이 기입해주고 SnSDrv.sym 파일을 C:\98DDK\bin 에 복사해주면 디버깅시 심볼이 등록
된다.
98DDK에서는 이러한 심볼파일들을 다음과 같이 제공하고 있다.
98SE: 98ddk CD의 \DEBUG_WINDOWS98SE\Retail\
98: 98ddk CD의 \Dbg_sym\Retail\
아래의 그림은 디버깅이 시작될 때 심볼이 등록되었음을 보여주는 화변을 캡쳐한 것이다.
2) 디버깅 컴퓨터에서 해야할 일.
a) 디버깅 컴퓨터에 98DDK가 설치되어 있어야 한다.
b) C:\98DDK\bin\Rterm98.exe를 실행한다. 다음은 실행한 화면이다.
c) 메뉴에서 “Settings->Options ”를 선택하면 아래와 같은 창이 뜬다.
d) 위의 그림과 같이 설정해주면 타겟 컴퓨터에서 설정한 통신속도와 포트가 일치한다.
e) ‘확인’을 누른다.
3) 디버깅하기
a) 이제 모든 환경이 설정되었다.
b) 디버깅 컴퓨터에서는 C:\98DDK\bin\Rterm98.exe를 실행한다.
c) 타겟 컴퓨터에는 디버깅하고자하는 드라이버가 설치되어 있어야하고 심볼을 등록해주면 더 자세한 정보를 얻을 수가 있다.
d) 타겟 컴퓨터를 도스모드로 재부팅한다.
e) C:\98DDK\bin\Runwdb98.bat 파일을 실행하면 디버깅 컴퓨터에 실행된 Rterm98 화면에서 디버깅되는 내용을 확인 할 수 있다.
댓글 없음:
댓글 쓰기