SlideShare a Scribd company logo
Windows OS 상에서 효율적인 덤프
        생성 및 주의점




        ㈜ 제이씨엔터테인먼트
             Pluto Studio
                 김성준
이 세션의 주제는 간단히…
우리 서버가 크래쉬 날 때 덤프를 남기고 싶어요…



                   으아아아아아아악!!!!!!!!!!!
                   도대체 뭘 해야하는지ㅠ.ㅠ
필요한 것을 생각해 보아요~
 우리 서버가 크래쉬 날 때 덤프를 남기고 싶어요

첫번째로 알고 싶은 것은 “크래쉬 날때”
첫번째로 알고 싶은 것은 “크래쉬 날때” 와
OS 로부터 Event를 받는 방법
                SEH(Structured Exception Handling)



                      API”
두번째로 알고 싶은 것은 “덤프 남기는 방법”

                  MiniDumpWriteDump(…)
SEH(Structured Exception Handling)란…
Windows OS가 제공하는
             Exception Handling Service



         Compiler-Level SEH

         System-Level SEH
         (Raw Operating System SEH)

          Windows O.S
SEH 의 본질은…

“프로그램에서 Exception” 이 발생 했을 때
             OS 로부터 Message를 받는 방법




SetUnhandledExceptionFilter(…) ???

“프로그램에서 Exception” 이 발생 했을 때
    OS가 호출해 주는 Callback Function 등록방법
System–Level-SEH




     Visual Studio 2008에서 테스트 하기 위해서는
Linker 명령줄 추가 옵션란에 아래의 옵션 추가 하세요~
                     /SAFESEH:NO
System–Level-SEH

System-Level-SEH 는 깊게 들어가게
되면 상당히 어려운 Issue인데 이를 더
어렵게 만드는 것은 MS로부터 공개된
문서가 전혀 없다는 거에요…


이는 해킹과 밀접한 관련이 있기 때문
이죠…


그래서 Visual Stuido 6.0에는 없었지
만 2005에서는 SAFESEH라는 개념이
나오기도 했어요…
Compiler-Level SEH
Compiler-Level-SEH란...
    1. Visual Studio Compiler Keyword
       __try, __finally, __except
    2. 이 Keyword를 사용해서 우리들은
       System-Level-SEH 를 사용할 수 있습니다.

그렇다면 C++ 예외 처리(try, catch)와는
                         다른 건가요…?
    Microsoft Visual C++ 컴파일러는 C++ 예외처리를
    Windows SEH(System-Level-SEH)이용하여 구현 즉,
    Visual C++컴파일러는 try, catch 블록을 만나면
    내부적으로 Compiler-Level SEH 구문으로 변경.
Compiler-Level SEH




여기서는 C++ Exception Handling에 대해서는 따로 다루지 않겠습니다.

__try대신에 try , __except대신에 catch 사용한다는 구문 차이가 있지만
내부적으로는 같습니다. C++ Exception Handling은 내부적으로
Compiler-Level-SEH 사용한다는 사실을 기억해주세요...
Compiler-Level SEH
Compiler-Level SEH
Compiler-Level SEH
Compiler-Level SEH
         이 부분 실행 결과는
         어떻게 될까요???
Compiler-Level SEH
 저희들은 Compiler-Level SEH Mechanism을 사용해서 SEH Callback 함
 수를 등록할 수 있습니다.

 바로 __except( filterCallbackFunction(GetExceptionInformation() ) )
 구문이 filterCallbackFunction(…) 함수를 SEH Callback 함수로 등록하는
 부분입니다.



얼핏 보면 FS:[0]에 Exception Handler 함수를 등록하는 System-Level SEH
와 비슷해 보이지만 다릅니다.

Compiler-Level-SEH 에서는 Visual C++ 컴파일러마다 다르지만 컴파일러가
우리 몰래 만든 6.0에서는 __except_handler3함수를 2008에서는
_except_handler4 함수를 FS:[0]에 등록을 하고 이 함수가 호출해 주는
Callback 함수를 __except 구문을 통해서 등록을 합니다.(이후 이 함수를
Callback함수라 하지 않고 Filter Function이라고 칭하겠습니다.)
그러나. 여기서는 더 이상 자세히 다루지는 않겠습니다.
이제 어떻게….

__except(…) 구문을 통해서 Exception Filter 함수를
등록하지 마세요...


그러면 어쩌라고...


현재 실행 중인 Process에서 Exception 발생했을 때 이
Exception을 Handling 하는 어떤 Filter 함수도 없다면 Visual
C++ Compiler가 만들어서 등록한 SEH Callback 함수(Visual
Studio 2008 에서는 __except_handler3)는
SetUnhandledExceptionFilter (…) API를 통해서 등록된
Filter 함수를 호출합니다.
지금까지 한 것은…
 Exception이 발생 했을 때 윈도우 SEH서비스가
 호출 해 주는 Callback 함수를 등록했습니다.
 이것이 다입니다.


