SEH Eceptions — создание и обработка

Я хочу генерировать и обрабатывать исключения (SEH).
Как я могу написать код, который приведет к исключению «недопустимая инструкция»?

-3

Решение

Вы можете сделать что-то вроде этого:

#include <Windows.h>

#include <cstdio>

::DWORD FilterFunction(::DWORD const _exception_code)
{
if(EXCEPTION_ILLEGAL_INSTRUCTION == _exception_code)
{
::std::printf("filtered\n");
return EXCEPTION_EXECUTE_HANDLER;
}
else
{
::std::printf("not filtered\n");
return EXCEPTION_CONTINUE_SEARCH;
}
}

int main()
{
__try
{
::std::printf("trying...\n");
::RaiseException
(
EXCEPTION_ILLEGAL_INSTRUCTION // exception id
,   0 // continuable exception
,   0 // args count
,   nullptr // args
);             // no arguments
::std::printf("finished trying\n");
}
__except(FilterFunction(GetExceptionCode()))
{
::std::printf("exception handled\n");
}
return 0;
}

пытаясь …

отфильтрованный

исключение обработано

1

Другие решения

Вы можете вызвать структурированное исключение в Windows с помощью:

RaiseException(EXCEPTION_ILLEGAL_INSTRUCTION, EXCEPTION_NONCONTINUABLE, 0, nullptr);

Ссылка:

https://msdn.microsoft.com/en-us/library/ms680552%28VS.85%29.aspx

0

По вопросам рекламы [email protected]