7 #include <mach/mach_vm.h>
10 size_t g_size
= 10*sizeof(int);
13 saction_handler(int signo
, siginfo_t info
, void *baton
) {
14 printf("Got into handler.\n"); // stop here in the signal handler
16 = mach_vm_protect(mach_task_self(), (mach_vm_address_t
) g_int_ptr
,
17 g_size
, 0, VM_PROT_READ
|VM_PROT_WRITE
);
23 kern_return_t vm_result
= vm_allocate(mach_task_self(), &g_int_ptr
, g_size
, VM_FLAGS_ANYWHERE
);
24 for (int i
= 0; i
< 10; i
++)
25 g_int_ptr
[i
] = i
* 10;
27 vm_result
= mach_vm_protect(mach_task_self(), (mach_vm_address_t
) g_int_ptr
, g_size
, 0, VM_PROT_NONE
);
28 struct sigaction my_action
;
29 sigemptyset(&my_action
.sa_mask
);
30 my_action
.sa_handler
= (void (*)(int)) saction_handler
;
31 my_action
.sa_flags
= SA_SIGINFO
;
33 sigaction(SIGBUS
, &my_action
, NULL
); // Stop here to get things going.
34 int local_value
= g_int_ptr
[1];
35 return local_value
; // Break here to make sure we got past the signal handler