그리고 저희들은 Compiler-Level-SEH를 사용해야 하는 데
이 때 Callback되는 Filter 함수를 등록하기 위해서는 __except()
구문을 사용해야 하는 것을 배웠습니다.
그러나 사용하지 말라는 것도... 대신...


Exception이 발생했을 때 호출해 달라는 Filter 함수를
SetUnhandledExceptionFilter (…) API 함수를 통해서 등록해야
한다는 것을... 배웠습니다.
덤프란 무엇이며 필요한 이유는…?
Dump란 :
Exception 발생 시 해당 프로그램의 메모리 내용을
파일로 저장한 파일
(Snapshot of the Application State of the exact moment of Failure).


무엇을 할 수 있을까요...?
Symbol File 즉 Exception이 발생한 실행파일 빌드시 생성된 pdb 파일이 있
다면 Exception 발생 시의 메모리의 값을 Symbol 로 Resolution 해서 볼 수
있습니다.

쉽게 말하면 즉 덤프 파일을 갖고 Exception 상황을 재현해서 디버깅을 할
수 있습니다.
MiniDumpWriteDump

필요한 것들
 1) 헤더 파일 : dbghelp.h
 2) Library 파일 : dbghelp.lib
 3) dll 파일    : dbghelp.dll



구글에서 “Debugging Tools for Windows (x86)” 검색해서
Windbg를 설치하시게 되면 설치된 폴더 안에 있는 SDK 폴더 안에
들어 있어요~~~
(현재 제가 갖고 있는 버전은 6.12.2.633 입니다. )
MiniDumpWriteDump
이 부분에 대해서 말할 게 많은데…

제가 요즘 바빠서 준비를 여기까지 밖에 못했습니다 ㅠㅠ

알고 있는 거랑 발표를 한다는 거랑은 차이가 참 많다는 것을

머리로는 알고 있었지만

막상 발표 준비를 하다 보니 제가 생각한 것 훨씬 더 이상으로

많다는 것을 뼈저리게 느꼈습니다...
한 가지 더~~




    CRT Library
    3rd party components


    구글에서
    "SetUnhandledExceptionFilter" and VC8
    키워드로 검색해보세요~~~
QnA

More Related Content

Viewers also liked (20)

PDF
SDC 3rd 최흥배님 - Boost.multi_index 사용하기
OnGameServer
 
PDF
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기
OnGameServer
 
PDF
Microsoft SharePoint를 활용한 개발환경 구축
OnGameServer
 
PDF
해외 취업 이야기
OnGameServer
 
PDF
Multi thread game server
OnGameServer
 
PDF
SDC 3rd 안중원님 - InGame CashShop 개발 하기
OnGameServer
 
PDF
IPv6 이론과 소켓 프로그래밍
OnGameServer
 
PDF
이욱진님 - 메모리 관리자로부터 배우기
OnGameServer
 
PDF
초보자를 위한 분산 캐시 이야기
OnGameServer
 
PDF
Mongo db 시작하기
OnGameServer
 
PDF
Boost 라이브리와 C++11
OnGameServer
 
PPS
Dream
Emma Chang
 
PPS
造訪蓮因寺
Emma Chang
 
PPS
2011moon
Emma Chang
 
PDF
Trimax | reclamefotografen food fotografie
Trimax | reclamefotografen
 
PPS
2012過年走春3 3
Emma Chang
 
PPS
2012過年3 3
Emma Chang
 
PPS
一起分享吧
Emma Chang
 
PPTX
Colormeone
Color Me One Consulting
 
PPS
090719高美
Emma Chang
 
SDC 3rd 최흥배님 - Boost.multi_index 사용하기
OnGameServer
 
안준석님 - 안드로이드 프로세스들의 통신 메커니즘 : 바인더 이야기
OnGameServer
 
Microsoft SharePoint를 활용한 개발환경 구축
OnGameServer
 
해외 취업 이야기
OnGameServer
 
Multi thread game server
OnGameServer
 
SDC 3rd 안중원님 - InGame CashShop 개발 하기
OnGameServer
 
IPv6 이론과 소켓 프로그래밍
OnGameServer
 
이욱진님 - 메모리 관리자로부터 배우기
OnGameServer
 
초보자를 위한 분산 캐시 이야기
OnGameServer
 
Mongo db 시작하기
OnGameServer
 
Boost 라이브리와 C++11
OnGameServer
 
Dream
Emma Chang
 
造訪蓮因寺
Emma Chang
 
2011moon
Emma Chang
 
Trimax | reclamefotografen food fotografie
Trimax | reclamefotografen
 
