[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 |