#include <cstdlib>
#include <signal.h>
#define NOMINMAX
#include <Windows.h>
#include <iostream>
LONG ExFilter(unsigned long no)
{
return (no == EXCEPTION_ILLEGAL_INSTRUCTION) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH;
}
void sigHandler(int )
{
std::cout << "caught by signal\n";
}
int main()
{
signal(SIGILL, sigHandler);
__try
{
_asm __emit 0Fh
_asm __emit 3fh
_asm __emit 07h
_asm __emit 0Bh
}
__except (ExFilter(GetExceptionCode()))
{
std::cout << "Illegal caught by exception";
}
return 0;
}
CiNpbmNsdWRlIDxjc3RkbGliPgojaW5jbHVkZSA8c2lnbmFsLmg+CiNkZWZpbmUgTk9NSU5NQVgKI2luY2x1ZGUgPFdpbmRvd3MuaD4KI2luY2x1ZGUgPGlvc3RyZWFtPgpMT05HIEV4RmlsdGVyKHVuc2lnbmVkIGxvbmcgbm8pCnsKCXJldHVybiAobm8gPT0gRVhDRVBUSU9OX0lMTEVHQUxfSU5TVFJVQ1RJT04pID8gRVhDRVBUSU9OX0VYRUNVVEVfSEFORExFUiA6IEVYQ0VQVElPTl9DT05USU5VRV9TRUFSQ0g7Cn0KCnZvaWQgc2lnSGFuZGxlcihpbnQgKQp7CglzdGQ6OmNvdXQgPDwgImNhdWdodCBieSBzaWduYWxcbiI7Cn0KaW50IG1haW4oKQp7CglzaWduYWwoU0lHSUxMLCBzaWdIYW5kbGVyKTsKCV9fdHJ5Cgl7CgkJX2FzbSBfX2VtaXQgMEZoCgkJX2FzbSBfX2VtaXQgM2ZoCgkJX2FzbSBfX2VtaXQgMDdoCgkJX2FzbSBfX2VtaXQgMEJoCgl9CglfX2V4Y2VwdCAoRXhGaWx0ZXIoR2V0RXhjZXB0aW9uQ29kZSgpKSkKCXsKCQlzdGQ6OmNvdXQgPDwgIklsbGVnYWwgY2F1Z2h0IGJ5IGV4Y2VwdGlvbiI7Cgl9CiAgICByZXR1cm4gMDsKfQoK