2012過年走春3 3
Emma Chang
 
2012過年3 3
Emma Chang
 
一起分享吧
Emma Chang
 
090719高美
Emma Chang
 

Similar to Windows os 상에서 효율적인 덤프 (20)

PDF
Exception&log
Nam Hyeonuk
 
PPT
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
상현 조
 
PPTX
포스트모템디버깅과 프로세스 덤프 실전
주항 박
 
PPTX
Windows reversing study_basic_9
J J
 
PPTX
System+os study 7
J J
 
PPTX
04 프로세스
ssuser3fb17c
 
PPTX
Windows reversing study_basic_8
J J
 
PPT
Windows Debugging Technique #2
Wooseok Seo
 
PPTX
Pwnable study basic_2
J J
 
PPTX
System+os study 1
J J
 
PDF
실전 윈도우 디버깅. Ch3. 디버거 해부
hyun soomyung
 
PDF
6. code level reversing
Youngjun Chang
 
PDF
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드
Code Engn
 
PPTX
Ceh
민웅 이
 
PPTX
Linux programming study
Yunseok Lee
 
PPTX
[170403 2주차]C언어 A반
arundine
 
PPTX
Windows kernel basic exploit
Kyoungseok Yang
 
PPTX
프로세스 방어
주항 박
 
PDF
윈도우 커널 익스플로잇
Seungyong Lee
 
PDF
2. windows system과 file format
Youngjun Chang
 
Exception&log
Nam Hyeonuk
 
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
상현 조
 
포스트모템디버깅과 프로세스 덤프 실전
주항 박
 
Windows reversing study_basic_9
J J
 
System+os study 7
J J
 
04 프로세스
ssuser3fb17c
 
Windows reversing study_basic_8
J J
 
Windows Debugging Technique #2
Wooseok Seo
 
Pwnable study basic_2
J J
 
System+os study 1
J J
 
실전 윈도우 디버깅. Ch3. 디버거 해부
hyun soomyung
 
6. code level reversing
Youngjun Chang
 
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드
Code Engn
 
Linux programming study
Yunseok Lee
 
[170403 2주차]C언어 A반
arundine
 
Windows kernel basic exploit
Kyoungseok Yang
 
프로세스 방어
주항 박
 
윈도우 커널 익스플로잇
Seungyong Lee
 
2. windows system과 file format
Youngjun Chang
 
Ad

