Media Log

이제는 마이크로소프트에 흡수된 구 Sysinternals가 만든 여러 유용한 툴 중 Process Monitor는 내가 가장 좋아하는 툴이다.
많은 사람들이 Process Explorer만을 사용하는데, 아마도 Process Explorer의 직관적인 사용자 인터페이스 덕분이리라.
Process Monitor는 잘 사용하려면, 툴에도 익숙해져야 하지만 Windows API를 많이 알고 있어야 하기 때문에 개발자가 아닌 QA팀 같은 곳에서는 사용하기 힘들다.
하지만 프로세스가 수행하는 모든 동작들을 잡아채서 보여주기 때문에 어떤 응용프로그램을 분석할 때 유용한 많은 정보들을 얻어 낼 수 있다.

DbgView 또한 우리 개발자들이 디버깅 할 때 많이 사용하는 애플리케이션 중 하나다. 응용프로그램이나 디바이스 드라이버에서는 OutputDebugString이나 DbgPrint 같은 함수로 로그를 작성한 후 이 툴을 통해서 프로그램의 상태를 추적하고는 한다.

파일 시스템 필터드라이버를 만들게 되면 이 두가지를 같이 병행하고 싶은 경우들이 생길 수 있다.
응용프로그램들이 어떤 Irp를 보내는지를 모니터하고, 내 필터 드라이버는 어떤 동작을 하는지를 함께 보고 싶은 것이다.

두가지 툴을 번갈아 가면서 쳐다보는 일은 순서를 제대로 예측하기가 어렵기 때문에 정말 열받는 일인데, 이번에 프로세스 모니터에서 이런 기능을 해결하기 위한 인터페이스가 하나 추가되었다.

이 아이디어는 디버깅 애플리케이션으로 유명한 존 로빈스생각해내고 제안했는데, 현재 MS 최고의 프로그래머 중 하나인 마크 루시노비치를 자신의 꼬붕 프로그래머라고 농을 치는 것이 너무 웃긴다.

What I really wanted was for my trace statements to be part of the Process Monitor viewing so that way it would be trivial mapping the I/O activity to operations in my code. Fortunately, I have a personal developer at my disposal that is keen to tackle these kinds of challenges. He’s a very nice guy named Mark Russinovich who happens to be the author of Process Monitor. Mark is always eager to hear feature requests for his tools and I think he’s implemented at least 30 features in Sysinternals tools over the years that I thought would be great to have. Don’t hesitate to email Mark with feature ideas so he can be your personal developer as well.

존 로빈스의 유머 감각은 정말 끝내주는데 그의 디버깅 애플리케이션만큼 웃기는 컴퓨터 책을 아직도 만나보지 못했다.
이런 멋진 해커이자 명저자가 다시는 책을 안쓰기로 결정한 것은 정말 슬픈 일이다.

어쨌거나 마크는 콘트롤 코드를 하나 추가해서 DeviceIoControl 함수를 통해 인터페이스 할 수 있도록 기능을 제공해주었고, 최신버전의 프로세스 모니터를 보면 도움말에서 아래 코드를 찾아볼 수 있다.

#define FILE_DEVICE_PROCMON_LOG 0x00009535
#define IOCTL_EXTERNAL_LOG_DEBUGOUT (ULONG) CTL_CODE( FILE_DEVICE_PROCMON_LOG, 0x81, METHOD_BUFFERED, FILE_WRITE_ACCESS )

int main( int argc, char * argv[] )
{
  HANDLE hDevice = CreateFile( L"\\\\.\\Global\\ProcmonDebugLogger", 
                       GENERIC_READ|GENERIC_WRITE,
                       FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
                       NULL,
                       OPEN_EXISTING,
                       FILE_ATTRIBUTE_NORMAL,
                       NULL );

  if ( hDevice != INVALID_HANDLE_VALUE ) {
    WCHAR text[] = L"Debug out";
    DWORD textlen = (_wcslen(text)+1) *sizeof(WCHAR)
    DWORD nb = 0;

    BOOL ok = DeviceIoControl( hDevice,
               IOCTL_EXTERNAL_LOG_DEBUGOUT, text, textlen, NULL, 0, &nb, NULL );

    if ( ok ) {
      printf( "wrote %d\n", i );
    } else {
      printf( "error 0x%x\n", GetLastError() );
    }
  } else {
    printf( "error %d opening Process Monitor\n", GetLastError() );
  }
  return 0;
}
존 로빈스는 .NET과 C/C++에서 좀 더 편하게 사용할 수 있는 Wrapper 코드를 만들어서 올려놓았다.
커널 드라이버에서 사용하고 싶다면,
ZwDeviceIoControl
ZwDeviceIoControlFile 함수를 통해서 직접 Wrapper를 작성해야 한다. 존도 이제는 늙어서 커널 코드는 만들어주기가 귀찮은가보다.


