Top

WinDbg로 쉽게 배우는 Windows Debugging

  • 지은이김성현, 이태화, 김희준
  • ISBN : 9788960770867
  • 35,000원
  • 2009년 07월 17일 펴냄
  • 페이퍼백 | 564쪽 | 188*250mm
  • 시리즈 : 윈도우 시스템 프로그래밍

책 소개

국내 디버깅 전문가들의 현장 경험을 바탕으로 한 WinDbg 완벽 가이드와 윈도우 디버깅 실전 매뉴얼

국내 윈도우 디버깅 전문가들이 현장에서 우러난 실전 경험을 바탕으로 한 예제로 가득찬 WinDbg 완벽 가이드와 윈도우 디버깅 실전 매뉴얼을 완성했다. 초보자부터 고급 개발자까지 쉽게 읽을 수 있도록 WinDbg 설치법부터 구체적인 디버깅 사례와 해결책, 툴의 기능 확장과 고급 디버깅 팁까지 완벽히 녹여냈다. 이 책 한 권이면 윈도우 디버깅과 WinDbg를 정복하는 건 시간 문제다.


[ 소개 ]

Windbg 활용 완벽 가이드
이 책은 윈도우에서 WinDbg를 이용해 디버깅하는 방법을 중점적으로 설명한다. 그리고 가급적이면 간단하게 디버깅하는 방법 위주로 설명했다. WinDbg가 훌륭한 디버깅 도구임에는 틀림 없지만 많은 사람이 사용법을 어렵다고 느껴 활용하지 못하고 있는 실정이다. 따라서 WinDbg를 전혀 모르는 사람이라도 처음부터 배우면서 WinDbg를 알아갈 수 있는 책이 있었으면 하고 생각했다. 이 책은 그런 바람으로부터 탄생했다고 볼 수 있다. 이 책을 처음부터 중간까지 본다면 WinDbg란 어떤 것이고 어떤 식으로 사용하는지 기초를 배울 수 있을 것이다. 중간부터 마지막까지는 좀 더 복잡하거나 어려운 상황에 응용할 수 있는 방법을 엿볼 수 있다.

예제로 쉽게 배우는 디버깅
사용법을 직관적으로 보여주려고 간단한 디버깅 예제들로 설명하는 방식을 취했다. 이론적인 설명이나 명령 옵션을 늘어놓는 책보다는 실제로 사용하는 예제를 보여주는 책을 원했다. 따라서 각 예제를 따라하면서 배울 수 있고 유사한 상황에 다시 꺼내들고 참고할 수 있는 핸드북이 되기를 바랬다. 간단한 디버깅 예제들은 여러분의 문제 상황과 정확히 일치하지 않을 수도 있다. 하지만 간단한 디버깅 절차를 알고 있으면 어떤 경우라도 디버깅 시도를 해볼 수 있다. 대부분 쉽게 문제의 원인을 찾을 수 있을 것이다. 물론 어려운 디버깅을 하게 될 경우도 있지만 쉬운 디버깅을 연습하다 보면 점점 어려운 디버깅을 하는 능력도 향상될 것이다. 책의 앞부분은 쉽고 간단한 예제들로 구성되어 있다. 간단하지만 가장 기본적인 기초 체력에 해당하는 내용이므로 디버깅의 기본 단계들을 볼 수 있을 것이다. 책의 후반부로 갈수록 조금씩 어려운 예제들이 등장하게 된다. 어떤 독자는 앞부분을 잘 이해해서 뒷부분도 어렵지 않게 이해할 수도 있고, 어떤 독자는 갑자기 어려운 내용이 나왔다고 생각할 수도 있다. 약간 어려워 보이더라도 일단 이런 식의 접근 방법을 봐두는 것만으로도 또 하나의 참고 자료가 될 수 있을 것이다.

실전에서 우러나온 현장 예제
예제들은 대부분 저자들이 경험했던 내용을 바탕으로 구성했다. 실제로 발생했던 문제를 그대로 예제로 보인 것도 있고 간단한 예제로 편집해 만든 것도 있다. 대부분 필드에서 흔하게 일어날 수 있는 대표적인 문제들의 유형을 예제로 만들려고 노력했다. 수많은 문제 유형을 모두 다루지는 못하겠지만 최소한 저자들이 경험한 내용들에 대한 정리와 공유는 될 것이다. 저자인 우리도 예전에 어떻게 분석을 했었는지 기록으로 남겨두는 편이 스스로에게 도움이 된다. 또한 우리가 이런 방법으로 문제를 분석했다는 것을 공유하면 여러분에게 참고가 될 수 있다. 참고라고 표현하는 이유는 같은 문제라도 조금씩 다른 방법으로 분석하는 것도 충분히 가능하기 때문이다. 처음에는 예제들을 그대로 따라해보겠지만 나중에는 이 책의 내용은 참고만 하고 스스로 이런 저런 방법을 동원해 자신만의 분석 기법을 창조해 낼 수 있을 것이다.

