Maystyle :
Admin : New post
Guestbook
Local
media
Catergories
Recent Articles
Recent Comments
Recent Trackbacks
Calendar
Tag
Archive
Link
Search
 
  예외 디스패칭 
작성일시 : 2007. 11. 21. 14:11 | 분류 : Windows Server/Kernel

먼저 트랩 핸들러가 간단한 예외를 처리한다. 하지만 트랩 핸들러에 의해 처리 될 수 없는 경우 예외 디스패처라는 커널 모듈에 의해 처리 된다.

먼저 커널 예외는 간단하게 예외 디스패처가 해당 예외를 잡아 이전에 살펴본 인터럽트와 동일하게 IDT에 정의된 항목들을 실행하게 된다.


다음 으로 사용자 단에서 발생한 예외의 경우는 그림 3-8로 설명 할 수 있따.
Windows 서브 시스템은 디버거 포트 와 예외 포트를 가지고 예외를 통지 받는다. 사용자 모드의 예외일 경우
먼저 간단한 예외는 Trap handler가 처리한다. 그리고 처리가 않될 경우 먼저 해당 예외가 디버거 프로세스와 관련이 있는지 확인 하고 만약 관련이 있다면 처리하고 처리 못할 경우에는 해당 예외를 사용자 모드로 전환 하여 사용자 스택에 복사하고 프레임 기반 예외 핸들러를 찾기 위한 루틴을 호출 한다. 만약 예외를 처리 하지 못했다면 예외 디스패처는 다시 커널 모드로 전환하여 사용자에게 디버깅 기회를 준다. 만약 이도 않된다면 커널은 스레드의 프로세스와 관련된 예외 포트에 메세지를 보낸다. 만약 발견 된다면 이 예외 포트는 이 스레드를 제어하는 환경 시스템이 등록한 것이다. 그리고 만약 환경 시스템에 등록된 예외 포트도 없다면 커널은 스레드를 소유한 프로세스를 종료해 버린다.

만약 처리 못하는 예외에 대한 디버깅 여부는 다음 레지스트리 키에 정의되어 있다. "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug" 이 키에는 주요 값이 Auto 와 Debugger 가 있는데, Auto 의 값이 1일 경우 자동 디버거 를 실행하는 모드이다. 단 Virtual Studio 가 설치된 경우 0으로 변경 된다. Debugger 값은 처리 불가능 예외의 경우 실행 가능한 디버거의 경로를 가르키는 문자열이다. (Vista의 경우 Auto 키가 없다.)

|