Presentation is loading. Please wait.

Presentation is loading. Please wait.

예외 처리 3조 조일현.

Similar presentations


Presentation on theme: "예외 처리 3조 조일현."— Presentation transcript:

1 예외 처리 3조 조일현

2 예외란 무엇인가? 운영체제의 SEH구현 컴파일 수준의 SEH구현

3 예외란 무엇인가? 정의 : 프로그래밍에서 의도되거나, 예상되어진 결과가 아니라 하드
웨어, 소프트웨어 및 사용자 등에 의해 발생하는 오류를 통칭 한다. 예외 발생 경우 - 존재 하지 않는 파일 이름 입력 - 받아들일 수 없는 연산(Divide By Zero) - 할당하지 못하는 기억 장치 접근(Access Violation) - ……

4 -> 특정 컴파일러의 런타임 라이브러리
try{ /* 예외 발생 예상 지역 throw ex <- 예외가 발생 } catch(처리되어야 할 예외의 종류){ /* 예외를 처리하는 코드가 존재할 위치 -> 특정 컴파일러의 런타임 라이브러리

5 구조화된 예외 처리 (Structured Exception handing)
Windows에서는 예외 발생시 그 예외를 발생시킨 스레드 가 그에 대한 에러 처리를 할 수 있도록 도와준다. 컴파일러에 의한 SEH 운영체제의 SEH

6 운영체제의 SEH구현 스레드 콜백함수 호출 예외 !! 운영체제

7 운영체제의 SEH구현 예외 처리 콜백 함수 * EXCPT.H 에 정의 - 어떤 종류의 예외가 발생, 어디서 발생했는지….

8 운영체제의 SEH구현 예외와 관련된 CPU 독립적인 정보를 가지고 있다
* WINNT.H 에 정의 예외와 관련된 CPU 독립적인 정보를 가지고 있다 ExceptionCode – 운영체제가 예외에 대해 할당한 번호 ex>) STATUS_ACCESS_VIOLATION – 0xC00005 ExceptionAddress – 예외가 일어난 주소

9 운영체제의 SEH구현 WINNT.H 에 정의 - 해당 스레드의 레지스터 값들을 나타냄.

10 운영체제의 SEH구현 오류가 일어나면 운영체제는 어디를 호출해야 하는지 어떻게 알 수 있을까?
-> EXCEPTION_REGISTRATION 구조체

11 운영체제의 SEH구현 Handler 는 _except_handler 콜백함수의 포인터
운영체제는 어디서 EXCEPTION_REGISTRATION구조체를 찾는 것일까? -> Thread Information Block(TEB 혹은 TIB)

12 운영체제의 SEH구현 예외가 발생하면

13 첫번째 멤버 Prev – 또 다른 EXCEPTION_REGISTRATION구조체를 가리키는 포인터

14 예외가 발생하면 운영체제는 이 리스트를 통해 예외를 처리 할 수 있는 핸들러를 가진 EXCEPTION_RESIGTRATION
를 찾는다.

15 UNWINDING 예외 처리 허용 예외 처리 거부 이전에 예외 처리를 거부 했으므로 핸들러를 정리 한다.
(END OF LIST) 0xFFFFFFFF EXCEPTION_REGISTRATION Handler Collback Pointer prev EXCEPTION_REGISTRATION Handler Collback Pointer Except_handler() 예외 처리 허용 prev EXCEPTION_REGISTRATION Handler Collback Pointer prev Except_handler() 예외 처리 거부 FS:[0] EXCEPTIN_REGISTRATION * 이전에 예외 처리를 거부 했으므로 핸들러를 정리 한다.

16 UNWINDING 운영체제는 핸들러 함수에게 정리해야 할 것들을 처리할 수 있는 기회를 줌 ex) c++클래스의 소멸자
두번 째 호출 때는 예외 처리 플래그 2 로 설정(EH_UNWINDING) 이전 예외 처리기 모두 풀기(UNWIND)를 할 수 있도록 호출된 후 실행은 예외를 처리한 핸들러가 결정한 지점 부터 재개

17 컴파일러 수준의 SEH 예외 처리기 __try { } /* 예외를 감시할 코드 블럭 */ __except(필터 표현식)
/* 예외를 감시할 코드 블럭 */  } __except(필터 표현식) /* 예외를 처리하는 코드 블럭*/ 

18 컴파일러 수준의 SEH 필터 표현식 - EXCEPTION_EXECUTE_HANDLER
- EXCEPTION_CONTINUE_EXECUTION - EXCEPTION_CONTINUE_SEARCH

19 EXCEPTION_EXECUTE_HANDLER
- 예외를 처리하는 블록을 실행하도록 한다

20 EXCEPTION_CONTINUE_EXECUTION
- 예외를 무시하고 예외가 발생한 부분부터 코드를 다시 실행. - 예외가 발생한 원인을 해결해 주지 못하면 무한루프에 빠집니다.

21 EXCEPTION_CONTINUE_SEARCH
- 스택 풀기 방식으로 예외처리를 수행합니다.

22 컴파일러 수준의 SEH 종료 처리기 __try  { /* 보호되고 있는 본문 */  } __finally /* 종료 처리기*/ 

23 컴파일러 수준의 SEH 종료 처리부 - 예외가 발생했을 때 뿐만 아니라 프로그램의 정상적인 실행에 의해서 쓰레드가 코드 블록을 벗어났을 때에도 수행될 수 있다는 점 - 예외를 진단할 수 없다.

24 감사합니다. WINDOWS VIA WINDOWS 구조와 원리 예외와 SEH


Download ppt "예외 처리 3조 조일현."

Similar presentations


Ads by Google