Your SlideShare is downloading. ×
0
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Windows os 상에서 효율적인 덤프
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Windows os 상에서 효율적인 덤프

3,109

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,109
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
33
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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-SEHSystem-Level-SEH 는 깊게 들어가게되면 상당히 어려운 Issue인데 이를 더어렵게 만드는 것은 MS로부터 공개된문서가 전혀 없다는 거에요…이는 해킹과 밀접한 관련이 있기 때문이죠…그래서 Visual Stuido 6.0에는 없었지만 2005에서는 SAFESEH라는 개념이나오기도 했어요…
  • 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. Compiler-Level SEH여기서는 C++ Exception Handling에 대해서는 따로 다루지 않겠습니다.__try대신에 try , __except대신에 catch 사용한다는 구문 차이가 있지만내부적으로는 같습니다. C++ Exception Handling은 내부적으로Compiler-Level-SEH 사용한다는 사실을 기억해주세요...
  • 10. Compiler-Level SEH
  • 11. Compiler-Level SEH
  • 12. 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 함수도 없다면 VisualC++ Compiler가 만들어서 등록한 SEH Callback 함수(VisualStudio 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 입니다. )
  • 19. MiniDumpWriteDump
  • 20. 이 부분에 대해서 말할 게 많은데…제가 요즘 바빠서 준비를 여기까지 밖에 못했습니다 ㅠㅠ알고 있는 거랑 발표를 한다는 거랑은 차이가 참 많다는 것을머리로는 알고 있었지만막상 발표 준비를 하다 보니 제가 생각한 것 훨씬 더 이상으로많다는 것을 뼈저리게 느꼈습니다...
  • 21. 한 가지 더~~ CRT Library 3rd party components 구글에서 "SetUnhandledExceptionFilter" and VC8 키워드로 검색해보세요~~~
  • 22. QnA

×