이런 식으로 애플리케이션이나 드라이버에서 프로세스 모니터에게 직접 디버그 메세지를 보낼수가 있다.

기존에 OutputDebugString이나 DbgPrint로 찍은 함수를 Process Monitor가 잡아채서 찍어주는 것이 아니고, 우리가 직접 커스텀 함수를 호출해야만 로그 메세지를 보낼 수 있는 것에 주의하자.
즉, 꽁짜로 얻을 수 있는 것은 아니고 기존에 사용하던 애플리케이션이나 드라이버의코드를 고쳐야 한다는 것.(래퍼 함수를 작성하고, 필요한 곳에서 호출하는 만큼의 비용은 지불해야 한다.)

저작자 표시 비영리 동일 조건 변경 허락
신고

submit
제프리 리처의 Windows via C/C++ - 10점
제프리 리처.크리스토프 나자르 지음, 김명신 옮김/한빛미디어


제프리 리처의 Windows via C/C++ 번역서가 나왔다.

김상형의 윈도우즈 API 정복이나 윤성우의 TCP/IP는 모두가 잘 알고 있는 반면에,
이 책은 -그리고 제프리 리처를 모르고 있는 사람들이 상당히 많다.

이 책은 99년도에 4판이 발행된 이 후 2008년 12월에 5판이 발행되었다.
간단히 설명하면, 이 책은 Microsoft Windows 프로그래머를 위한 최고의 책이다.

나는 이 책의 베타리딩을 했었는데, 처음 해보는 베타리딩은 꽤 괜찮은 경험이었다.
재밌는 경험을 하게 해준 역자님께 감사한다.
게다가 이런 훌륭한 책에 내 이름이 들어갔다는 것은 정말 기쁜 일이다.

제프리 리처는『Code Complete』를 10년 동안 읽고 있지만, 아직도 그 책에서 배우고 있다고 말했습니다. 나는 이 책 또한 모든 윈도우 개발자가 10년 동안 곁에 두고 살아야만 한다고 생각합니다. 점점 .NET의 시대로 접어 들어가고 있긴 하지만, 그것이 중요한 것은 아닙니다. 제프리 리처가 서문에서 말했다시피 정말 중요한 것은 윈도우 시스템 자체를 이해하는 것입니다. 관리 코드보다는 네이티브 코드가 시스템을 이해하기에 훨씬 더 적합합니다. 게다가 네이티브 애플리케이션들은 앞으로도 오랜 시간 동안 건재할 것입니다. 이 책은 제프리 리처의 네이티브 애플리케이션 개발을 다루는 마지막 에디션입니다. 이것은 이 5판이야말로 모든 윈도우 개발자에게 있어 불후의 명작이 될 것이라는 걸 의미합니다.
- 김재호 / 이스트소프트 비즈하드팀

한빛미디어에서 책을 보내줘서 오늘 받아볼 수 있었는데 생각보다 두께가 얇았다.
이 책의 원서는 하드커버에 돼지인데, 일반적으로 번역서는 원서보다 약간 더 두껍기 때문에 조금 이상했다.
책의 높이가 다른 책들보다 약간 더 길고, 여백을 줄여서 페이지 수를 상당히 아낄 수 있었던 것 같다.
어쨌거나 이 책의 두께가 원서의 부담스러운 두께보다 상당히 마음에 든다.

이 책의 정가는 42000원인데, 요즈음 오른 종이값과 다른 책들에 비하면 아주 싸게 책정되어 나왔다고 할 수 있다.
최근 나오는 신간 서적들, 800페이지 정도의 분량과 그저 그런 내용에도 40000 ~ 45000원 딱지를 달고 있는 여러 책들과 비교하면 말이다.

어째 쓴소리 하나 없이 칭찬만 하게 되는 것 같은데, 이 책은 충분히 그럴만한 가치가 있다.

