'전체 글'에 해당되는 글 202건

  1. 2007.06.29 [WinDbg 명령] .kdfiles
WinDbg 디버깅2007. 6. 29. 00:50
반응형

드라이버를 개발하면서 WinDbg 로 커널 디버깅을 할 때 가장 귀찮은 작업중 하나가
Debugger(개발시스템)에서 드라이버를 빌드한 후에 이것을 Debuggee (테스트시스템)로
복사해줘야 한다는 것입니다.
이것을 해결해 주는 편리한 명령어가 있었으니 바로 .kdfiles 입니다.

.kdfiles (Set Driver Replacement Map)
.kdfiles command 는 맵파일을 읽어서 그 내용에 있는 대로 Debugger 시스템에 있는
드라이버 파일을 Debuggee 시스템에 복사하게 합니다.

[Syntax]
.kdfiles MapFile ( MapFile 을 읽는다 )
.kdfiles -c         ( 현재 설정을 지운다 )
.kdfiles             ( 현재 설정을 보인다 )

파일복사는 커널 디버거가 연결된 통로로 이루어집니다. Serial 디버깅이면 Serial,
1394 디버깅이라면 1394죠. 파일복사이므로 파일이 큰 경우 당연히 1394 권장입니다.

이해가 잘 안가시죠?
예제를 통해 확인해 보겠습니다.

kd> .kdfiles
No KD file associations set

이게 일반적인 상황입니다.
다음과 같이 설정할 수 있습니다.

kd> .kdfiles d:\dbgmap\mymap.ini
KD file assocations loaded from 'd:\dbgmap\mymap.ini'

mymap.ini 파일의 내용은 다음과 같습니다.

# [주석] mydrv.sys 에 대한 맵
map
\Systemroot\system32\mydrv.sys
D:\mytest\mydrv\Build\I386\checked\mydrv.sys

내용은 debuggee 의 \Systemroot\system32\mydrv.sys 는 debugger 시스템의 D:\mytest\
mydrv\Build\I386\checked\mydrv.sys 를 가져와서 사용하도록 해 달라는 의미입니다.
아래와 같이 설정된 내용을 확인할 수 있습니다.

kd> .kdfiles
KD file assocations loaded from 'd:\dbgmap\mymap.ini'
\Systemroot\system32\drivers\mydrv.sys -> D:\mytest\mydrv\Build\I386\checked\mydrv.sys

실제 파일 교체는 드라이버 로드시에 이루어 집니다. 리부팅은 필요없습니다.
테스트시스템의 드라이버를 로드하려는 순간 debugger 측에서 지정된 폴더의 파일을 전송하고
테스트시스템의 드라이버가 전송된 파일로 교체된 후에 드라이버가 로드됩니다.
이 때 다음과 같은 메시지가 뿌려집니다.

KD: Accessing 'D:\mytest\mydrv\Build\I386\checked\mydrv.sys' (\SystemRoot\system32\drivers\mydrv.sys)
  File size 64K........................
MmLoadSystemImage: Pulled \SystemRoot\system32\drivers\mydrv.sys from kd

Windows File Protection (WFP)과 관계없이 교체되구요 부팅하는 시점이더라도 드라이버가
로드되면 교체됩니다.

드라이버 자동 복사가 필요없어지면 다음 명령으로 설정을 지우면 됩니다.

kd> .kdfiles -c

이 명령을 알고 있으면 수동으로 파일을 복사하는 작업이 없어져서 아주 편리합니다.
하지만 가끔 원하지 않게 빌드된 드라이버 파일이 무심코 복사되기도 하지요. ^^

참고로 맵파일 작성시 다음과 같은 포맷도 가능함을 보여드립니다.

# Symbolic Link Example
map
\??\c:\windows\system32\beep.sys
\\myserver\myshare\new_drivers\new_beep.sys

복사할 곳 지정시 심볼릭링크 표현으로 어느 위치던지 지정할 수 있습니다.
원본위치 지정시 네트웍에 있는 위치도 지정할 수 있습니다.

그리고 안타깝게도 .kdfiles 명령어는 타겟시스템이 XP 이후인 경우만 동작합니다.


http://www.driveronline.org/bbs/view.asp?tb=tipbbs&GotoPage=6&s_bulu=&s_key=&no=25
반응형
Posted by GreeMate