덤프 파일 활용에 관한 실전 팁
또 하나의 목적은 덤프 파일 활용의 활성화다. 윈도우에서 응용프로그램에 문제가 발생하거나 블루스크린이 뜨거나 했을 때는 크래시(Crash) 덤프라는 덤프 파일이 생성된다. 덤프 파일을 수집해 WinDbg로 열어보면 빠른 분석과 정확한 원인을 파악할 수 있다. 이런 덤프 파일이 있다는 사실조차 모르고 있거나 덤프 파일을 받아 놓고도 어떻게 분석해야 하는지 모르는 경우는 참으로 안타까운 일이라 할 수 있다. 조금만 분석하면 원인을 찾아낼 가능성이 아주 높은데, 그것을 하지 못하고 있으니 말이다. 응용프로그램에 어떤 문제가 발생했을 때 가장 처음으로 해야 할 일은 덤프 파일이 생성됐는지 확인하고 수집하는 것이다. 그 다음으로 해야 할 일은 덤프 파일을 이용해 문제를 분석하고 원인을 찾아내는 것이다. 이렇게 하면 문제를 해결하려고 문제가 발생하는 컴퓨터에 가 볼 필요도 없고, 다시 문제를 재현하려고 노력할 필요도 없다. WinDbg가 덤프 파일을 분석할 수 있는 기능을 제공하므로 가능한 일이다.
문제가 발생했다면 덤프 파일을 수집해서 바로 분석하자. 대부분의 문제는 디버깅을 잠깐 해보는 것으로 해결할 수 있다. 디버깅을 하지 않고 문제를 해결하려고 하면 오히려 시간이 더 오래 걸리기 마련이다. 디버깅을 하지 않으면 문제가 발생한 원인을 정확히 알 수 없으므로 원인이 될 만한 곳을 추정해 문제를 해결하려고 한다. 하지만 한 번에 정확한 원인을 추정하기란 쉽지 않은 일이다. 따라서 이런 과정을 계속 반복하면서 시간을 낭비하게 되는 것이다. 결국 추정은 추정일 뿐 정확한 문제를 해결하지 못하는 경우가 대부분이다. 이럴 때 덤프 파일을 수집하고 WinDbg 같은 디버거를 사용하면 문제의 원인에 접근할 가능성이 커진다. 정확한 원인을 찾아내고 수정하는 것을 습관화해야 더 견고하고 안정성 높은 소프트웨어를 소비자에게 제공할 수 있을 것이다.


[ 이 책에서 다루는 내용 ]

■ WinDbg 사용법과 다양한 디버깅 예제
■ 예제를 통한 유저모드 디버깅과 커널 모드 디버깅 케이스 스터디
■ 덤프 파일 활용에 관한 실전 팁
■ 성능 로그를 통한 디버깅 기법
■ Perfmon을 활용한 시스템 퍼포먼스 측정 방법
■ 각종 유틸리티를 활용한 문제 해결 방법의 소개
■ 쉬운 디버깅과 유지보수를 위한 팀 협업 개발 환경을 갖추는 방법
■ 초보자를 위한 디버깅에 필요한 어셈블리와 호출 규약, 스택의 기초
■ 실전에 많이 쓰이는 WinDbg 명령어 소개와 그 활용 방법, 예제 소개


[ 부록 CD ]

● 책에 수록된 모든 예제 프로그램 소스코드
● 곧바로 실행하며 테스트할 수 있게 빌드된 실행 파일과 심볼, MAP 파일
● 본문 내용을 직접 따라가며 명령을 실행해 볼 수 있는 덤프 파일
● 예제에서 사용된 스크립트와 확장 DLL


[ 추천의 글 ]

처음 사용자에게 무엇을 어떻게 시작할까에 대한 지침서는 망망대해에서 방향을 잃은 배를 안내해주는 희망의 등대라고 해도 과언이 아니다. 다년간의 보안 소프트웨어 개발로 축적된 디버깅 기술과 윈도우 내부 구조에 대한 지식이 깊은 저자들이 지은 이 책 『WinDbg로 쉽게 배우는 Windows Debugging』은 윈도우 디버깅을 시작하거나 이미 어느 정도 알고 있는 프로그래머나 시스템 엔지니어들이 그 방법을 배울 수 있는 아주 훌륭한 책이다. 거의 매일 윈도우 디버깅을 하고 있는 엔지니어로서 늘 “쉽고 잘 정리된 책이 한 권 있다면 좀 더 많은 사람이 윈도우 디버깅을 두려워하지 않고 친구처럼 쉽게 다가갈 수 있을 텐데”라는 생각을 하고 있었는데, 다행히 이렇게 훌륭한 책이 드디어 출간됐다.
버그 없는 코드만 세상에 존재하길 기대해 본다.

- 김관현 / 마이크로소프트 기술지원부 부장, Escalation Engineer

윈도우 프로그래머라면 매일 겪는 일로서 피하려고 해도 피할 수 없는 일이 바로 디버깅 작업이다. 디버깅 작업은 자신의 프로그램을 디버깅하고 시스템을 분석하고 다른 개발자의 프로그램을 디버깅해야 한다는 관점에서 윈도우 개발자에게는 항상 양날의 검과 같은 존재다. 이 검의 끝이 어디로 향하는지는 디버깅 스킬과 디버깅 툴을 다루는 개발자의 능력에 달렸다고 해도 과언이 아닐 것이다.
여러분이 애플리케이션 개발자든 커널 프로그램 개발자든 간에, 수년간에 걸쳐 세 저자들이 실무에서 겪은 실질적이고 체계적인 방식으로 효율적인 프로그램 디버깅을 공개한 이 책에서 큰 가이드를 얻을 수 있으리라 믿는다. 이 책에서는 문제의 이면에 감춰진 실제 해결책을 찾는 데 필요한 많은 구체적인 케이스가 제공되며, 또한 디버깅 툴을 완벽히 이해하는 데 필요한 다양한 주제와 디버깅 툴의 기능을 확장하는 방법을 예시한다.
윈도우 개발자들이 일상적으로 직면할 수 있는 다양하고 복잡한 디버깅 상황을 통합적으로 조명하고, 세부적인 예제 분석을 통해 디버깅 개념에서부터 시스템과 연관된 난해한 부분에 이르기까지 여러 주제를 적절한 수준에서 가장 개발자에 친근하게 다룬 세 저자의 동료로서 감사의 말을 전하고 싶다.