오늘 강컴에 Windows API 정복을 저술한 김상형씨께서 이 책에 대한 서평을 남겨주셨는데 그 내용이 아주 재밌다.

 아직 읽어 보지 않았지만 감히 서평부터 쓴다. 왜냐하면 안 읽어 봐도 내용을 거의 다 알고 있으며 저자의 이름만으로도 품질을 능히 짐작할 수 있기 때문이다. 대부분 알고 있겠지만 이 책의 전판은 Programming Application for Microsoft WIndows이며 그야말로 전설같은 책이다. 한때 대림 출판사에서 황기태님에 의해 번역되었지만 지금은 완전히 절판되어 서점에서는 구할 방법이 없다. 하지만 아직까지 중고라도 좋으니 이 책을 구해 달라는 사람들이 얼마나 많은지 모른다. 강남 모 서점에서 재본된 책을 구할 수 있는데 그나마도 쉽게 구하기는 어렵다.
 
NT 4.0을 대상으로 하는 책이지만 지금 읽어도 실무에 적용하는데 큰 무리는 없다. 이 책을 읽어 보면 윈도우즈에 대한 저자의 내공에 감탄하게 되고 하나라도 더 상세하게 설명하기 위해 애쓰는 저자의 노력에 감동하게 된다. 멀티 스레드, 메모리, DLL, IPC 같은 고급 주제들을 아주 속속들이 정확하게 파헤쳐 놓았다. 예제들도 핵심의 정곡을 찌르는 주옥같은 명작들이다. 이 책을 읽으면 운영체제의 내부를 들여다 볼 수 있으며 여기 저기 숨어 있는 함정들도 잘 피해 다닐 수 있다.
 
이렇게 좋은 책을 구할 수 없어 못 읽는 사람들이 많고 또 시간이 많이 흐른만큼 아무래도 최신 운영체제에 대한 내용이 없어 아쉬웠었다. 그렇다고 원서를 구해 읽기는 사실 부담스럽다. 이런 차에 제프리 리처의 최신판이 번역되어 나왔으니 그 반가움을 어떻게 표현해야 할지 모르겠다. 나는 이 책을 열번 넘게 읽었는데 새로 출판된 책도 또 그만큼 읽고 싶다. 분명히 다 읽었는데도 새로 읽을 때마다 새로운 고급 기법들을 터득하게 된다.
 
이상의 서평은 사실 전편에 대한 평가이다. 새로 번역된 책은 아직 보지 못했으니 번역의 질이나 편집 상태같은 것은 평할 수 없다. 또 목차상으로 볼 때 비스타나 64비트에 대한 내용이 보이지 않아 조금 아쉽기도 하다. 조만간 이 책을 읽어 본 후 정확한 서평을 다시 올릴 것이되 아직 이 책을 모르는 사람들은 일단은 읽어 보기를 권한다.


 
이 책이 얼마나 훌륭한 책인지 알 수 있을 것이다.

나는 서평의 첫 머리에, 내용을 이미 거의 다 알고 있다고 자신있게 말하는데서 한 번 놀랐고, 말미에 이 책을 10번 넘게 읽었다는 부분에서 다시 놀랐는데, 저런 실력과 자신감을 갖게되려면 그 정도는 공부 해야 하는구나 하고 느꼈다.

