Windows OS 상에서 효율적인 덤프        생성 및 주의점        ㈜ 제이씨엔터테인먼트             Pluto Studio                 김성준
이 세션의 주제는 간단히…우리 서버가 크래쉬 날 때 덤프를 남기고 싶어요…                   으아아아아아아악!!!!!!!!!!!                   도대체 뭘 해야하는지ㅠ.ㅠ
필요한 것을 생각해 보아요~ 우리 서버가 크래쉬 날 때 덤프를 남기고 싶어요첫번째로 알고 싶은 것은 “크래쉬 날때”첫번째로 알고 싶은 것은 “크래쉬 날때” 와OS 로부터 Event를 받는 방법               ...
SEH(Structured Exception Handling)란…Windows OS가 제공하는             Exception Handling Service         Compiler-Level SEH    ...
SEH 의 본질은…“프로그램에서 Exception” 이 발생 했을 때             OS 로부터 Message를 받는 방법SetUnhandledExceptionFilter(…) ???“프로그램에서 Exceptio...
System–Level-SEH     Visual Studio 2008에서 테스트 하기 위해서는Linker 명령줄 추가 옵션란에 아래의 옵션 추가 하세요~                     /SAFESEH:NO
System–Level-SEHSystem-Level-SEH 는 깊게 들어가게되면 상당히 어려운 Issue인데 이를 더어렵게 만드는 것은 MS로부터 공개된문서가 전혀 없다는 거에요…이는 해킹과 밀접한 관련이 있기 때문이죠...
Compiler-Level SEHCompiler-Level-SEH란...    1. Visual Studio Compiler Keyword       __try, __finally, __except    2. 이 Key...
Compiler-Level SEH여기서는 C++ Exception Handling에 대해서는 따로 다루지 않겠습니다.__try대신에 try , __except대신에 catch 사용한다는 구문 차이가 있지만내부적으로는 같...
Compiler-Level SEH
Compiler-Level SEH
Compiler-Level SEH
Compiler-Level SEH         이 부분 실행 결과는         어떻게 될까요???
Compiler-Level SEH 저희들은 Compiler-Level SEH Mechanism을 사용해서 SEH Callback 함 수를 등록할 수 있습니다. 바로 __except( filterCallbackFuncti...
이제 어떻게….__except(…) 구문을 통해서 Exception Filter 함수를등록하지 마세요...그러면 어쩌라고...현재 실행 중인 Process에서 Exception 발생했을 때 이Exception을 Hand...
지금까지 한 것은… Exception이 발생 했을 때 윈도우 SEH서비스가 호출 해 주는 Callback 함수를 등록했습니다. 이것이 다입니다.그리고 저희들은 Compiler-Level-SEH를 사용해야 하는 데이 때 ...
덤프란 무엇이며 필요한 이유는…?Dump란 :Exception 발생 시 해당 프로그램의 메모리 내용을파일로 저장한 파일(Snapshot of the Application State of the exact moment o...
MiniDumpWriteDump필요한 것들 1) 헤더 파일 : dbghelp.h 2) Library 파일 : dbghelp.lib 3) dll 파일    : dbghelp.dll구글에서 “Debugging Tools f...
MiniDumpWriteDump
이 부분에 대해서 말할 게 많은데…제가 요즘 바빠서 준비를 여기까지 밖에 못했습니다 ㅠㅠ알고 있는 거랑 발표를 한다는 거랑은 차이가 참 많다는 것을머리로는 알고 있었지만막상 발표 준비를 하다 보니 제가 생각한 것 훨씬 ...
한 가지 더~~    CRT Library    3rd party components    구글에서    "SetUnhandledExceptionFilter" and VC8    키워드로 검색해보세요~~~
QnA
Upcoming SlideShare
Loading in …5
×

Windows os 상에서 효율적인 덤프

3,659 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,659
On SlideShare
0
From Embeds
0
Number of Embeds
1,610
Actions
Shares
0
Downloads
36
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Windows os 상에서 효율적인 덤프

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

×