- 김점갑 / 안철수연구소 기반기술팀 책임연구원, 에이콘 윈도우 시스템 프로그래밍 시리즈 에디터

대부분 분야가 그렇듯 처음에는 좋은 조언자가 되어 줄 수 있는 책과 사람을 통해 그 분야를 접하고 앞으로의 방향을 정하게 된다. 하지만 이러한 조언자들이 해줄 수 있는 것은 결국 조언일 뿐, 성과의 수준을 결정하는 것은 개발자 본인일 뿐이다. 윈도우 환경에서 프로그램의 내부를 알고자 하고, 매트릭스의 틀을 깨어 본인의 자유도를 높이고 명확히 하고자 하는 이들은 어떻게 노력하고 있을까?
나는 이를 위해 디버깅 툴을 최고의 도구라 여겨, 디버깅 툴을 통해 내가 상상하고 궁금해 하는 것을 탐구하려 노력해왔다. 그리고 이것이야말로 내가 빚었던 가장 가치 있는 현실의 지식이었다.
다행스럽게도 국내 저자들에 의해 만들어진 이 황금 같은 디버깅 책이 초심을 잃지 않은 독자들에게 자신의 열정 어린 탐닉을 만끽할 수 있게 하는 좋은 조언자가 되어 주리라 생각한다.
1줄의 글에서 10가지의 의미를 발견해 보길 바라며...

- 정덕영 / 『Windows 구조와 원리』 저자

지금까지 이렇게 쉽게 WinDbg의 모든 기능을 설명한 책은 없었습니다. 너무나 강력한 기능을 제공하고 있지만 소수의 전문가만 사용해온 WinDbg는 가장 훌륭한 도움말을 제공하고 있다는 평을 듣고 있음에도 불구하고 여전히 진입장벽이 높았던 디버거입니다. 하지만 『WinDbg로 쉽게 배우는 Windows Debugging』과 함께라면 WinDbg의 전체적인 모습을 파악할 수 있을 뿐만 아니라 필요한 기능들을 적재적소에 활용할 수 있을 것입니다.
디버깅 고수인 저자들의 노하우가 고스란히 녹아있고 명령 중심이 아닌 문제 해결 방식의 접근을 통해 암기식 학습 방법을 탈피함으로써 누구나 쉽게 WinDbg의 강력한 기능을 사용할 수 있게 설명합니다. 제목과 달리 초보자에서부터 고급 사용자 모두에게 유용한 최고의 WinDbg 책이네요. 강추합니다!
마지막으로, 이 책을 집필하느라 2년여 동안 수고하신 저자들의 노고에 진심으로 감사의 말씀을 전하고 싶습니다.

- 서우석 / Microsoft C# MVP, 디버그랩(http://www.debuglab.com) 운영자


[ 이 책의 구성 ]

1장에서는 WinDbg의 기본 개념에 대하여 설명한다. WinDbg를 사용하기 위하여 알아 두어야 하는 주변지식이나 용어들에 대한 내용이므로 가벼운 마음으로 훑어보면 된다.

2장에서는 WinDbg를 처음 사용한다고 가정하고 WinDbg를 실행시키는 방법부터 시작하여 초기 설정을 하고 간단한 디버깅을 해보는 것까지 설명한다. WinDbg로 응용 프로그램과 커널모드 드라이버를 어떻게 제어하는지 응용 프로그램이나 커널모드 드라이버의 내용을 어떻게 확인하는지 보게 될 것이다.

3장에서는 WinDbg로 문제를 분석하는 방법에 대하여 다룬다. 문제가 발생한 상황에서 어떤 식으로 원인을 찾아가는지 간단하게 살펴보기로 한다. 덤프파일을 분석하는 예제로 진행하기 때문에 덤프파일을 분석할 줄 모른다면 이 장을 참고하여 기본적인 분석 절차를 배울 수 있다.

4장에서는 유저모드에서 발생할 수 있는 여러 가지 문제상황들을 분석해 나가는 예를 보인다. 흔하게 발생하는 문제들로 잘못된 메모리 참조, 프로세스 행, 프로세스 대드락, 핸들릭, 메모리릭 등의 예제를 보인다. WinDbg를 비롯하여 다양한 툴들로 문제를 분석하고 원인을 찾아나가는 방법을 보게 될 것이다. 고급 주제로 들어가면 어셈블리도 참고해야 한다는 사실을 알게 될 것이다. 어셈블리에 대하여 잘 모르고 있었다면 이 장을 참고하여 기초적인 내용을 공부할 수 있다.

5장에서는 커널모드에서 발생할 수 있는 여러 가지 문제상황들을 해결해 나가는 예를 보인다. 커널모드에서 발생하는 문제들이란 사실 블루스크린을 의미한다. 블루스크린이 발생했다고 해서 다 같은 블루스크린이 아니라는 사실을 알게 될 것이다. 블루스크린마다 문제를 나타내는 번호와 메시지를 담고 있기 때문에 이것들의 대표적인 유형들을 예제로 마련하여 분석하는 방법을 보게 될 것이다.

