1 #include <sys/types.h> 2 #include <sys/signal.h> 3 #include <signal.h> 4 #include <stdio.h> 5 #include <unistd.h> 6 #include <string.h> 7 8 #define FAULTADDR 0x123123 9 10 static void 11 handler(int sig, siginfo_t *sip, void *scp) 12 { 13 char buf[1024]; 14 15 if (sip == NULL) 16 _exit(1); 17 if (sip->si_addr == 0) /* wrong address */ 18 _exit(1); 19 20 // snprintf(buf, sizeof buf, "addr %p\n", sip->si_addr); 21 // write(STDOUT_FILENO, buf, strlen(buf)); 22 _exit(0); 23 } 24 25 26 int 27 main(int argc, char *argv[]) 28 { 29 struct sigaction sa; 30 31 memset(&sa, 0, sizeof sa); 32 sigfillset(&sa.sa_mask); 33 sa.sa_sigaction = handler; 34 sa.sa_flags = SA_SIGINFO; 35 36 sigaction(SIGSEGV, &sa, NULL); 37 sigaction(SIGBUS, &sa, NULL); 38 39 *(char *)FAULTADDR = 0; 40 } 41