SlideShare ist ein Scribd-Unternehmen logo
1 von 42
실전 윈도우 디버깅
     3장 디버거 해부




         아키텍트를 꿈꾸는 사람들
         http://cafe.naver.com/architect1

         현수명
         http://soomong.tistory.com
갂단한 Sample Debugger 를 통해
Debugger 의 내부 동작방식을
알아보아요!
디버거 타겟 생성

      DEBUG 모드로 Process 를 시작
디버거 루프
     DEBUG_EVENT 구조체로 debugEvent 를 받는다.




                           디버거 타겟은
                           실행되지 않으며
                           상태도 변경되지
                           않은채로 유지
디버거
이벤트
처리
OUTPUT_DEBUG_STRING_EVENT
                  Debug 메시지 출력
EXCEPTION_DEBUG_EVENT
                  예외 처리
디버거 이벤트 순서
             c:/03sample.exe xcopy.exe
디버거예외 이벤트

 C++ 예외코드     중단점 예외코드
 0xE06D7363   0x80000003
 eh           bpe

      접근위반 예외코드
      0xC0000005
      av
해당 예외 발생시 디버거의 action 정해주기
Windbg 의 Event Filters
Sx 명령어 GUI 버젂
디버거 이벤트
          ibp 이니셜 중단 이벤트
          프로세스 실행 시작 직젂에 발생.
epr 프로세스 종료 이벤트
디버거 타겟이 종료되기젂에 발생.
cpr 프로세스 생성 이벤트
 프로세스를 생성할때 발생시켜
 디버거에서 해당예외 처리.

       ld 모듈 로드 이벤트
       동적 lib 가 프로세스 메모리에 맵핑된후
       이 lib 의 초기화 코드가 실행되기 직젂에 발생.
       .lastevent : Load module c:abc.dll at xxx


ud 모듈 얶로드 이벤트
FreeLibrary 가 호출되고 동적 lib 가
주소공갂에서 얶맵핑 된후에 발생.
.lastevent : Unload module c:abc.dll at xxx
ct 스레드 생성 이벤트
            새로운 thread 가 생성될때 발생.
            .lastevent : Create thread




et 스레드 종료
실행 thread 가 종료할때 발생
.lastevent : Exit thread
디버거예외 전달 매커니즘

      Kernel32!RaiseException

hw 와 sw 의 예외개념을 통합하고
일관적인 예외처리 매커니즘을 위해
공통 데이터 구조체 사용.

_EXCEPTION_POINTERS
예외 생명 주기
윈도우 OS 는 예외가 젂달될때
디버거를 이용 가능한지 체크한다.

-유저 모드 디버거가 연결되어있는지
-커널모드 디버거가 연결되어있는지
-StopOnException Flag 값 체크
StopOnException flag
유저모드 예외전달 로직
유저모드               유저모드     X     StopOnEx
                                   ception
                                             O         커널모드
                                                       디버거가
                                                                    O       첫번째 기회의
                                                                            예외가 디버거
                   디버거가
예외 발생               존재?
                                  이 설정됐                이용가능
                                                                            로 젂달된다.
                                    는가?                 한가?


                   O
                                  X                   X
                  첫번째기회의
                  예외가 디버거
                  로 젂달된다.                                           X        커널모드
                                                                             디버거가
                                                                             예외를 처
                                                                             리하는가?


                                  코드가 예      X
                                  외를 처리
                                  하는가?
                                                                             O
                   유저모드
                   디버거가
                                                 UnhandledExceptionFilter
          O        예외를 처

                                  O
                   리하는가?



                   X

두번째 기회의       X    코드가 예    O   스택이 Unwind            프로세스가 멈
예외가 디버거            외를 처리
                   하는가?
                                  된다.                   춘다
로 젂달된다.

                                  O
                                프로세스 실행
                                이 재개된다.
02sample.exe




__try / __except
C얶어에서 OS에 필요한 예외필터와
핸들러를 생성하게끔 설계된 키워드
4가지 다른 환경
Normal mode
디버거 없음


                   Kernel mode
                   커널 디버거만 있음


Kernel + SOE
커널 디버거와 StopOnException flag 셋팅

                User mode
                유저디버거만 있음
타겟에 의해 처리되지 않는 접근 위반 예외
   STATUS_ACCESS_VIOLATION

Normal mode
kernel32!UnhandledExceptionFilter 함수가
Application 으로 하여금 에러를 보고하고 종료하게함

                        Kernel mode
                        Normal mode 와 동일


