원인도 모르고, 해결 방법도 몰랐기에 포맷 후 OS를 다시 설치하는 일을 반복했던
기억이 있다. 이번 장에서는 Crash에 대해 알아보자.
Why Does Windows Crash?
Crash되는 이유는 다양한데, 일반적으로 아래 몇 가지가 되겠다.
- 메모리에 접근시 ACCESS VIOLATION
- Read only 메모리에 Write 하거나 매핑되지 않은 주소를 Read하는 행위
- 핸들링 되지 않은 Exception과 trap
- 또한 커널과 드라이버에서 예상치 못한 동작으로 인해 발생.
The Blue Screen
직접적으로 블루 스크린을 발생하는 것은 KeBugCheckEx API이다.
KeBugCheckEx가 화면을 파랑색으로 칠하고, 안내 메시지를 뿌린다.
WDK에 문서화되어 있으므로 자세한건 참고하기 바란다.
최종적으로, KeBugCheckEx는 KeRegisterBugCheckCallack으로 사전 등록된 함수를 호출한다. 이 함수 안에서는 드라이버가 crash dump에 data를 추가하여 기록하는 등의 작업을 할 수 있도록 해준다.
300 개 이상의 BugCheckCode가 존재하며, 이 값이 코드를 Stop 시킨 원인이라 할 수 있다.
나머지 4개의 인자는 BugCheckCode 값에 따라 다른 값이 들어간다. crash난 주소나 data 주소가 들어갈 수 있다.
VOID KeBugCheckEx( _In_ ULONG BugCheckCode, _In_ ULONG_PTR BugCheckParameter1, _In_ ULONG_PTR BugCheckParameter2, _In_ ULONG_PTR BugCheckParameter3, _In_ ULONG_PTR BugCheckParameter4 );
Windows Vista SP1을 기반으로 수집된 통계를 보면, 30개의 Stop code가 96%의 crash를 발생시켰고, 몇 가지로 그룹화 할 수 있다.
- Page fault
댓글 없음:
댓글 쓰기