6장에서는 WinDbg를 좀 더 편리하게 사용하는 방법과 디버깅에 도움을 주는 여러 툴들을 사용하는 방법을 설명한다. 사실 WinDbg는 기본적인 디버깅뿐만 아니라 디버깅을 도와주는 엄청난 기능들이 포함되어 있는 강력한 도구이다. 이런 엄청난 기능들을 모두 알고 있다면 디버깅하는 작업은 기본적인 방법만 알고 있을 때보다 훨씬 더 간단해 진다. 어떤 것들이 있는지 알지 못해서 못쓰는 것이 문제이므로 유용한 몇 가지를 소개해서 WinDbg의 편리한 기능을 활용하게 한다.

7장에서는 유용한 WinDbg 명령어들을 사용예제 중심으로 설명한다. 사용예제 중심이란 명령어 자체에 대한 설명 중심이 아니라는 뜻이다. 명령어는 대체로 다양한 기능을 수행할 수 있는데 이것들을 종합적으로 설명하다 보면 설명만 복잡해지고 이해도가 떨어지게 된다. 따라서 설명은 가급적 줄이고 사용예제를 도입하여 어떻게 사용하는지를 실제로 보여주는데 초점을 맞춘다.


[ 이 책의 대상 독자 ]

이 책은 윈도우용 소프트웨어를 개발하고 유지 관리하는 모든 일에 연관된 사람들을 대상으로 작성됐다. 전문적인 소프트웨어 개발자, 테스트 엔지니어, 기술지원 엔지니어가 대상이 될 수 있고, 이제 소프트웨어 개발을 배우기 시작하는 학생들이 대상이 될 수도 있다. 이 범주에 포함되면서 디버깅을 잘 모르고 있다면 이 책이 목표로 하는 정확한 대상이라고 할 수 있다. 디버깅을 이미 잘할 줄 아는 독자들은 디버깅 능력을 향상시키는 목적으로 이 책을 활용할 수 있다.

이 책의 독자는 기초 C/C++ 언어 지식, 기초 디버깅 지식, 운영체제 기초 지식을 알고 있다고 가정한다. 이 책의 모든 예제는 C/C++ 언어로 작성됐으므로 최소한 C/C++ 언어는 읽을 수 있어야 한다. 디버깅 경험은 비주얼 베이직이나 C/C++ 등을 이용해 개발하면서 간단한 디버깅을 해본 정도면 충분하다. WinDbg에 대한 사전 경험은 없어도 된다. WinDbg를 소개하면서 기초적인 사용법부터 설명할 것이다. 운영체제 기본 구조에 해당하는 프로세스, 스레드, 이벤트 등의 용어 정의는 별도로 하지 않는다.

저자/역자 소개

[ 저자 소개 ]

김성현
안철수연구소에서 10년간 V3Pro2002, V3Pro2004, V3 Internet Security 2007, SpyZero 2.0 등의 제품에 탑재되는 실시간 감시 필터 드라이버와 엔진 드라이버를 개발했고, 현재는 기반기술 팀에서 V3의 보안 기능을 향상시키는 연구를 진행하고 있다.

이태화
안철수 연구소의 기반기술 팀에서 파일 시스템 필터 드라이버와 다수의 보안 모듈을 개발했으며, 현재는 한국마이크로소프트 고객지원부에서 플랫폼 서버 기술지원을 담당하고 있다. 윈도우 운영체제에서 발생하는 다양한 문제점에 대한 해결 방법을 찾고 있으며, http://blogs.msdn.com/kocoreinternals/를 통해 윈도우의 내부, 디버깅 기법 등을 알리고자 한다.

김희준
안철수 연구소의 기반기술 팀에서 드라이버와 보안 모듈을 개발했고, 현재는 엔씨소프트의 보안 팀에서 개발 프로젝트를 진행하고 있다. 인터넷 커뮤니티에서 주최하는 오프라인 세미나를 통해 미니필터나 SoftICE, WinDbg에 대한 공개 강의를 진행했고, 관련 내용들과 기타 드라이버 및 개발 자료들을 운영 중인 http://insidekernel.net 개인 사이트로 공유하고 있다.

[ 저자 서문 ]

이 책은 기획에서 출간까지 약 2년의 시간이 걸렸다. 그 기간 동안 불행인지 다행인지 좋은 디버깅 서적이 많이 출간되었다. 불행으로 생각하면 디버깅에 관한 훌륭한 내용이 많이 담긴 책이 먼저 나와 버려서 이 책의 가치가 희석될 수 있다는 것이고, 다행으로 생각하면 WinDbg를 이용한 디버깅에 대해 이 책보다 쉽게 접근하는 책은 없었다는 것이다.

디버깅은 소프트웨어 개발에 있어서 매우 중요한 부분이지만 디버깅하는 방법을 진지하게 배운 사람은 드물 것이다. 우리는 늘 하던 대로 비주얼 스튜디오의 디버그 빌드를 실행해 디버깅을 하거나, 디버그 로그 메시지를 출력하면서 디버깅을 한다. 이 정도만 디버깅을 해도 디버깅을 잘 하는 편에 속하는 것이다. 하지만 디버깅을 할 수 있는 다른 도구를 알거나 몇 가지 방법을 더 배운다면 디버깅이 훨씬 간단해지면서 소프트웨어 개발과 관리의 생산성이 향상되는 경험을 할 수 있다.

