WinDbg 디버깅2008. 1. 11. 00:55
반응형

오래간만에 글 올립니다. 그동안 좀... 아니 많이 바빴네요. ^^

그동안 미뤄왔던 익스텐션 DLL 을 만들어 봤습니다. 저도 처음이라 어떻게 만들어야 하는지 찾아보느라고 좀 헤멨었는데요. 웹에도 약간의 정보가 있고 책의 예제로도 정보가 좀 있어서 이것저것 살펴보았는데 빌드가 잘 되지 않아서 살짝 고생했습니다. 그러던중... WinDbg Help 에서 유용한 정보를 얻었습니다. WinDbg 설치하면 익스텐션 DLL 예제도 있고 손쉽게 만들수 있다는 사실입니다. 역시 이것저것 잡다한 것 볼 필요없고 교과서만 보면 된다는... ^^

WinDbg 설치 폴더에 보면 sdk 라는 폴더가 있습니다. 이것을 이용하면 됩니다. 설치중에 다음과 같이 선택할 수 있습니다. 혹시 sdk 폴더가 없다면 재설치를 하면서 확실히 선택해 줍니다.

사용자 삽입 이미지

이렇게 설치하고 나면 설치폴더 밑에서 sdk 폴더를 찾을 수 있습니다. 샘플들은 sdk\samples 폴더에 몇개 들어 있습니다. 빌드하는 방법은 sdk\samples\readme.txt 에 간략하게 설명되어 있는데 이것을 살짝 요약해 보도록 하겠습니다.

1. WDK(Windows Driver Kit) 를 빌드 용도로 이용한다.
빌드는 WDK 6000으로 합니다. DLL 이라서 Visual C++ 로 빌드한다는 웹문서들이 종종 있는데 그래도 되지만 여기서는 WDK 를 권장하고 있습니다. 뭐... 하라는 대로 하죠. ^^

2. 빌드 명령창을 띄운다.
WDK 가 설치되어 있으면 시작메뉴에서 Build Environment 를 고를 수 있는데 "Windows Server 2003" 또는 "Windows Vista" 를 사용하라고 합니다. 저는 "Windows Server 2003 x86 Free Build Environment" 을 선택하여 명령창을 띄웠습니다.

3. 샘플폴더를 정하고 이동한다.
빌드상에 문제가 있는지 경로에 공백이 포함되지 않도록 하라고 합니다. 그래서 저같은 경우는 sdk 폴더를 통채로 다른 곳으로 복사했습니다.
D:\TestProj\DbgExt\sdk

여기서 간단히 테스트해 볼 샘플은 simplext 이고 그곳으로 이동합니다.
D:\TestProj\DbgExt\sdk\samples\simplext>_

4. INC, LIB 경로를 설정한다.
환경변수에 sdk\inc, sdk\lib 를 설정하라고 하는데 저는 그냥 sdk\samples\simplext\SOURCES 파일에 다음과 같이 추가하여 설정했습니다.

DBGSDK_INC_PATH = D:\TestProj\DbgExt\sdk\inc
DBGSDK_LIB_PATH = D:\TestProj\DbgExt\sdk\lib
DBGLIB_LIB_PATH = D:\TestProj\DbgExt\sdk\lib

5. 빌드한다.
build 유틸리티로 빌드합니다. -cZMg 옵션을 주라고 하네요.
Mg 가 익숙치 않았는데 알고보니 별거 아닙니다. M 은 Multiprocessor build, g 는 color 로 보이기네요. ^^

사용자 삽입 이미지

6. 빌드된 simple.dll 을 WinDbg 설치폴더로 복사한다.
저는 WinDbg 설치 폴더 밑에 있는 winext 폴더로 복사했습니다. 여기에는 이미 ext.dll, kext.dll, logexts.dll 등이 들어 있어서 새로운 익스텐션 DLL 을 넣어줘도 전혀 어색하지 않습니다. ^^

7. WinDbg 에서 사용한다.
다음과 같이 일반적인 익스텐션 DLL 쓰듯이 사용하시면 됩니다.
kd> !simple.help

구지 명시적으로 로드하고 싶으면 다음과 같이 하시고
kd> .load simple.dll
수정을 해서 새로 복사해 넣고 싶으면 올려놓은 걸 내려야 하니까 다음과 같이 합니다.
kd> .unload simple.dll

여기까지 간단한 익스텐션 DLL 작성방법이었습니다. 생각보다 간단하죠?
저도 저 simplext 를 수정해서 저의 익스텐션 DLL 을 만들었습니다. 일단 잘 모르는 상태에서는 그게 가장 간단하더군요. 위의 설명만 가지고도 여러분의 익스텐션 DLL 은 충분히 작성이 가능하실 거라 생각됩니다.

다음 시간에는 제가 만든 익스테션 DLL 을 예제로 설명하여 조금 더 도움을 드릴 수 있도록 해 보겠습니다.

http://www.driveronline.org/bbs/view.asp?tb=tipbbs&GotoPage=1&s_bulu=&s_key=&no=97

반응형
Posted by GreeMate