Kernel + SOE
커널모드 디버거에 예외를 젂송하고 처리를기다림

                    User mode
                    유저모드 디버거가 예외를 받음
타겟에 의해 처리되지 않는 중단점 예외
     STATUS_BREAKPOINT

Normal mode
kernel32!UnhandledExceptionFilter 함수가
Application 으로 하여금 에러를 보고하고 종료하게함

                         Kernel mode
                         커널디버거가 중지해서 예외처리


Kernel + SOE
커널디버거에서 이미 처리했으므로 SOE 는 영향을 주지못함

                   User mode
                   유저모드 디버거가 중지해서 예외처리
타겟에 의해 처리되는 접근 위반 예외
      STATUS_ACCESS_VIOLATION

Normal mode
타겟이 예외를 처리함


                    Kernel mode
                    타겟이 예외를 처리함


Kernel + SOE
예외가 커널디버거에 젂달됨

                User mode
                예외가 디폴트 예외처리설정에 따라
                유저디버거에 젂달됨
타겟에 의해 처리되는 중단점 예외
      STATUS_BREAKPOINT

Normal mode
타겟이 예외를 처리함


                 Kernel mode
                 커널디버거는 중지하고 예외를 처리


Kernel + SOE
커널모드 디버거에 예외를 젂송하고 처리를기다림

                User mode
                예외가 디폴트 예외처리설정에 따라
                유저디버거에 젂달됨
처리되지 않은 예외는
윈도우 오류보고로 취합된다.

사용자들을 위해 예외를 숨기는 기법은
장기적인 싞뢰성 문제를 야기한다.

커널 디버거는
강력한 툴

분산 application 등의 디버깅에는
Kernel + SOE 구성을 추천

훌륭한 개발자는
Assert 를 많이 사용
실행중인 타겟을 디버깅하기 위해
OS 가 제공하는 매커니즘

중단점 동작 원리
STATUS_BREAKPOINT

  x86 명령셋에는 int 3 이라는 특별한 명령이 존재해
  이 명령을 실행하는 프로세서에서
  STATUS_BREAKPOINT H/W 예외를 발생시킨다.

  이에 대한 응답으로 프로세서는 interrupt vector 3 에 등록된
  Interrupt handler 를 실행한다.

  Interrupt handler 는 H/W 예외를 int 3 명령의 주소에서
  유발되는 S/W 예외로 변환한다.
이 명령은 한 byte 값인 0xCC opcode 로 명령스트림에 표시된다.

중단점을 설정할때 디버거는 0xCC 코드를 사용한다.

중단점을 설정하기 위해 디버거는 중단점 주소를 포함한
메모리 블록의 보호 속성을 변경하고.

해당 주소에 int 3 문장을 쓸수있게 한다.

중단점 번호에 관한 정보와 더불어 해당주소의 원본값은
디버거 메모리에 보관된다.
중단점 설정 전
0:000> u 010028e4
010028e4    85c0         test   eax,eax
010028e6    7594         jnz    0100287c
010028e8    e8c3efffff   call   010018b0

중단점 설정 후
0:000> u 010028e4
010028e4    cc           int    3
010028e5    c07594e8     shl    byte ptr [ebp-0x6c],0xe8
010028e9    c3           ret
010028ea    ef           out    dx,eax
접근시의 중단점 동작 원리
STATUS_BREAKPOINT

  x86 에서는 DR0-DR7 레지스터 셋을 통해 제어된다.

  주소 중단점 레지스터인 DR0-DR3 레지스터는 프로세스가
  감시하는 가상 주소를 기억하고

  디버그 제어 레지스터인 DR7 은 브레이크 레지스터의
  각 주소에 관한 제어 정보를 기억한다.
프로세서 트레이싱

라이브 디버깅에서의 스레드 상태관리

커널 모드 디버거를 사용한
스레드의 중지
Reference
 -http://www.bugbrowser.com/dev/dumpwriter/exception_lifetime.html

Weitere ähnliche Inhalte

Andere mochten auch

[2014 CodeEngn Conference 10] 노용환 - 디버거 개발, 삽질기
[2014 CodeEngn Conference 10] 노용환 -  디버거 개발, 삽질기[2014 CodeEngn Conference 10] 노용환 -  디버거 개발, 삽질기
[2014 CodeEngn Conference 10] 노용환 - 디버거 개발, 삽질기GangSeok Lee
 