WinDbg는 이런 도움을 줄 수 있는 가장 대표적인 도구다. 따라서 다른 디버깅 서적에서도 WinDbg를 사용하는 예를 종종 볼 수 있다. 하지만 WinDbg라는 도구를 어떻게 다루기 시작해야 하는지에 대한 내용은 별로 없었다. 그래서 WinDbg를 이용해 디버깅하는 방법을 차근차근 소개하면 좋을 것 같다는 생각을 갖게 됐다. WinDbg는 처음에 어떻게 다뤄야 하는지 직관적으로 알기가 쉽지 않다. 요즘처럼 화려한 유저 인터페이스의 소프트웨어가 난무하는 시대에 WinDbg는 시대에 뒤떨어진 유저 인터페이스를 가지고 있고, 다소 복잡해 보이는 명령 입력 방식을 취하고 있기 때문이다. 그래서 저자들은 WinDbg를 설치하고 실행하는 방법부터 그림을 통해 쉽게 배울 수 있는 책을 상상하곤 했었다. 그 고민의 결과로 결국에는 이 책을 완성하게 된 것이다.

이 책은 많은 사람이 디버깅이나 WinDbg에 대해 저자들에게 했던 질문을 정리했다고 볼 수 있다. 사람들의 질문이란 대부분 간단한 사용법 같은 것들인데, 간단한 사용법이 분산되고 정리되어 있지 않아서 질문이 반복된다는 사실이 가장 안타까웠다. 간단한 사용법이나 디버깅 팁들이 조목조목 분류되어 있고, 원하는 내용만 원하는 시점에 참조할 수 있는 가이드 북이 있다면 어느 정도 이런 문제가 해소될 것 같았다. 그래서 저자들은 의기투합을 했고 각자 가진 나름대로의 역량을 끌어 모아 이 책의 내용을 구성했다.

이 책이 많은 개발자와 IT 전문가에게 도움이 되기를 바란다. 저자가 처음 디버깅이라는 세상을 경험했을 때 놀랐던 기억을 많은 개발자가 경험하기를 바란다. 그 당시 저자는 많은 개발자가 디버깅을 아직 잘 모른다는 사실에 다시 한 번 놀랐다. 이 땅의 많은 개발자, 그리고 IT 전문가가 제품에 문제가 발생했을 때 이 책을 통해 해결의 실마리를 찾을 수 있게 되기를 바란다. 그리고 이 책의 공동 저자들이 우리나라의 기술력 향상에 조금이라도 도움이 되었다면 기쁠 것이다.

여기까지 내용을 정리하는 데 참으로 기나긴 여정을 걸어온 느낌이다. 2년이라는 시간이 짧지는 않은 시간이므로 그렇기도 하거니와, 이것도 창작의 작업인 만큼 나름대로 출산의 고통이 있었기 때문이다. 하지만 그런 것들을 참으면서 버틸 수 있었던 이유는 이 책을 집필하는 목표가 확고했기 때문이었다.

이 책의 목표는 명확하다. 더 많은 사람이 더 쉽게 디버깅을 할 수 있게 하는 것이다. 이 책이 여러분의 디버깅 능력을 향상시키는 데 조금이라도 더 보탬이 되었으면 한다.

목차

