1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <signal.h> 4 5 static void handler(int sig, siginfo_t *info, void *v) 6 { 7 printf("info: sig=%d code=%d addr=0x%lx\n", 8 info->si_signo, info->si_code, (unsigned long)info->si_addr); 9 exit(0); 10 } 11 12 int main() 13 { 14 struct sigaction sa; 15 int val; 16 17 sa.sa_sigaction = handler; 18 sigfillset(&sa.sa_mask); 19 sa.sa_flags = SA_SIGINFO; 20 21 sigaction(SIGSEGV, &sa, NULL); 22 23 asm volatile("mov %1, %%fs; mov %%fs:0, %0" : "=r" (val) : "r"(4)); 24 25 printf("val=%d\n", val); 26 27 return 0; 28 } 29