자, 우리도 10번씩 읽어봅시다^^
신고
  1. Favicon of http://oseb.textcube.com BlogIcon oseb at 2008.12.18 15:48 신고 [edit/del]

    마소 사이트에 광고된 책이군요.

    오 맙소사! 4만원이 넘어갑니까? 요즘 win32 api 기초 볼려고 Windows Applications for examples 구해 놓았는데 저 책도 예제 중심인가 보군요.

    Reply
  2. Favicon of http://eslife.tistory.com BlogIcon eslife at 2008.12.23 12:53 신고 [edit/del]

    오늘 책을 받았는데 책 추천글에 있는 그 '분' 이시네요
    책 느낌이 아주 좋습니다. 추운 겨울에 열이 나게 해 줄 책일 듯 한데 벌써 부터 기대되네요

    Reply
  3. Favicon of http://archvista.net/ BlogIcon 아크몬드 at 2008.12.24 18:01 신고 [edit/del]

    오옷.. 저도 한 번 읽어 봐야 겠네요.

    Reply
  4. Favicon of http://hanb.co.kr BlogIcon 송성근 at 2009.01.07 14:12 신고 [edit/del]

    저는 본서를 기획한 한빛미디어 기획자입니다.
    먼저, 이렇게 블로그에 책을 소개해주셔서 감사합니다.
    다름이 아니라 포스팅하신 글을 보니 두 가지 사항을 궁금해하시는 것 같아서 이곳에 답변을 답니다.(^^)

    책 두께가 얇은 것은 여백을 줄인 편집에도 1차적인 원인이 있지만 또 하나, 얇은 종이를 사용한 것도 주요한 원인입니다. 보통 80g짜리 종이를 사용하는데 이 책은 70g을 사용했습니다. 책 두께를 줄이기 위해서 그런 것이고 아울러 비용절감의 효과도 있습니다.
    한편, 가격은 45,000원으로 잠정 책정했으나 비용상승으로 인한 부담을 전적으로 독자에게 지우는 것은 옳지 않다는 사장님의 의지가 있으셔서 42,000원으로 낮추었습니다.

    Reply
  5. 양재호 at 2009.10.08 10:53 신고 [edit/del]

    저는 Native Windows Programming 에 관한 지식이 없어서,

    읽으면서도 이게 뭔 뜻이지? 하고 좌절하곤 합니다.

    역시 닷넷(.Net) 같은 편한 프레임워크에 익숙해진 폐단이 아닐까 생각되네요. ㅠㅠ

    그나저나 이 책을 10번이나 읽는 다는 것은 어마어마한 내공의 소유자가 아닐까 생각합니다.

    어휴.. 한 챕터라도 제대로 읽을 수 있으면 좋겠는데 말이죠.

    Reply
  6. Favicon of http://wapi.springnote.com/pages/5625179 BlogIcon namo at 2011.01.20 08:39 신고 [edit/del]

    이 책 저도 좋아합니다... OS를 잘 알고 개발을 한다는 것은 연장 잘 아는 것을 넘어선 그 이하의 기초가 단단하다는 것을 의미하지 않을까 생각해봅니다.

    Reply
    • Favicon of http://www.benjaminlog.com BlogIcon 김재호 at 2011.01.20 10:25 신고 [edit/del]

      네. 정말 좋은 책이에요. 저는 필요할 때 마다 관련 챕터를 쭉 다시 읽어보고 있는데요, 김상형님이 말씀하신 것처럼 볼 때마다 새로운 것들을 배우네요. 정말 신기해요.

  7. 눈물나는 at 2011.08.11 14:51 신고 [edit/del]

    프로그래밍을 공부하고있는 대학생입니다.
    현재 제 수준이 More Effective 를 겨우 한번 정독한 정도의 수준인데,
    시작하기에 무리가 없는지 여쭤보고싶네요..

    염치 불구하고 답변 기다립니다 ㅠ_ㅠ

    Reply
    • Favicon of http://www.benjaminlog.com BlogIcon 김재호 at 2011.08.12 00:51 신고 [edit/del]

      More Effective C++는 이 책 하고는 거의 상관없는 내용이라 뭐라 말씀드리기가 그렇습니다. 언어 지식보다 윈도 플랫폼에 대한 이해가 더 중요합니다. 그런데 그런 것은 너무 신경쓰지 마시고 일단 그냥 도전 해보세요. 보다가 막히면 덮어놓고 다른 공부 좀 하면서 살다가 한참 후에 또 보면 이해가되고 그럴껍니다.

  8. 눈물나는 at 2011.08.12 10:45 신고 [edit/del]

    아... 그렇군요..
    멋모르고 어려운책들 사놓고 읽지못했던 기억이있어서
    두려움이 먼저 앞섰었나보네요ㅠ
    친절한 답장 감사합니다..

    제가 좋은 프로그래머가 되어 나중에 꼭, 감사인사드릴 날이 오길 바래요.
    주말엔 비가온다고 하니 날씨염두해두시고 주말보내세요.

    Reply
  9. aa at 2016.01.11 14:38 신고 [edit/del]

    서평 최고네요

    Reply

submit
Debugging Applications for Microsoft .NET and Microsoft Windows - 10점
John Robbins 지음, 서우석 옮김/정보문화사


이 책은 John Robbins의 하나뿐인 명작 시리즈이다.

이 디버깅 시리즈는 총 3판 까지 발행 되었는데, 1판은 Debugging Applications란 이름의 오직 native code만을 다룬 서적이고, 지금 옆에 있는 이 책이 native와 managed 코드를 같이 다루는 2판, 그리고 2006년 말 즈음에 나왔던 것 같은 3판은 오직 관리코드에 대해서만을 다룬다.(그래서 2판이 가장 두껍다.)