목차
  • 1장. WinDbg에 대해
    • 1.1 WinDbg란
      • 1.1.1_ WinDbg의 주요 기능
      • 1.1.2_ WinDbg의 용도
      • 1.1.3_ WinDbg와 SoftICE
    • 1.2 WinDbg 디버깅의 종류
      • 1.2.1_ 유저모드 디버깅과 커널모드 디버깅
      • 1.2.2_ 라이브 디버깅과 덤프 디버깅
      • 1.2.3_ 유저 덤프와 커널 덤프
    • 1.3 WinDbg 디버깅 용어
      • 1.3.1_ 디버거와 디버기
      • 1.3.2_ 블루스크린
      • 1.3.3_ 버그체크
      • 1.3.4_ 디버그 심볼 파일
    • 1.4 WinDbg 지원 범위
      • 1.4.1_ 윈도우 NT 계열 운영체제
      • 1.4.2_ 64비트 지원
    • 1.5 WinDbg 명령
      • 1.5.1_ WinDbg 명령이란
      • 1.5.2_ 명령줄 구분
      • 1.5.3_ 명령별 사용 조건
    • 1.6 다운로드와 설치
      • 1.6.1_ WinDbg 다운로드
      • 1.6.2_ WinDbg 설치
    • 1.7 정리
  • 2장. WinDbg 시작
    • 2.1 유저모드 라이브 디버깅
      • 2.1.1_ WinDbg 실행
      • 2.1.2_ 디버거 연결
      • 2.1.3_ 심볼 파일 로드
      • 2.1.4_ 실행과 정지
      • 2.1.5_ 브레이크 포인트 설정과 해제
      • 2.1.6_ 콜 스택 확인
      • 2.1.7_ 소스 연결해서 소스 창 열기
      • 2.1.8_ Trace, Step으로 진행
      • 2.1.9_ 지역변수 확인
      • 2.1.10_ 와치 창으로 전역변수 확인
    • 2.2 커널모드 라이브 디버깅
      • 2.2.1_ 디버거 시스템을 디버기 시스템에 붙이기
      • 2.2.2_ MyDrv.sys 드라이버 실행
      • 2.2.3_ 정지와 실행
      • 2.2.4_ 심볼 파일 로드
      • 2.2.5_ 브레이크 포인트 설정과 해제
      • 2.2.6_ 콜 스택 확인
      • 2.2.7_ 소스 연결해서 소스 창 열기
      • 2.2.8_ Trace, Seep으로 진행
      • 2.2.9_ 지역변수 확인
      • 2.2.10_ 와치 창으로 전역변수 확인
    • 2.3 정리
  • 3장. WinDbg로 디버깅하기
    • 3.1 유저모드 덤프 디버깅
      • 3.1.1_ 덤프 파일 수집
      • 3.1.2_ 덤프 파일 열기
      • 3.1.3_ 모듈 정보 보기
      • 3.1.4_ 심볼 맞추기
      • 3.1.5_ 콜 스택 보기
      • 3.1.6_ 로컬 창으로 변수 보기
      • 3.1.7_ 와치 창으로 메모리 보기
      • 3.1.8_ 메모리 창으로 메모리 보기
      • 3.1.9_ 프로세스와 스레드 보기
    • 3.2 커널모드 덤프 디버깅
      • 3.2.1_ 덤프 파일 수집
      • 3.2.2_ 덤프 파일 열어보기
      • 3.2.3_ !analyze -v 메시지 보기
      • 3.2.4_ 모듈 정보 보기
      • 3.2.5_ 심볼 맞추기
      • 3.2.6_ 콜 스택 보기
      • 3.2.7_ 로컬 창으로 변수 보기
      • 3.2.8_ 와치 창으로 메모리 보기
      • 3.2.9_ 메모리 창으로 메모리 보기
    • 3.3 정리
  • 4장. 유저모드 디버깅 케이스 스터디
    • 4.1 기본 케이스 스터디
      • 4.1.1_ 잘못된 메모리 사용
      • 4.1.2_ 프로세스의 CPU 사용률이 100%를 기록할 때
      • 4.1.3_ 데드락이 발생해 멈춘 경우
      • 4.1.4_ 핸들 누수
      • 4.1.5_ 메모리 누수
      • 4.1.6_ 버퍼 오버플로우
    • 4.2 어셈블리와 스택의 이해
      • 4.2.1_ 어셈블리 기초
      • 4.2.2_ 스택의 이해
      • 4.2.3_ 호출 규칙
    • 4.3 고급 케이스 스터디
      • 4.3.1_ 예제 1: 잘못된 파라미터 전달
      • 4.3.2_ 예제 2: Drwtsn32 로그 파일 분석
      • 4.3.3_ 예제 3: MAP 파일을 이용한 분석
    • 4.4 정리
  • 5장. 커널모드 디버깅 케이스 스터디
    • 5.1 기본 케이스 스터디
      • 5.1.1_ BugCheck 0x50
      • 5.1.2_ BugCheck 0xD6
      • 5.1.3_ BugCheck 0xC1
      • 5.1.4_ BugCheck 0xC4-60
      • 5.1.5_ BugCheck 0xCE
      • 5.1.6_ BugCheck 0x7F
      • 5.1.7_ BugCheck 0xD1
      • 5.1.8_ BugCheck 0xF7
      • 5.1.9_ 커널모드 행 디버깅
      • 5.1.10_ 커널모드 데드락 디버깅
    • 5.2 고급 케이스 스터디
      • 5.2.1_ BugCheck 0xA(분석 가능한 예제)
      • 5.2.2_ BugCheck 0xA(분석 불가능한 예제)
      • 5.2.3_ BugCheck 0x19(분석 가능한 예제)
      • 5.2.4_ BugCheck 0x19(분석 불가능한 예제)
      • 5.2.5_ BugCheck 0x8E
    • 5.3 드라이버 확인 프로그램
      • 5.3.1_ 드라이버 확인 프로그램 실행
      • 5.3.2_ 명령 프롬프트에서 설정
    • 5.4 정리
  • 6장. 고급 디버깅
    • 6.1 WinDbg 사용팁
      • 6.1.1_ 조건 브레이크 포인트
      • 6.1.2_ 심볼 스토어 생성
      • 6.1.3_ 유저모드 원격 디버깅
      • 6.1.4_ 커널모드 원격 디버깅
      • 6.1.5_ 커널모드 디버깅으로 유저모드 디버깅하기 1
      • 6.1.6_ 커널모드 디버깅으로 유저모드 디버깅하기 2
      • 6.1.7_ Event ID 2019 비페이징 풀 부족 원인 찾기
    • 6.2 WinDbg Tools
      • 6.2.1_ breakin.exe
      • 6.2.2_ logger.exe, logviewer.exe
      • 6.2.3_ ADPlus.vbs
    • 6.3 WinDbg 스크립트
      • 6.3.1_ 첫 번째 스크립트
      • 6.3.2_ 두 번째 스크립트
    • 6.4 WinDbg 확장 DLL
      • 6.4.1_ 확장 DLL 만들기
      • 6.4.2_ 확장 DLL 예제
    • 6.5 정리
  • 7장. WinDbg 명령
    • 7.1 일반 명령
      • 7.1.1_ dt(Display Type)
      • 7.1.2_ s(Search Memory)
      • 7.1.3_ ds, dS(Display String)
      • 7.1.4_ da, du(Display Memory: ASCII, Unicode)
      • 7.1.5_ dl(Display Linked List)
      • 7.1.6_ dds(Display Words and Symbols)
      • 7.1.7_ x(Examine Symbols)
      • 7.1.8_ uf(Unassemble Function)
      • 7.1.9_ ub(Unassemble - b parameter)
      • 7.1.10_ ?(Evaluate Expression)
    • 7.2 메타 명령
      • 7.2.1_ .kdfiles(Set Driver Replacement Map)
      • 7.2.2_ .reboot(Reboot Target Computer)
      • 7.2.3_ .crash(Force System Crash)
      • 7.2.4_ .dump(Create Dump File)
      • 7.2.5_ .hh(Open HTML Help File)
      • 7.2.6_ .symfix(Set Symbol Store Path)
      • 7.2.7_ .reload(Reload Module)
      • 7.2.8 .enableunicode(Enable Unicode Display)
      • 7.2.9 .enablelong_status(Enable Long Integer Display)
      • 7.2.10_ .formats(Show Number Formats)
    • 7.3 확장 명령
      • 7.3.1_ !object
      • 7.3.2_ !handle
      • 7.3.3_ !process
      • 7.3.4_ !stacks
      • 7.3.5_ !drvobj
      • 7.3.6_ !devobj
      • 7.3.7_ !devstack
      • 7.3.8_ !fileobj
      • 7.3.9 !foreach_module
      • 7.3.10_ !vm
      • 7.3.11_ !sym
      • 7.3.12_ !poolfind

