드라이버를 Debug로 빌드하여 테스트 할 때, CodeVirtualizer를 적용시켜놓은걸 깜빡하고 protect 하지 않은 상태로 드라이버를 로드하려고 하는 경우가 있다.
이럴 경우에 전혀 상관없는 메세지(ERROR_FILE_NOT_FOUND라던가...)를 내뱉으면서 사람을 멘붕시키는 경우가 있다.
에러 메세지도 엉뚱해서 엄한곳만 들여다보다 결국 프로텍트 하지 않아서 그렇다는걸 보면 추가로 멘붕이온다.
빌드 할때 출력창에 CodeVirtualizer가 디파인 되어있다면 메세지 한줄만 출력하도록 했어도 이렇게 헤매지는 않았을텐데 하는 생각에 #pragma message를 이용하여 메세지를 출력하도록 했다.
결과는... 출력이 안된다.
생각해보니 ddk가 드라이버를 빌드하는 것이지 VS가 빌드하는건 아닌것 같다.
구글링을 시작했다.
검색 결과가 진짜 안나온다.
딱 하나의 글밖에 안나오는것 같다.
거기서는 아래와 같이 하라고 나온다.
#define STR(x) #x
#define STR2(x) STR(x)
#define MSGSTR(msg) __FILE__ "(" STR2(__LINE__) ") : message : " ##msg
then I could do the following where I needed it
#pragma message (MSGSTR("blah blah blah"))
one line you have to add in ddkbuild.cmd
if exist "build%W2kEXT%.log" findstr "message" "build%W2kEXT%.log"
디파인으로 저렇게 선언을 해놓고,
ddkbuild.cmd 파일에 저 한줄을 추가한 다음에,
message라는 문자열을 찾아서 출력창에 메세지를 뿌리라는 것으로 이해는 되는데,
수많은 라인중에 어디에 삽입을 하는 것인지 build%W2kExt%.log는 뭘 얘기하는건지 당최 알 수가 없다.
ddkbuild.cmd를 뜯어보고는 싶으나 외계어같아서 포기.
무작정 ddkbuild.cmd 파일을 열어서 findstr로 검색해 보니 뭔가 있긴 하다.
잘은 모르겠으나 위에 if exist에서 findstr로 warning과 error로 시작하는 문자열을 찾아서 WARNING_FILE_COUNT 변수를 +1씩 증가하고 밑에 if not 에서는 count 변수가 0이 아니면 다시 warning과 error로 시작하는 문자열을 찾아서 반복해서 출력해주는 것 같다.
아랫줄에 비슷하게 추가를 해보았다.
[Code]
[Command 출력]
[VS 출력]
커맨드창과 VS에 둘다 나오긴 나온다.
근데 2줄씩 나온다.
원하는건 첫번째 줄인데 두번째 줄은 어디서 튀어나오는지 모르겠다.
어쨌든 출력되는거에 만족하고 사용중..
'Kernel mode' 카테고리의 다른 글
ConfigFlags (0) | 2013.11.15 |
---|---|
Prefetch / Process Carving : 종료된 프로세스 탐지 (0) | 2013.10.31 |
Windows Kernel (0) | 2013.08.20 |
PsLoadedModuleList (0) | 2013.08.19 |
ObjectHook - OpenProcedure (0) | 2013.08.06 |