메모리 덤프 분석과 활용 제1권(에이콘 윈도우 시스템 프로그래밍 시리즈 7)
『메모리 덤프 분석과 활용 』제 1권. 이 책은 2006~2007년 DumpAnalysis.org 블로그에 포스팅된 글 중 일부를 골라 교정과 편집을 하고, 그 내용을 서로 참조해 주제별로 엮은 것이다. 실무에서 경험하는 다양한 크래시 덤프 분석 패턴, 초보자를 위한 각 사례별 크래시 덤프 분석 기법, 각 사례별 덤프 분석 도구의 사용법, 다양한 관점에서 바라보는 크래시 덤프 파일의 분석 기법 등을 담았다.
Couldn't load pickup availability
출판사 리뷰
출판사 리뷰
이 책은 다음과 같은 경우에 유용하게 사용될 수 있다.
■ 윈도우 플랫폼에서 제품을 개발하고 유지 보수하는 소프트웨어 엔지니어
■ 기술 지원 부서와 복잡한 소프트웨어 이슈를 다루는 에스컬레이션(escalation) 엔지니어
■ 또한 일반 윈도우 사용자가 흥미를 느끼는 글도 있을 것이다.
★ 이 책에서 다루는 내용 ★
■ 실무에서 경험하는 다양한 크래시 덤프 분석 패턴
■ 초보자를 위한 각 사례별 크래시 덤프 분석 기법
■ 각 사례별 덤프 분석 도구의 사용법
■ 다양한 관점에서 바라보는 크래시 덤프 파일의 분석 기법
★ 추천의 글 ★
국내외에 많은 디버깅 관련 출판물이 있지만 대부분 내용이 입문서 수준이거나 아니면 매우 포괄적인 주제를 다루는 개념서에 그치고 있다. 반면에 이 책은 디버깅을 할 때 직면하는 일반적인 사항은 물론, 손상된 덤프와 메모리에서부터 단계적으로 원인 분석을 위한 다양한 기법에 이르기까지, 개발자가 쉽게 경험할 수 없었던 디버깅 관련 내용을 주제 별로 심도 있게 때로는 흥미진진하게 다룬다. 윈도우 프로그래밍이나 시스템 프로그래밍 등에 관심 있거나 관련 일을 하는 개발자라면 누구에게나 가장 실용적이며 실무적인 안내서 역할을 해주는 길잡이가 될 것이다.
김점갑 / 안철수 연구소 기반기술팀 수석연구원, 에이콘 윈도우 시스템 프로그래밍 시리즈 에디터
★ 옮긴이의 말 ★
디버깅은 소프트웨어를 개발함에 있어 중요한 요소다. 종종 디버깅이 소홀히 다뤄지긴 하지만, 사실 그렇지 않다. 한 연구 결과에서는 '디버깅 등의 작업이 전체 소프트웨어 개발 주기에서 50%를 차지한다'고까지 조사됐다. 소프트웨어 구현에만 한정해 생각한다면 개발자 최고의 덕목은 개발 속도일 것이다. 요구사항에 부합하는 것은 당연하고 안정적으로 동작도 해야 한다. 개발 기간을 단축하려면 개발 기간의 50%를 차지하는 디버깅(결함을 해결하는 광의적 의미)과정을 줄이는 수밖에 없다. 이 과정을 줄이려면 애초에 결함을 만들지 않는 능력과, 결함을 발견하고 최대한 빨리 해결하는 능력이 필요하다. 이런 능력은 눈에 보이지 않지만 결국 생산성의 차이로 나타난다.
메모리 덤프 분석은 디버깅 과정 중의 하나로 고급 개발자가 갖춰야 할 여러 능력 중 하나다. 사실 메모리 덤프를 분석할 능력이 있다는 것은 많은 것을 의미한다. 스택이나 힙, 레지스터, 호출규약, 어셈블리어 같은 시스템에 대한 기본적인 내용을 이해하고 정확히 체득하고 있음을 뜻하기 때문이다. 시스템에 대해 전혀 몰라도 애플리케이션 개발자로 잘 살아갈 수는 있지만, 시스템을 이해하는 사람과 그렇지 못한 사람 간에는 많은 차이가 난다. 영화 매트릭스에 비유하면 매트릭스 내부를 알고 있는 주인공들과 매트릭스에 갇혀 사는 사람들 정도 차이가 난다고 하면 너무 큰 비약일까?
C/C++ 애플리케이션을 디버깅을 함에 있어 메모리 덤프 분석을 꼭 할 수 있어야 하는 것은 아니다. 많은 시간이 들긴 하지만 툴이 자동 분석해 주는 결과와 로그 파일, printf, 육감 등으로 문제를 해결해 나갈 수도 있다. 그러다 보니 많은 개발자가 메모리 덤프 분석에 대해 체계적인 교육을 받거나 분석 경험을 쌓을 계기가 드물다. 또한 메모리 덤프에 대해 소정의 교육을 받았더라도 막상 필요한 때에는 어찌할 줄 모르는 경우도 많다. 게다가 공부를 시작해보고 싶어도 스승이 없고, 마땅한 교재도 없고, 막막하기만 경우가 부지기수다.
이 책은 바로 이 시점, 즉 애플리케이션 개발은 어느 정도 하는데, 덤프 분석을 어디서부터 어떻게 공부해야 할지 모르는 개발자에게 아주 훌륭한 가이드가 될 것이다. 먼저, 덤프 분석에 첫 발을 디디는 사람들을 위해 많은 그림과 스크린 샷으로 기본 개념을 친절하게 설명한다. 그리고 덤프를 생성하는 방법과 받았을 때 해야 할 일들을 체계적으로 정리하고, 다양한 사례와 예제로 하나하나 자세히 설명하며, 덤프 유형별로 충분한 사례를 들며 케이스 바이 케이스로 설명한다. 또한 빈번히 발생하는 덤프를 패턴화해 체계적으로 대응할 수 있도록 접근하고, 반대로 나쁜 케이스를 안티 패턴으로 정리해 오류에 빠지는 버릇을 고칠 수 있는 계기를 만들어 준다. 책의 후반부에는 저자가 행한 상식을 깨는 충격적 시도를 보여준다. 이를 통해 덤프를 바라보는 새로운 시각이 생기고 머리를 환기시킬 수 있는 계기가 될 것이다.
이 책을 번역한 덕분에 메모리 덤프 분석에 대해 갖고 있던 지식을 체계적으로 정리한 계기가 됐다. 본격적으로 디버깅의 세계로 가는 길의 이정표가 되는 주옥 같은 정보가 담겨 있는 이 책은 덤프 분석의 세계에 입문하고자 하는 개발자에게 필독서가 될 거라 확신한다.
목차
목차
크래시 덤프란?
올바른 크래시 덤프
크래시란?
행이란?
심볼 파일이란?
크래시와 행의 차이
선행적 크래시 덤프
2장 전문적인 크래시 덤프 분석
미니 덤프 분석
스크립트와 WinDbg 명령
컴포넌트 식별
로 스택 데이터 분석
심볼과 이미지
인터럽트와 예외에 대한 설명
예외 설명에 앞서
X86 인터럽트
x64 인터럽트
인터럽트 프레임과 스택 재구성
X86 트랩 명령
x64 트랩 명령
유저 모드의 예외
첫 번째와 두 번째 예외를 구별하는 방법
포스트모텀 디버거는 누가 호출하는가?
비스타 에러 리포팅의 구조
페이지 폴트에 대한 다른 시각
몇 가지 버그체크
NMI_HARDWARE_FAILURE
IRQL_NOT_LESS_OR_EQUAL
KERNEL_MODE_EXCEPTION_NOT_HANDLED
KMODE_EXCEPTION_NOT_HANDLED
SYSTEM_THREAD_EXCEPTION_NOT_HANDLED
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
참조 스택 트레이스
저자
저자
2003년 10월 14일 이후, 드미트리는 시트릭스 사에 에스컬레이션(escalation) 개발 분석 엔지니어로 입사했다. 그 후 관리직으로 옮기기 전까지 EMEA(Europe, Middle East and Africa) 개발분석 팀의 리더였다. 현재 지위는 개발분석 EMEA 기술관리자이며, 아일랜드 더블린에서 일하며 살고 있다. 몇 개의 시트릭스 디버깅과 문제 해결용 툴을 개발했고, 현재는 크래시 덤프 분석과 언매니지드(unmanaged) 코드, 디바이스 드라이버, 문제 해결용 툴의 아키텍처와 디자인 개발에 관한 책을 쓰고 있다.
Your payment information is processed securely. We do not store credit card details nor have access to your credit card information.

