мануалы и вижу, что в новой интерации они стали статическими и все описаны в секции .pdata структурами
struct IMAGE_RUNTIME_FUNCTION_ENTRY
BeginAddress dd 0 ;// RVA-адрес начала блока
EndAddress dd 0 ;// RVA-адрес конца блока
UnwindInfoAddress dd 0 ;// RVA-линк на дочернюю структуру "UNWIND_INFO"
ends
вопрос, как тогда работает SetUnhandledExceptionFilter ?
на мсдн к ней написано следующее -
Issuing SetUnhandledExceptionFilter replaces the existing top-level exception filter for all existing and all future threads in the calling process.
The exception handler specified by lpTopLevelExceptionFilter is executed in the context of the thread that caused the fault. This can affect the exception handler's ability to recover from certain exceptions, such as an invalid stack.
Тоесть получается, обработчик который мы указываем в ней, будет выполнять до всех остальных обработчиков указанных в .pdata ?
и что самое главное, каков примерный хотя бы механизм действия этой апи, ведь вроде как фильтры статически должны быть прописаны в .pdata, как она устанавливает переданную функу в качетсве главной для обработки исключений, можно ли добраться ручками до этого механизма из режима юзера через TEB как-нибудь в контексте ассемблера естественно?
UnhandledExceptionFilter — это последний, а не первый.
ну то есть сначало обработчик исключений опросит все функции из .pdata и в конце, если никто не возьмет на себя обработку, передаст тому, что мы устанавливаем ?
По идее да. Там ещё есть AddVectoredExceptionHandler. Если хочется ловить что-то, то лучше смотреть туда.
Обсуждают сегодня