Windows os 상에서 효율적인 덤프

  • 1. Windows OS 상에서 효율적인 덤프 생성 및 주의점 ㈜ 제이씨엔터테인먼트 Pluto Studio 김성준
  • 2. 이 세션의 주제는 간단히… 우리 서버가 크래쉬 날 때 덤프를 남기고 싶어요… 으아아아아아아악!!!!!!!!!!! 도대체 뭘 해야하는지ㅠ.ㅠ
  • 3. 필요한 것을 생각해 보아요~ 우리 서버가 크래쉬 날 때 덤프를 남기고 싶어요 첫번째로 알고 싶은 것은 “크래쉬 날때” 첫번째로 알고 싶은 것은 “크래쉬 날때” 와 OS 로부터 Event를 받는 방법 SEH(Structured Exception Handling) API” 두번째로 알고 싶은 것은 “덤프 남기는 방법” MiniDumpWriteDump(…)
  • 4. SEH(Structured Exception Handling)란… Windows OS가 제공하는 Exception Handling Service Compiler-Level SEH System-Level SEH (Raw Operating System SEH) Windows O.S
  • 5. SEH 의 본질은… “프로그램에서 Exception” 이 발생 했을 때 OS 로부터 Message를 받는 방법 SetUnhandledExceptionFilter(…) ??? “프로그램에서 Exception” 이 발생 했을 때 OS가 호출해 주는 Callback Function 등록방법
  • 6. System–Level-SEH Visual Studio 2008에서 테스트 하기 위해서는 Linker 명령줄 추가 옵션란에 아래의 옵션 추가 하세요~ /SAFESEH:NO
  • 7. System–Level-SEH System-Level-SEH 는 깊게 들어가게 되면 상당히 어려운 Issue인데 이를 더 어렵게 만드는 것은 MS로부터 공개된 문서가 전혀 없다는 거에요… 이는 해킹과 밀접한 관련이 있기 때문 이죠… 그래서 Visual Stuido 6.0에는 없었지 만 2005에서는 SAFESEH라는 개념이 나오기도 했어요…
  • 8. Compiler-Level SEH Compiler-Level-SEH란... 1. Visual Studio Compiler Keyword __try, __finally, __except 2. 이 Keyword를 사용해서 우리들은 System-Level-SEH 를 사용할 수 있습니다. 그렇다면 C++ 예외 처리(try, catch)와는 다른 건가요…? Microsoft Visual C++ 컴파일러는 C++ 예외처리를 Windows SEH(System-Level-SEH)이용하여 구현 즉, Visual C++컴파일러는 try, catch 블록을 만나면 내부적으로 Compiler-Level SEH 구문으로 변경.
  • 9. Compiler-Level SEH 여기서는 C++ Exception Handling에 대해서는 따로 다루지 않겠습니다. __try대신에 try , __except대신에 catch 사용한다는 구문 차이가 있지만 내부적으로는 같습니다. C++ Exception Handling은 내부적으로 Compiler-Level-SEH 사용한다는 사실을 기억해주세요...
  • 13. Compiler-Level SEH 이 부분 실행 결과는 어떻게 될까요???
  • 14. Compiler-Level SEH 저희들은 Compiler-Level SEH Mechanism을 사용해서 SEH Callback 함 수를 등록할 수 있습니다. 바로 __except( filterCallbackFunction(GetExceptionInformation() ) ) 구문이 filterCallbackFunction(…) 함수를 SEH Callback 함수로 등록하는 부분입니다. 얼핏 보면 FS:[0]에 Exception Handler 함수를 등록하는 System-Level SEH 와 비슷해 보이지만 다릅니다. Compiler-Level-SEH 에서는 Visual C++ 컴파일러마다 다르지만 컴파일러가 우리 몰래 만든 6.0에서는 __except_handler3함수를 2008에서는 _except_handler4 함수를 FS:[0]에 등록을 하고 이 함수가 호출해 주는 Callback 함수를 __except 구문을 통해서 등록을 합니다.(이후 이 함수를 Callback함수라 하지 않고 Filter Function이라고 칭하겠습니다.) 그러나. 여기서는 더 이상 자세히 다루지는 않겠습니다.
  • 15. 이제 어떻게…. __except(…) 구문을 통해서 Exception Filter 함수를 등록하지 마세요... 그러면 어쩌라고... 현재 실행 중인 Process에서 Exception 발생했을 때 이 Exception을 Handling 하는 어떤 Filter 함수도 없다면 Visual C++ Compiler가 만들어서 등록한 SEH Callback 함수(Visual Studio 2008 에서는 __except_handler3)는 SetUnhandledExceptionFilter (…) API를 통해서 등록된 Filter 함수를 호출합니다.
  • 16. 지금까지 한 것은… Exception이 발생 했을 때 윈도우 SEH서비스가 호출 해 주는 Callback 함수를 등록했습니다. 이것이 다입니다. 그리고 저희들은 Compiler-Level-SEH를 사용해야 하는 데 이 때 Callback되는 Filter 함수를 등록하기 위해서는 __except() 구문을 사용해야 하는 것을 배웠습니다. 그러나 사용하지 말라는 것도... 대신... Exception이 발생했을 때 호출해 달라는 Filter 함수를 SetUnhandledExceptionFilter (…) API 함수를 통해서 등록해야 한다는 것을... 배웠습니다.
  • 17. 덤프란 무엇이며 필요한 이유는…? Dump란 : Exception 발생 시 해당 프로그램의 메모리 내용을 파일로 저장한 파일 (Snapshot of the Application State of the exact moment of Failure). 무엇을 할 수 있을까요...? Symbol File 즉 Exception이 발생한 실행파일 빌드시 생성된 pdb 파일이 있 다면 Exception 발생 시의 메모리의 값을 Symbol 로 Resolution 해서 볼 수 있습니다. 쉽게 말하면 즉 덤프 파일을 갖고 Exception 상황을 재현해서 디버깅을 할 수 있습니다.
  • 18. MiniDumpWriteDump 필요한 것들 1) 헤더 파일 : dbghelp.h 2) Library 파일 : dbghelp.lib 3) dll 파일 : dbghelp.dll 구글에서 “Debugging Tools for Windows (x86)” 검색해서 Windbg를 설치하시게 되면 설치된 폴더 안에 있는 SDK 폴더 안에 들어 있어요~~~ (현재 제가 갖고 있는 버전은 6.12.2.633 입니다. )
  • 20. 이 부분에 대해서 말할 게 많은데… 제가 요즘 바빠서 준비를 여기까지 밖에 못했습니다 ㅠㅠ 알고 있는 거랑 발표를 한다는 거랑은 차이가 참 많다는 것을 머리로는 알고 있었지만 막상 발표 준비를 하다 보니 제가 생각한 것 훨씬 더 이상으로 많다는 것을 뼈저리게 느꼈습니다...
  • 21. 한 가지 더~~ CRT Library 3rd party components 구글에서 "SetUnhandledExceptionFilter" and VC8 키워드로 검색해보세요~~~
  • 22. QnA