----- mem.h ----- #define GMEM_BASE 0x08000000 struct global_mem_struct { int any_variable; int another_var; }; ----- main.c ----- #include <stdio.h> #include "./mem.h" struct global_mem_struct *gmem; void main() { int i; system("rm -f GMEM_LOC"); gmem = (struct global_mem_struct *) map(GMEM_BASE,sizeof(struct global_mem_struct)); gmem->any_variable = 1; printf("Enter an integer.\n"); scanf("%d",&i); gmem->any_variable = 0; printf("Other var was %d\n",gmem->another_var); gmem->another_var = i; } ----- main2.c ----- #include <stdio.h> #include <signal.h> #include "mem.h" void im_ok(); struct global_mem_struct *gmem; void main() { signal(11,im_ok); /* to cover SIGSEGV -- segment violation */ gmem = (struct global_mem_struct *) map(GMEM_BASE,sizeof(struct global_mem_struct)); printf("I too am waiting for you to enter something.\n"); printf("%d %d\n",gmem->any_variable, gmem->another_var); while (gmem->any_variable) signal(11,im_ok); /* to cover SIGSEGV -- segment violation */ printf("goodbye world.\n"); printf("%d %d\n",gmem->any_variable, gmem->another_var); } ----- map.c ----- #include <stdio.h> #include <signal.h> void im_ok() { } char * map(address, size) unsigned long address; unsigned long size; { FILE *fp; char *p; signal(11,im_ok); /* to cover SIGSEGV -- segment violation */ if ((fp = fopen("GMEM_LOC","r"))==NULL) { if ((fp = fopen("GMEM_LOC","w"))==NULL) { printf("Error.\n"); exit(1); } else { p = (char *)malloc(size); printf("Printing %p to file.\n",p); fprintf(fp," %p\n",p); fclose(fp); } } else { fscanf(fp,"%p",&p); printf("Read %p from file.\n",p); fclose(fp); } return p; } ----- make script ----- gcc -o main main.c map.c gcc -o main2 main2.c map.c -----