These are very hacks and UNPORTABLE, but:
void sighandler (int signo, siginfo_t si, void *data) { ucontext_t *uc = (ucontext_t *)data; int instruction_length = uc->uc_mcontext.gregs[REG_RIP] += instruction_length; }
install sighandler as follows:
struct sigaction sa, osa; sa.sa_flags = SA_ONSTACK | SA_RESTART | SA_SIGINFO; sa.sa_sigaction = sighandler; sigaction(SIGILL, &sa, &osa);
This might work if you know how far to skip (and this is an Intel processor) :-)
source share