본문 바로가기

분류대기

[좀 더 작성, 콜 스택 부분] Windows, c++, CallStack

[1. 개요]

__try ~ __except 를 이용해서 예외 상황 발생 시, 그 처리에 대해서 정리하였고,

여기에서는 예외 상황 발생 시 디버깅을 위한 Call stack 을 남기는 방법을 정리하도록 한다.


[2. 예제]

출력


[3. 설명]

먼저 예외가 발생한 위치(주소) 는 GetExceptionInformation() 을 통해 반환 된, _EXCEPTION_POINTERS 에서

ExceptionAddress 를 통해 확인 할 수 있다.

 

여기서 이 주소를 포함하는 함수를 호출 한 곳으로 되돌아 가야 하는데,

이에 대한 정보는 EBP 레지스터 값을 통해 알 수 있다.

 

따라서, EBP 레지스터 값이 return address 가 되는 것이다.

 

IsBadCodePtr() 은 인자로 전달 받은 주소가 읽기 권한이 있는 메모리 영역인 경우, 0을 반환한다.

  • 코드 영역이라는 의미로 받아들이면 될 듯.

즉, code 영역이 아닐 때 까지 Call stack 을 확인 할 수 있다.

 

 

 

 

'분류대기' 카테고리의 다른 글

swagger-editor 설치  (0) 2024.06.12
CUDA 설치하기, [윈도우, 리눅스]  (0) 2024.05.14
[내용 채워야 됨] CUDA 사용해보기  (0) 2024.02.22
Window, C++, 예외처리  (0) 2023.12.04