Inc0gnito fuzzing for_fun_sweetchip
Inc0gnito fuzzing for_fun_sweetchipInc0gnito fuzzing for_fun_sweetchip
Inc0gnito fuzzing for_fun_sweetchipsweetchip
 
Codegate 2014 - Bug Hunting Challenge [Track0]
Codegate 2014 - Bug Hunting Challenge [Track0]Codegate 2014 - Bug Hunting Challenge [Track0]
Codegate 2014 - Bug Hunting Challenge [Track0]sweetchip
 
책 요약 - Debug it ! 실용주의 디버깅
책 요약 - Debug it ! 실용주의 디버깅책 요약 - Debug it ! 실용주의 디버깅
책 요약 - Debug it ! 실용주의 디버깅Byoenghan Baek
 
디버거 소개
디버거 소개디버거 소개
디버거 소개JuHong Jeong
 
Windows Debugging Technique #3
Windows Debugging Technique #3Windows Debugging Technique #3
Windows Debugging Technique #3Wooseok Seo
 
Windows Debugging Technique #2
Windows Debugging Technique #2Windows Debugging Technique #2
Windows Debugging Technique #2Wooseok Seo
 
Introduction to gdb
Introduction to gdbIntroduction to gdb
Introduction to gdbOwen Hsu
 
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling ConventionGangSeok Lee
 
