Top

메모리 덤프 분석과 활용 제1권 [윈도우 디버깅 대가의 비법 노트]

  • 원서명Memory Dump Analysis Anthology, Volume 1 (ISBN 9780955832802)
  • 지은이드미트리 보스토코프
  • 옮긴이황용석
  • ISBN : 9788960771284
  • 40,000원
  • 2010년 03월 30일 펴냄
  • 페이퍼백 | 772쪽 | 188*250mm
  • 시리즈 : 윈도우 시스템 프로그래밍

책 소개

이 책은 2006~2007년 DumpAnalysis.org 블로그에 포스팅된 글 중 일부를 골라 교정과 편집을 하고, 그 내용을 서로 참조해 주제별로 엮은 것이다. 참고 문헌으로 사용되길 바라며 앞으로의 내 책에서도 인용할 예정이다.

이 책은 다음과 같은 경우에 유용하게 사용될 수 있다.

■ 윈도우 플랫폼에서 제품을 개발하고 유지 보수하는 소프트웨어 엔지니어
■ 기술 지원 부서와 복잡한 소프트웨어 이슈를 다루는 에스컬레이션(escalation) 엔지니어
■ 또한 일반 윈도우 사용자가 흥미를 느끼는 글도 있을 것이다.


[ 이 책에서 다루는 내용 ]

■ 실무에서 경험하는 다양한 크래시 덤프 분석 패턴
■ 초보자를 위한 각 사례별 크래시 덤프 분석 기법
■ 각 사례별 덤프 분석 도구의 사용법
■ 다양한 관점에서 바라보는 크래시 덤프 파일의 분석 기법


[ 추천의 글 ]

국내외에 많은 디버깅 관련 출판물이 있지만 대부분 내용이 입문서 수준이거나 아니면 매우 포괄적인 주제를 다루는 개념서에 그치고 있다. 반면에 이 책은 디버깅을 할 때 직면하는 일반적인 사항은 물론, 손상된 덤프와 메모리에서부터 단계적으로 원인 분석을 위한 다양한 기법에 이르기까지, 개발자가 쉽게 경험할 수 없었던 디버깅 관련 내용을 주제 별로 심도 있게 때로는 흥미진진하게 다룬다. 윈도우 프로그래밍이나 시스템 프로그래밍 등에 관심 있거나 관련 일을 하는 개발자라면 누구에게나 가장 실용적이며 실무적인 안내서 역할을 해주는 길잡이가 될 것이다.

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

저자/역자 소개

[ 저자 소개 ]

드미트리 보스토코프(Dmitry Vostokov)

2003년 10월 14일 이전
소프트웨어 엔지니어링 분야에서 경력이 15년을 넘는 소프트웨어 개발 컨설턴트다. 다양한 분야의 40개가 넘는 소프트웨어 개발 프로젝트에 참여했으며, 세계의 많은 회사가 사용하는 소프트웨어 품질도구를 공동으로 디자인하고 구현했다. 보잉(Boeing Commercial Airplanes Group)에서 기업 문서 출판 애플리케이션 아키텍트였다. 그는 음성 인식과 확인, 음성 합성을 위한 윈도우 애플리케이션 분야의 선구자로 설계와 개발자로서 자신의 전문 경력을 쌓기 시작했다.

2003년 10월 14일 이후
드미트리는 시트릭스 사에 에스컬레이션(escalation) 개발 분석 엔지니어로 입사했다. 그 후 관리직으로 옮기기 전까지 EMEA(Europe, Middle East and Africa) 개발분석 팀의 리더였다. 현재 지위는 개발분석 EMEA 기술관리자이며, 아일랜드 더블린에서 일하며 살고 있다. 몇 개의 시트릭스 디버깅과 문제 해결용 툴을 개발했고, 현재는 크래시 덤프 분석과 언매니지드(unmanaged) 코드, 디바이스 드라이버, 문제 해결용 툴의 아키텍처와 디자인 개발에 관한 책을 쓰고 있다. 독서광인 드미트리는 현재 다음과 같은 블로그를 운영 중이다.