그러나 닷넷프레임워크 환경 내에서 프로젝트를 한다고 해도 3판을 선택하기 보다는 2판을 고르는 것이 더 좋을 것이다. 왜냐하면 3판은 번역서가 없기 때문이다^^
이 책을 번역한 서우석씨는 debuglab.com 의 운영자인데, 튼튼한 내공이 있어서 그런지 프로그래밍 서적 번역을 정말 잘한다.( 하지만 이책의 3판은 번역하지 않을 것이라고 들었다. 그래서 재출간판이 나온 것이고 )
이 책의 번역이 엉망이다, 또 다른 책인 Code Complete2의 번역이 엉망이다 하는 사람들이 있는데 아마도 그 사람들의 기본기가 엉망일 것이다. 원서를 읽는 것보다는 100배 정도는 이득이니 영어실력이 부족하다면 꼭 번역서를 구해보라.

이 책 3판을 어쩌면 다른 사람이 번역할지도 모르니 기다려 보는 것도 좋겠지만, 2판에 있는 주옥같은 native 예제들과 설명들을 버리고 가긴 너무 아깝지 않은가. 아무리 닷넷 개발자라 할지라도^^

음, 어쨌뜬 아쉬운 소식 중 하나는 이 책을 읽고 반해 버렸던 존 로빈스가 더 이상 책을 쓰지 않기로 했다는 것이다.
책만 쓰면 인터넷에 여기저기 돌아다니고 하는 것에 어지간히 화가 났던 것 같다.
정말 아쉬운 부분이긴 하지만, 그래서 이 책이 더더욱 아름다운 명서로서 자리매김 하게 될 것 같다.

내가 이 책을 처음 알았던 것은 역시 신입사원 때였다.
(지금 생각해보니, 도대체 학교 다닐 때는 왜 이런 책들을 모르고 소설같은 C#, 자바 이런 책들만 봤는지 모르겠다. 물론 그 책들이 형편없다고 비하하려는 의도는 아니다. 그냥 이런 훌륭한 책으로 학생 때 여유를 가지고 공부하지 못했던게 아쉬울 뿐이다.)

음 어쨌든 신입사원 때, 회사 위키에 누군가가 올려놓은, 오류보고서 정보를 통해 위치를 역추적 하는 글을 읽었는데 도대체가 무슨 말인지 전혀 이해가 되지 않았다.
그 분에게 하나씩 다 물어볼 수도 없고 해서 무슨 책 읽으면 됩니까. 했더니 이 책을 보라고 권해주셨다.( 그분은 사실 카발온라인과 알집을 만든 개발실장님이었다. 신입사원이 가서, 아니 이게 도대체 무슨 외계어를 써논겁니까! 하나씩 차근 차근 설명해주십시오! 할수도 없는 노릇 아닌가. 하하하 )

음 어쨌든 이 책을 읽고 나서는 나도 map 파일과 pdb 파일이 뭔지 알게 되었고, 빌드 할 때마다 버전별로 저런 디버깅 정보들을 자동으로 모아둘 수 있도록 구성해 두었고, 또한 사람들이 비즈하드 전용탐색기를 사용하면서 프로그램이 비정상 종료되었을 때 오류보고서 정보를 보내주면 그 정보들을 보고 프로그램이 어디서 죽었는지 찾을 수 있게 되었다.

물론 이 커다란 책에 단지 충돌주소로 소스코드 위치를 찾는 방법만 나와 있는 것은 아니다.
이 책은 Windows 환경에서 디버깅하는데 필요한 거의 모든 지식을 다룬다.

내가 재미있게 읽고 프로젝트에 유용하게 적용 할 수 있었던 것들은 다음과 같다.

심볼서버 구성,
ASSERT와 TRACE,
경고 없는 코드를 작성하는 방법,
컴파일, 링커 옵션에서 각 스위치들의 의미,
DLL이 로드되다가 충돌 하였을 때 재배치되는 과정과 방지하는 방법,
멀티쓰레드 프로그래밍시에 주의사항,
기타 브레이크 포인트 고급 옵션들.

어떤 Windows 프로그래머들에게도 좋은 책이 될 것이라 확신한다.


신고
  1. 김재호 at 2008.04.30 18:35 신고 [edit/del]

    오 이런, 오늘 강컴에 3판 번역서가 올라왔군요. 5월 15일 출시에 역시 서우석씨 번역이네요^^

    Reply

submit