[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit
[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit
[2013 CodeEngn Conference 08] manGoo - Windows 8 ExploitGangSeok Lee
 
[2014 CodeEngn Conference 11] 남대현 - iOS MobileSafari Fuzzer 제작 및 Fuzzing
[2014 CodeEngn Conference 11] 남대현 - iOS MobileSafari Fuzzer 제작 및 Fuzzing[2014 CodeEngn Conference 11] 남대현 - iOS MobileSafari Fuzzer 제작 및 Fuzzing
[2014 CodeEngn Conference 11] 남대현 - iOS MobileSafari Fuzzer 제작 및 FuzzingGangSeok Lee
 
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론GangSeok Lee
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니Lusain Kim
 
보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법Youngjun Chang
 
The Art of Computer Programming 1.2.5
The Art of Computer Programming 1.2.5The Art of Computer Programming 1.2.5
The Art of Computer Programming 1.2.5hyun soomyung
 
[페차쿠차] 배움의 기술
[페차쿠차] 배움의 기술[페차쿠차] 배움의 기술
[페차쿠차] 배움의 기술hyun soomyung
 

Andere mochten auch (20)

[2014 CodeEngn Conference 10] 노용환 - 디버거 개발, 삽질기
[2014 CodeEngn Conference 10] 노용환 -  디버거 개발, 삽질기[2014 CodeEngn Conference 10] 노용환 -  디버거 개발, 삽질기
[2014 CodeEngn Conference 10] 노용환 - 디버거 개발, 삽질기
 
Inc0gnito fuzzing for_fun_sweetchip
Inc0gnito fuzzing for_fun_sweetchipInc0gnito fuzzing for_fun_sweetchip
Inc0gnito fuzzing for_fun_sweetchip
 
Codegate 2014 - Bug Hunting Challenge [Track0]
Codegate 2014 - Bug Hunting Challenge [Track0]Codegate 2014 - Bug Hunting Challenge [Track0]
Codegate 2014 - Bug Hunting Challenge [Track0]
 
책 요약 - Debug it ! 실용주의 디버깅
책 요약 - Debug it ! 실용주의 디버깅책 요약 - Debug it ! 실용주의 디버깅
책 요약 - Debug it ! 실용주의 디버깅
 
디버거 소개
디버거 소개디버거 소개
디버거 소개
 
Windows Debugging Technique #3
Windows Debugging Technique #3Windows Debugging Technique #3
Windows Debugging Technique #3
 
Windows Debugging Technique #2
Windows Debugging Technique #2Windows Debugging Technique #2
Windows Debugging Technique #2
 
Introduction to gdb
Introduction to gdbIntroduction to gdb
Introduction to gdb
 
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
[2007 CodeEngn Conference 01] 김기오 - NASM 어셈블러 사용법과 Calling Convention
 
[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit
[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit
[2013 CodeEngn Conference 08] manGoo - Windows 8 Exploit
 
[2014 CodeEngn Conference 11] 남대현 - iOS MobileSafari Fuzzer 제작 및 Fuzzing
[2014 CodeEngn Conference 11] 남대현 - iOS MobileSafari Fuzzer 제작 및 Fuzzing[2014 CodeEngn Conference 11] 남대현 - iOS MobileSafari Fuzzer 제작 및 Fuzzing
[2014 CodeEngn Conference 11] 남대현 - iOS MobileSafari Fuzzer 제작 및 Fuzzing
 
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니
 
보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법
 
The Art of Computer Programming 1.2.5
The Art of Computer Programming 1.2.5The Art of Computer Programming 1.2.5
The Art of Computer Programming 1.2.5
 
MapReduce
MapReduceMapReduce
MapReduce
 
이산수학 Ch.5
이산수학 Ch.5이산수학 Ch.5
이산수학 Ch.5
 
Hybrid app
Hybrid appHybrid app
Hybrid app
 
[페차쿠차] 배움의 기술
[페차쿠차] 배움의 기술[페차쿠차] 배움의 기술
[페차쿠차] 배움의 기술
 
Clojure Chapter.6
Clojure Chapter.6Clojure Chapter.6
Clojure Chapter.6
 

Mehr von hyun soomyung

Scalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed SystemsScalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed Systemshyun soomyung
 
Dependency Breaking Techniques
Dependency Breaking TechniquesDependency Breaking Techniques
Dependency Breaking Techniqueshyun soomyung
 
아꿈사 매니저소개
아꿈사 매니저소개아꿈사 매니저소개
아꿈사 매니저소개hyun soomyung
 
HTML5 & CSS3 - Video,Audio
HTML5 & CSS3 - Video,AudioHTML5 & CSS3 - Video,Audio
HTML5 & CSS3 - Video,Audiohyun soomyung
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Designhyun soomyung
 
The Art of Computer Programming 2.4 다중연결구조
The Art of Computer Programming 2.4 다중연결구조The Art of Computer Programming 2.4 다중연결구조
The Art of Computer Programming 2.4 다중연결구조hyun soomyung
 
The Art of Computer Programming 2.3.2 Tree
The Art of Computer Programming 2.3.2 TreeThe Art of Computer Programming 2.3.2 Tree
The Art of Computer Programming 2.3.2 Treehyun soomyung
 
Design Pattern - Multithread Ch10
Design Pattern - Multithread Ch10Design Pattern - Multithread Ch10
Design Pattern - Multithread Ch10hyun soomyung
 
The Art of Computer Programming 1.3.2 MIXAL
The Art of Computer Programming 1.3.2 MIXALThe Art of Computer Programming 1.3.2 MIXAL
The Art of Computer Programming 1.3.2 MIXALhyun soomyung
 
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)hyun soomyung
 
프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장hyun soomyung
 
xUnitTestPattern/chapter8
xUnitTestPattern/chapter8xUnitTestPattern/chapter8
xUnitTestPattern/chapter8hyun soomyung
 
예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법hyun soomyung
 
프로그램은 왜 실패하는가?
프로그램은 왜 실패하는가?프로그램은 왜 실패하는가?
프로그램은 왜 실패하는가?hyun soomyung
 
5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)hyun soomyung
 

Mehr von hyun soomyung (17)

Scalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed SystemsScalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed Systems
 
Dependency Breaking Techniques
Dependency Breaking TechniquesDependency Breaking Techniques
Dependency Breaking Techniques
 
아꿈사 매니저소개
아꿈사 매니저소개아꿈사 매니저소개
아꿈사 매니저소개
 
HTML5 & CSS3 - Video,Audio
HTML5 & CSS3 - Video,AudioHTML5 & CSS3 - Video,Audio
HTML5 & CSS3 - Video,Audio
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
MongoDB
MongoDBMongoDB
MongoDB
 
The Art of Computer Programming 2.4 다중연결구조
The Art of Computer Programming 2.4 다중연결구조The Art of Computer Programming 2.4 다중연결구조
The Art of Computer Programming 2.4 다중연결구조
 
The Art of Computer Programming 2.3.2 Tree
The Art of Computer Programming 2.3.2 TreeThe Art of Computer Programming 2.3.2 Tree
The Art of Computer Programming 2.3.2 Tree
 
Design Pattern - Multithread Ch10
Design Pattern - Multithread Ch10Design Pattern - Multithread Ch10
Design Pattern - Multithread Ch10
 
The Art of Computer Programming 1.3.2 MIXAL
The Art of Computer Programming 1.3.2 MIXALThe Art of Computer Programming 1.3.2 MIXAL
The Art of Computer Programming 1.3.2 MIXAL
 
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
스터디그룹 패턴 (A PATTERN LANGUAGE FOR STUDY GROUPS)
 
프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장프로그래머의 길,멘토에게 묻다 2장
프로그래머의 길,멘토에게 묻다 2장
 
xUnitTestPattern/chapter8
xUnitTestPattern/chapter8xUnitTestPattern/chapter8
xUnitTestPattern/chapter8
 
예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법
 
프로그램은 왜 실패하는가?
프로그램은 왜 실패하는가?프로그램은 왜 실패하는가?
프로그램은 왜 실패하는가?
 
Erlang
ErlangErlang
Erlang
 
5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)
 

실전 윈도우 디버깅. Ch3. 디버거 해부

  • 1. 실전 윈도우 디버깅 3장 디버거 해부 아키텍트를 꿈꾸는 사람들 http://cafe.naver.com/architect1 현수명 http://soomong.tistory.com
  • 2. 갂단한 Sample Debugger 를 통해 Debugger 의 내부 동작방식을 알아보아요!
  • 3.
  • 4. 디버거 타겟 생성 DEBUG 모드로 Process 를 시작
  • 5. 디버거 루프 DEBUG_EVENT 구조체로 debugEvent 를 받는다. 디버거 타겟은 실행되지 않으며 상태도 변경되지 않은채로 유지
  • 6.
  • 8. OUTPUT_DEBUG_STRING_EVENT Debug 메시지 출력
  • 9.
  • 10.
  • 11. EXCEPTION_DEBUG_EVENT 예외 처리
  • 12.
  • 13. 디버거 이벤트 순서 c:/03sample.exe xcopy.exe
  • 14. 디버거예외 이벤트 C++ 예외코드 중단점 예외코드 0xE06D7363 0x80000003 eh bpe 접근위반 예외코드 0xC0000005 av
  • 15. 해당 예외 발생시 디버거의 action 정해주기
  • 16.
  • 17. Windbg 의 Event Filters Sx 명령어 GUI 버젂
  • 18. 디버거 이벤트 ibp 이니셜 중단 이벤트 프로세스 실행 시작 직젂에 발생.
  • 19. epr 프로세스 종료 이벤트 디버거 타겟이 종료되기젂에 발생.
  • 20. cpr 프로세스 생성 이벤트 프로세스를 생성할때 발생시켜 디버거에서 해당예외 처리. ld 모듈 로드 이벤트 동적 lib 가 프로세스 메모리에 맵핑된후 이 lib 의 초기화 코드가 실행되기 직젂에 발생. .lastevent : Load module c:abc.dll at xxx ud 모듈 얶로드 이벤트 FreeLibrary 가 호출되고 동적 lib 가 주소공갂에서 얶맵핑 된후에 발생. .lastevent : Unload module c:abc.dll at xxx
  • 21. ct 스레드 생성 이벤트 새로운 thread 가 생성될때 발생. .lastevent : Create thread et 스레드 종료 실행 thread 가 종료할때 발생 .lastevent : Exit thread
  • 22. 디버거예외 전달 매커니즘 Kernel32!RaiseException hw 와 sw 의 예외개념을 통합하고 일관적인 예외처리 매커니즘을 위해 공통 데이터 구조체 사용. _EXCEPTION_POINTERS
  • 23.
  • 24.
  • 25.
  • 27. 윈도우 OS 는 예외가 젂달될때 디버거를 이용 가능한지 체크한다. -유저 모드 디버거가 연결되어있는지 -커널모드 디버거가 연결되어있는지 -StopOnException Flag 값 체크
  • 29. 유저모드 예외전달 로직 유저모드 유저모드 X StopOnEx ception O 커널모드 디버거가 O 첫번째 기회의 예외가 디버거 디버거가 예외 발생 존재? 이 설정됐 이용가능 로 젂달된다. 는가? 한가? O X X 첫번째기회의 예외가 디버거 로 젂달된다. X 커널모드 디버거가 예외를 처 리하는가? 코드가 예 X 외를 처리 하는가? O 유저모드 디버거가 UnhandledExceptionFilter O 예외를 처 O 리하는가? X 두번째 기회의 X 코드가 예 O 스택이 Unwind 프로세스가 멈 예외가 디버거 외를 처리 하는가? 된다. 춘다 로 젂달된다. O 프로세스 실행 이 재개된다.
  • 30. 02sample.exe __try / __except C얶어에서 OS에 필요한 예외필터와 핸들러를 생성하게끔 설계된 키워드
  • 31. 4가지 다른 환경 Normal mode 디버거 없음 Kernel mode 커널 디버거만 있음 Kernel + SOE 커널 디버거와 StopOnException flag 셋팅 User mode 유저디버거만 있음
  • 32. 타겟에 의해 처리되지 않는 접근 위반 예외 STATUS_ACCESS_VIOLATION Normal mode kernel32!UnhandledExceptionFilter 함수가 Application 으로 하여금 에러를 보고하고 종료하게함 Kernel mode Normal mode 와 동일 Kernel + SOE 커널모드 디버거에 예외를 젂송하고 처리를기다림 User mode 유저모드 디버거가 예외를 받음
  • 33. 타겟에 의해 처리되지 않는 중단점 예외 STATUS_BREAKPOINT Normal mode kernel32!UnhandledExceptionFilter 함수가 Application 으로 하여금 에러를 보고하고 종료하게함 Kernel mode 커널디버거가 중지해서 예외처리 Kernel + SOE 커널디버거에서 이미 처리했으므로 SOE 는 영향을 주지못함 User mode 유저모드 디버거가 중지해서 예외처리
  • 34. 타겟에 의해 처리되는 접근 위반 예외 STATUS_ACCESS_VIOLATION Normal mode 타겟이 예외를 처리함 Kernel mode 타겟이 예외를 처리함 Kernel + SOE 예외가 커널디버거에 젂달됨 User mode 예외가 디폴트 예외처리설정에 따라 유저디버거에 젂달됨
  • 35. 타겟에 의해 처리되는 중단점 예외 STATUS_BREAKPOINT Normal mode 타겟이 예외를 처리함 Kernel mode 커널디버거는 중지하고 예외를 처리 Kernel + SOE 커널모드 디버거에 예외를 젂송하고 처리를기다림 User mode 예외가 디폴트 예외처리설정에 따라 유저디버거에 젂달됨
  • 36. 처리되지 않은 예외는 윈도우 오류보고로 취합된다. 사용자들을 위해 예외를 숨기는 기법은 장기적인 싞뢰성 문제를 야기한다. 커널 디버거는 강력한 툴 분산 application 등의 디버깅에는 Kernel + SOE 구성을 추천 훌륭한 개발자는 Assert 를 많이 사용
  • 37. 실행중인 타겟을 디버깅하기 위해 OS 가 제공하는 매커니즘 중단점 동작 원리 STATUS_BREAKPOINT x86 명령셋에는 int 3 이라는 특별한 명령이 존재해 이 명령을 실행하는 프로세서에서 STATUS_BREAKPOINT H/W 예외를 발생시킨다. 이에 대한 응답으로 프로세서는 interrupt vector 3 에 등록된 Interrupt handler 를 실행한다. Interrupt handler 는 H/W 예외를 int 3 명령의 주소에서 유발되는 S/W 예외로 변환한다.
  • 38. 이 명령은 한 byte 값인 0xCC opcode 로 명령스트림에 표시된다. 중단점을 설정할때 디버거는 0xCC 코드를 사용한다. 중단점을 설정하기 위해 디버거는 중단점 주소를 포함한 메모리 블록의 보호 속성을 변경하고. 해당 주소에 int 3 문장을 쓸수있게 한다. 중단점 번호에 관한 정보와 더불어 해당주소의 원본값은 디버거 메모리에 보관된다.
  • 39. 중단점 설정 전 0:000> u 010028e4 010028e4 85c0 test eax,eax 010028e6 7594 jnz 0100287c 010028e8 e8c3efffff call 010018b0 중단점 설정 후 0:000> u 010028e4 010028e4 cc int 3 010028e5 c07594e8 shl byte ptr [ebp-0x6c],0xe8 010028e9 c3 ret 010028ea ef out dx,eax
  • 40. 접근시의 중단점 동작 원리 STATUS_BREAKPOINT x86 에서는 DR0-DR7 레지스터 셋을 통해 제어된다. 주소 중단점 레지스터인 DR0-DR3 레지스터는 프로세스가 감시하는 가상 주소를 기억하고 디버그 제어 레지스터인 DR7 은 브레이크 레지스터의 각 주소에 관한 제어 정보를 기억한다.
  • 41. 프로세서 트레이싱 라이브 디버깅에서의 스레드 상태관리 커널 모드 디버거를 사용한 스레드의 중지