From: Matt Mullins Date: Sun, 18 May 2014 00:13:10 +0000 (-0700) Subject: Initial commit. X-Git-Url: http://git.mmlx.us/?a=commitdiff_plain;h=ad7d76de4077ffde66f9c0966ac87ff10800f9e8;p=fuckit_dot_so.git Initial commit. --- ad7d76de4077ffde66f9c0966ac87ff10800f9e8 diff --git a/fuckit.c b/fuckit.c new file mode 100644 index 0000000..b6e6a0b --- /dev/null +++ b/fuckit.c @@ -0,0 +1,29 @@ +#include +#include +#include +#include + +static void handle_sigsegv(int signal, siginfo_t *info, void *_context) +{ + (void)(signal); // it's unused, stfu gcc + + struct ucontext *context = (struct ucontext *) _context; + fprintf(stderr, "Caught SIGSEGV for address %p\n", info->si_addr); + fprintf(stderr, "Code address: %p\n", (void*)context->uc_mcontext.gregs[REG_RIP]); + + context->uc_mcontext.gregs[REG_RIP]++; +} + +__attribute__((constructor)) +static void setup_signals() +{ + fprintf(stderr, "Set up signals\n"); + sigset_t mask; + sigemptyset(&mask); + struct sigaction action = { + .sa_sigaction = handle_sigsegv, + .sa_mask = mask, + .sa_flags = SA_SIGINFO, + }; + sigaction(SIGSEGV, &action, NULL); +}