관련 블로그 글

WinDbg와 완벽가이드와 윈도우 디버깅 실전매뉴얼 출간

사용자 삽입 이미지

WinDbg로 쉽게 배우는 Windows Debugging
김성현 이태화 김희준 지음
윈도우 시스템 프로그래밍 시리즈 6
564페이지 | 35,000원 | 2009년 7월 17일 출간 예정


[##_1L|1174626091.gif|width="98" height="110" alt="사용자 삽입 이미지"|_##]작년 디버깅 개발자들의 마음을 설레게 한 『실전 윈도우 디버깅』을 기억하시나요? 윈도우 애플리케이션부터 시스템 프로그래밍까지 메모리(스택, 힙) 손상과 자원 누수, 크래시 분석, 보안 문제, 서버/클라이언트, 동기화 문제 등의 근본 원인을 파악하는 기법과 문제 탐지에 사용할 수 있는 강력한 디버깅 툴의 활용법과 전용 디버깅 명령 작성법을 소개하는 책. 이라는 설명으로 원서와 같은 해에 번역서를 출간해 많은 독자들이 사랑해주셨습니다.

이 책에 대해서는 워낙 원서 내용에 무게감이 많이 실려서 윈도우 디버깅에 대한 심도 깊은 내용을 원한 독자들의 갈증을 풀어줬습니다. 단 하나, 초보 디버깅에 입문하는 분들께는 살짝 어렵다는 아쉬움도 있었지요.

우리나라 개발자가 현업과 실무자의 관점에서 풀어낸 토종 윈도우 디버깅 책!!!

"디버깅"이라는 게 단순한 deBUG 작업을 뛰어넘어 최근에는 리버싱, 보안, 테스팅, 시스템 관리 등 수많은 일에 관여하는 폭넓은 개발자의 높은 관심을 끌고 있습니다. 이에 수년 간 보안 소프트웨어 회사에서 디버깅 분야의 많은 경험을 쌓으신 저자 세 분이 모여 현장 경험을 그대로 녹여낸 초급 개발자부터 고급 디버깅 전문가까지 읽을 수 있는 윈도우 디버깅의 얼티밋 가이드를 완성하셨습니다.

다년간의 보안 소프트웨어 개발로 축적된 디버깅 기술과 윈도우 내부 구조에 대한 지식이 깊은 저자들이 지은 이 책은 윈도우 디버깅을 시작하거나 이미 어느 정도 알고 있는 프로그래머나 시스템 엔지니어들이 그 방법을 배울 수 있어 아주 훌륭하다.
- 김관현 / 마이크로소프트 기술지원부 부장
애플리케이션 개발자든 커널 프로그램 개발자든 간에, 수년간에 걸쳐 세 저자들이 실무에서 겪은 실질적이고 체계적인 방식으로 효율적인 프로그램 디버깅을 공개한 이 책에서 큰 가이드를 얻을 수 있으리라 믿는다. 이 책에서는 문제의 이면에 감춰진 실제 해결책을 찾는 데 필요한 많은 구체적인 케이스가 제공되며, 또한 디버깅 툴을 완벽히 이해하는 데 필요한 다양한 주제와 디버깅 툴의 기능을 확장하는 방법을 예시한다.
- 김점갑 / 안철수연구소 기반기술팀 책임연구원
다행스럽게도 국내 저자들에 의해 만들어진 이 황금 같은 디버깅 책이 초심의 마음을 잃지 않은 독자들에게 자신의 열정 어린 탐닉을 만끽할 수 있게 하는 좋은 조언자가 되어 주리라 생각한다.
- 정덕영 /『Windows 구조와 원리』 저자
지금까지 이렇게 쉽게 WinDbg의 모든 기능을 설명한 책은 없었습니다. 디버깅 고수인 저자들의 노하우가 고스란히 녹아있고 명령 중심이 아닌 문제 해결 방식의 접근을 통해 암기식 학습 방법을 탈피함으로써 누구나 쉽게 WinDbg의 강력한 기능을 사용할 수 있게 설명합니다.
- 서우석 / 마이크로소프트 C# MVP, 디버그랩 운영자

이 책은 지난 2년간 저자들이 꼼꼼히 기록해놓은 디버깅 관련 절대비급서라고 할 수 있습니다.

WinDbg 활용 가이드
최근 가장 많이 쓰는 무료 디버깅 툴 WinDbg를 기반으로 윈도우 디버깅을 설명함으로써 무엇보다도 WinDbg 사용법을 몰라 어려움을 많이 겪어온 독자들의 궁금증을 모두 풀어줬다고 해도 지나친 말이 아닙니다.

실전에서 우러나온 현장 예제로 쉽게 배우는 디버깅
기술 발전에 있어서 책이 차지하는 의미는, 마치 우리가 날마다 숨쉬는 공기와도 같습니다. 책을 읽지 않는 이들에겐 그 중요성이 피부에 와닿지 않겠지만, 서적은 분명 지식과 문화, 기술 보급에 이바지합니다. 이처럼 좋은 책이 나옴으로써 어렵게만 느껴졌던 기술과 노하우를 독자는 손쉽게 익히게 되죠. 이 책에서는 좀더 쉬운 방법, 특히 실전 예제로 설명함으로써 머리로만 익히던 디버깅 기술을 몸소 체험할 수 있는 기회를 얻게 됩니다.

덤프파일 활용에 관한 실전 팁
최근 저희 출판사에서 또 한 권의 디버깅 관련 서적을 진행하면서 원저자에게 덤프파일을 요청했으나, 안타깝게도 저장해두지 못했다는 이야기를 들었습니다. 덤프파일은 윈도우에서 응용프로그램에 문제가 발생하거나 공포의 블루스크린이 뜰때 생성되는 크래쉬 덤프를 말합니다. 무엇이든 복기를 하는 것이 중요합니다. 누구나 실수를 하게 마련이고 문제가 생기게 마련입니다. 허나 같은 실수를 되풀이해서는 안 될 말이지요. 어디서 문제가 발생했는지 되짚어서 분석하고 원인을 찾아낸 후 향후 문제 발생 가능성에 대비하는 것이 가장 중요합니다. 저희 책에서는 본문 내용을 직접 따라가며 명령어를 실행해볼 수 있는 덤프 파일을 부록 CD에 제공해드립니다.
 

[ 이 책에서 다루는 내용 ]

■ WinDbg 사용법과 다양한 디버깅 예제
■ 예제를 통한 유저모드 디버깅과 커널 모드 디버깅 케이스 스터디
■ 덤프 파일 활용에 관한 실전 팁
■ 성능 로그를 통한 디버깅 기법
■ Perfmon을 활용한 시스템 퍼포먼스 측정 방법
■ 각종 유틸리티를 활용한 문제 해결 방법의 소개
■ 쉬운 디버깅과 유지보수를 위한 팀 협업 개발환경을 갖추는 방법
■ 초보자를 위한 디버깅에 필요한 어셈블리와 호출규약, 스택의 기초
■ 실전에 많이 쓰이는 WinDbg 명령어 소개와 그 활용방법, 예제 소개

사용자 삽입 이미지
책에 쓰인 일러스트입니다. 저자 세분의 캐리커처(?)는 아닌 듯싶지만, 여하튼 저자 김성현님, 이태화님, 김희준님이 디버깅 책을 재미있게 풀어주실 것만은 분명할 듯하죠?
사용자 삽입 이미지

왼쪽부터 저자 세 분의 사진입니다. 모두 안철수 연구소에서 한솥밥을 드시다가 지금은 3개 회사로 뿔뿔이 흩어지셨네요. 아직 고향을 지키시는 김성현 차장님, 마이크로소프트 이태화 대리님, 엔씨소프트에 계시는 김희준 과장님이십니다. 제가 이 세 분 저자를 처음 만난 게 지난 4월이었는데요. 어느덧 3개월만에 에이콘의 저서 한 권을 출간하게 됐습니다. 훌륭히 책 저술 해주시고, 꼼꼼히 검토하고 진행해주신 세 분 저자님께 진심으로 감사드립니다. 모두 정말 너무 열심이시고 말 한 마디 건네는 마음 씀씀이도 너무 깊으셔서 좋은 필자분들을 모시게 되어 기쁠 따름입니다. 앞으로 김성현님은 또 한권의 엄청난 화제의 Big Book으로 올 하반기쯤 저희를 찾아올 예정이니 기대해주세요.

그리고 한 가지 더 광고.
에이콘 윈도우 시스템 프로그래밍 시리즈를 시작합니다. 사실 시작이라는 말엔 어폐가 있네요. 이미 5권의 관련서를 갖고 있으니까요. 이 책을 계기로 시리즈를 묶어봤습니다. 저희 윈도우 시스템 시리즈에서는 윈도우 개발, 시스템 관리, 리버싱, 디바이스 드라이버 등 윈도우 개발의 아랫단을 들여볼 수 있는 기회를 드릴 예정입니다. 그냥 윈도우 프로그래밍 시리즈가 아니라, 윈도우 "시스템" 프로그래밍이라 이름 붙인 것은 앞으로 이 분야와 관련한 쟁쟁한 책들을 이미 확보했다는 얘기겠죠? 관심 많이 많이 가져주시구요. 이 시리즈를 이끌어가실 분은 저희 책 『WDF: 윈도우를 위한 차세대 통합 드라이버 개발 모델』, 『실전 윈도우 디버깅: 애플리케이션에서 시스템 프로그래밍까지 윈도우 프로그래밍 오류 분석과 툴 활용 기법』을 번역하신 안철수 연구소 김점갑 팀장님이십니다. 세 분 저자를 소개해주시기도 하셨으니, 진정한 시리즈 에디터시죠. 앞으로 저희는 시리즈 에디터와 좋은 책 많이 선보이겠습니다. 꾸벅. :)

이 책 『WinDbg로 쉽게 배우는 Windows Debugging』는 지금 YES24, 교보문고, 강컴, 알라딘, 인터파크에서 예약 판매중입니다. 이제는 역사 속으로 사라진 빨간 날 7월 17일에 출간됩니다. (물론 쉬진 않아도 제헌절의 본뜻은 새겨야죠 :))
 

CC

크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

 1쇄 오류/오탈자 

[ p267 아래에서 5행 ]
windb → windbg