크래시 덤프 분석(http://www.DumpAnalysis.org)
매니지먼트 비트와 팁(http://www.ManagementBits.com)
교양있는 과학자(http://www.LiterateScientist.com)
소프트웨어 제너럴리스트(http://www.SoftwareGeneralist.com)


[ 옮긴이의 말 ]

디버깅은 소프트웨어를 개발함에 있어 중요한 요소다. 종종 디버깅이 소홀히 다뤄지긴 하지만, 사실 그렇지 않다. 한 연구 결과에서는 ‘디버깅 등의 작업이 전체 소프트웨어 개발 주기에서 50%를 차지한다’고까지 조사됐다. 소프트웨어 구현에만 한정해 생각한다면 개발자 최고의 덕목은 개발 속도일 것이다. 요구사항에 부합하는 것은 당연하고 안정적으로 동작도 해야 한다. 개발 기간을 단축하려면 개발 기간의 50%를 차지하는 디버깅(결함을 해결하는 광의적 의미)과정을 줄이는 수밖에 없다. 이 과정을 줄이려면 애초에 결함을 만들지 않는 능력과, 결함을 발견하고 최대한 빨리 해결하는 능력이 필요하다. 이런 능력은 눈에 보이지 않지만 결국 생산성의 차이로 나타난다.

메모리 덤프 분석은 디버깅 과정 중의 하나로 고급 개발자가 갖춰야 할 여러 능력 중 하나다. 사실 메모리 덤프를 분석할 능력이 있다는 것은 많은 것을 의미한다. 스택이나 힙, 레지스터, 호출규약, 어셈블리어 같은 시스템에 대한 기본적인 내용을 이해하고 정확히 체득하고 있음을 뜻하기 때문이다. 시스템에 대해 전혀 몰라도 애플리케이션 개발자로 잘 살아갈 수는 있지만, 시스템을 이해하는 사람과 그렇지 못한 사람 간에는 많은 차이가 난다. 영화 매트릭스에 비유하면 매트릭스 내부를 알고 있는 주인공들과 매트릭스에 갇혀 사는 사람들 정도 차이가 난다고 하면 너무 큰 비약일까?

C/C++ 애플리케이션을 디버깅을 함에 있어 메모리 덤프 분석을 꼭 할 수 있어야 하는 것은 아니다. 많은 시간이 들긴 하지만 툴이 자동 분석해 주는 결과와 로그 파일, printf, 육감 등으로 문제를 해결해 나갈 수도 있다. 그러다 보니 많은 개발자가 메모리 덤프 분석에 대해 체계적인 교육을 받거나 분석 경험을 쌓을 계기가 드물다. 또한 메모리 덤프에 대해 소정의 교육을 받았더라도 막상 필요한 때에는 어찌할 줄 모르는 경우도 많다. 게다가 공부를 시작해보고 싶어도 스승이 없고, 마땅한 교재도 없고, 막막하기만 경우가 부지기수다.

이 책은 바로 이 시점, 즉 애플리케이션 개발은 어느 정도 하는데, 덤프 분석을 어디서부터 어떻게 공부해야 할지 모르는 개발자에게 아주 훌륭한 가이드가 될 것이다. 먼저, 덤프 분석에 첫 발을 디디는 사람들을 위해 많은 그림과 스크린 샷으로 기본 개념을 친절하게 설명한다. 그리고 덤프를 생성하는 방법과 받았을 때 해야 할 일들을 체계적으로 정리하고, 다양한 사례와 예제로 하나하나 자세히 설명하며, 덤프 유형별로 충분한 사례를 들며 케이스 바이 케이스로 설명한다. 또한 빈번히 발생하는 덤프를 패턴화해 체계적으로 대응할 수 있도록 접근하고, 반대로 나쁜 케이스를 안티 패턴으로 정리해 오류에 빠지는 버릇을 고칠 수 있는 계기를 만들어 준다. 책의 후반부에는 저자가 행한 상식을 깨는 충격적 시도를 보여준다. 이를 통해 덤프를 바라보는 새로운 시각이 생기고 머리를 환기시킬 수 있는 계기가 될 것이다.

이 책을 번역한 덕분에 메모리 덤프 분석에 대해 갖고 있던 지식을 체계적으로 정리한 계기가 됐다. 본격적으로 디버깅의 세계로 가는 길의 이정표가 되는 주옥 같은 정보가 담겨 있는 이 책은 덤프 분석의 세계에 입문하고자 하는 개발자에게 필독서가 될 거라 확신한다.


[ 옮긴이 소개 ]

황용석
건국대학교 항공우주공학과와 동 대학원을 졸업했다. 아버지의 지원으로 컴퓨터를 일찍 접해 국민학교 시절 친구들과 함께 MSX 메모리 덤프를 뜨기도 하였고, 중학시절에는 C언어를 독학했다. 학부시절 국방과학연구소의 플라이트 시뮬레이터 개발 프로젝트에 참여하게 되면서부터 본격적으로 직업 개발자(?)의 길을 걷게 됐다. 현재는 안철수연구소 기반기술 팀에서 클라우드 컴퓨팅 기반의 보안 시스템과 사전 방역 엔진 드라이버 등을 개발 중이다.

목차

목차
  • 1장 크래시 덤프
    • 크래시 덤프란?
    • 올바른 크래시 덤프
    • 크래시란?
    • 행이란?
    • 심볼 파일이란?
    • 크래시와 행의 차이
    • 선행적 크래시 덤프
  • 2장 전문적인 크래시 덤프 분석
    • 미니 덤프 분석
      • 스크립트와 WinDbg 명령
      • 컴포넌트 식별
      • 로 스택 데이터 분석
      • 심볼과 이미지
    • 인터럽트와 예외에 대한 설명
      • 예외 설명에 앞서
      • X86 인터럽트
      • x64 인터럽트
      • 인터럽트 프레임과 스택 재구성
      • X86 트랩 명령
      • x64 트랩 명령
      • 유저 모드의 예외
      • 첫 번째와 두 번째 예외를 구별하는 방법
      • 포스트모텀 디버거는 누가 호출하는가?
      • 비스타 에러 리포팅의 구조
      • 페이지 폴트에 대한 다른 시각
    • 몇 가지 버그체크
      • NMIHARDWAREFAILURE
      • IRQLNOTLESSOREQUAL
      • KERNELMODEEXCEPTIONNOTHANDLED
      • KMODEEXCEPTIONNOT_HANDLED
      • SYSTEMTHREADEXCEPTIONNOTHANDLED
      • CAFF
      • CF
    • 스택 트레이스를 재구성하는 방법
    • WinDbg 팁과 트릭
      • 덤프에서 문자열 찾기
      • 프로세스를 디버깅하는 중에 Win32 API 추적
      • 익스포트된 NTDLL과 커널 구조체
      • 간단한 리스트 탐색
      • 스레드 일시 중지
      • 힙 스택 트레이스
      • 하이퍼텍스트 명령
      • 행 분석을 빠르게
      • 삼중 역참조
      • 건초 더미에서 바늘 찾기
      • 스택 트레이스 추정하기
      • 없는 심볼 정보 복사
      • 심볼 메시지 해결
      • 태그 검색
      • 오래된 덤프, 새로운 익스텐션
      • 객체 이름과 대기 중인 스레드
      • 가상 이미지에서의 메모리 덤프
      • 프로세스 필터링
    • WinDbg 스크립트
      • 첫 번째 스크립트
      • 기타 WinDbg 스크립트
      • 데드락과 크리티컬 섹션
      • 보안 문제
      • 수백 개의 크래시 덤프
      • 매개변수를 가진 스크립트
      • 보안 이슈와 스크립트
      • 모든 스레드의 로 스택 덤프(프로세스 덤프)
      • 모든 스레드의 로 스택 덤프(컴플리트 덤프)
    • 사례 연구
    • 코드 안의 루프 탐지
    • 크래시 덤프 분석 체크리스트
    • 크래시 덤프 분석 포스터(HTML 버전)
  • 3장 크래시 덤프 분석 패턴
    • 다중 예외
    • 동적 메모리 훼손
    • 긍정 오류 덤프
    • 외측 손상
    • 최적화된 코드
    • 유효하지 않은 포인터
    • 일치하지 않는 덤프
    • 숨겨진 예외
    • 데드락(크리티컬 섹션)
    • 변화된 환경
    • 부정확한 스택 트레이스
    • OMAP 코드 최적화
    • 컴포넌트 심볼 없음
    • 불충분한 메모리(커밋된 메모리)
    • 스파이킹 스레드
    • 모듈 다양성
    • 스택 오버플로우(커널)
    • 데드락(익스큐티브 리소스)
    • 불충분한 메모리(핸들 릭)
    • 관리된 코드 예외
    • 잘려진 덤프
    • 스레드 대기 시간
    • 데드락(혼합된 객체들)
    • 메모리 누수(프로세스 힙)
    • 잃어버린 스레드
    • 알려지지 않은 컴포넌트
    • 메모리 누수(닷넷 힙)
    • 이중 해제(프로세스 힙)
    • 이중 해제(커널 풀)
    • 우연히 일치하는 심볼 정보
    • 스택 트레이스
    • 가상화된 프로세스(WOW64)
    • 스택 트레이스 모음
    • 결합된 프로세스
    • 극심한 경쟁
    • 우연한 락
    • 수동적인 스레드(유저 공간)
    • 메인 스레드
    • 불충분한 메모리(커널 풀)
    • 분주한 시스템
    • 역사적 정보
    • IRP 분포 이상
    • 지역 버퍼 오버플로우
    • 수동적인 시스템 스레드(커널 공간)
    • 초기 크래시 덤프
    • 후킹된 함수
    • 사용자 정의 예외 핸들러
    • 데드락(LPC)
    • 특별한 스택 트레이스
    • 수동 덤프(커널)
    • 대기 체인(일반적인)
    • 수동 덤프(프로세스)
    • 대기 체인(크리티컬 섹션)
  • 4장 크래시 덤프 분석 안티 패턴
    • 외래 컴포넌트
    • ZIPPOCRICY
    • 입소문
    • 잘못된 덤프
    • 문제 기술서 무시
    • 크래시 덤프가 필요한데...
    • ‘~이다’의 사용
    • 축약어에 속다
  • 5장 과학적 접근
    • 메모리 덤프 - 수학적 정의
    • 추상 공간에 꼬여있는 끈과 같은 스레드
    • 메모리 덤프 분석이란?
    • 메모릴리온과 쿼드메모릴리온
    • 크래시 덤프의 네 가지 원인
    • 복잡성과 메모리 덤프
    • 소프트웨어 결함이란?
  • 6장 재미있는 크래시 덤프
    • 덤프 분석과 음성 인식
    • 덤프와 함께 짧은 메시지 보내기
    • 계산기도 되는 WinDbg
    • 덤프와 디버거, 가상화
    • 뮤지컬 덤프
    • 디버거를 디버깅하기
    • 뮤지컬 덤프: Dump2Wave
    • 덤프 토모그래피
    • 가장 작은 프로그램
    • 프로세스 공간에서의 음성
    • 크래시 덤프 분석 명함
    • 컴퓨터 메모리 듣기
    • 메모리 덤프 가시화
    • 메모리 누수 가시화
    • 컴퓨터 메모리 그리기
    • 유니코드 보기
    • 2진에서 10진으로의 변환법 가르치기
    • 크래시 덤프와 글로벌 음모
  • 7장 GDB와 WinDbg
    • AT&T와 인텔 구문
    • 설치
    • 디스어셈블러
    • 스택 트레이스(백 트레이스)
    • 지역변수
  • 8장 소프트웨어 트러블슈팅
    • 네 개의 기둥
    • 5개의 황금 룰
    • 비판적인 사고
    • 디버깅할 때의 트러블슈팅
  • 9장 시트릭스 사
    • 풀태그
    • 시트릭스 사의 서비스 목록
    • 시트릭스 사의 씬와이어 리버스 엔지니어링
  • 10장 보안
    • 메모리 시각화
    • WinDbg는 개인 정보 친화적
    • 크래시 덤프와 보안
  • 11장 크래시 덤프의 근원
    • JIT 서비스 디버깅
    • 비스타에서의 지역 크래시 덤프
    • COM+ 크래시 덤프
    • userdump.exe에 대한 마이크로소프트 사의 기사 정정
    • 어디서 발생한 크래시 덤프인가?
    • 비스타의 사용자 정의 포스트모텀 디버거
    • 비스타에서 Dr. Watson의 부활
    • 프로세스 충돌 - 수동으로 덤프 얻기
    • Dr. Watson 업그레이드
    • savedump.exe와 페이지 파일
    • 비스타 덤프하기
    • 중단 없이 프로세스 덤프하기
    • 64비트에서의 userdump.exe
    • X64 윈도우에서의 NTSD
    • 덤프가 필요한가요? 공통 유스케이스
  • 12장 툴
    • 엑셀을 사용한 메모리 덤프 분석
    • testdefaultdebugger.net
    • 심볼 서버의 단점
    • StressPrinters: 강제 프린터 자동 생성
    • 인스턴트 덤프(JIT 프로세스 덤퍼)
    • TestDefaultDebugger
    • DumpAlerts
    • DumpDepends
    • 덤프 모니터 슈트
    • SystemDump
  • 13장 기타 여러 가지
    • KiFastSystemCallRet이란?
    • I/O 컴플리션 포트의 이해
    • 심볼 파일 경고문
    • 비스타에서 윈도우 서비스 크래시 덤프
    • 커널 공간으로 가는 길
    • 메모리 덤프 분석가 면접용 질문
    • 디버깅할 때 듣기 좋은 음악
    • PDBFinder
    • 프로세스가 조용히 죽는 경우
    • ASLR: 주소 공간 레이아웃 랜덤화
    • 비스타에서 프로세스와 스레드의 시작
    • 단일 프로세서 머신에서의 경쟁 조건
    • ZW*와 NT* 함수 다시 보기
    • 프로그래머 유니버설리스
    • 닥터 왓슨 로그 분석
    • 디버깅 이후의 난제
    • 크래시 덤프 분석 스타일
    • 비주얼 스튜디오에서 크래시 덤프 분석하기
    • 64비트 덤프에 있는 32비트 스택
    • 어셈피디아
    • WINE이 크래시 덤프 분석에 도움이 되는 이유
    • 레거시 디버깅의 공포
    • UML과 디바이스 드라이버
    • 통계학: 모든 프로세스에 걸쳐서 CPU가 100%인 경우
  • 부록 A
    • 크래시 덤프 분석 포털
  • 부록 B

도서 오류 신고

도서 오류 신고

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

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

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