static void segv_handler(int sig_no, siginfo_t *pt_siginfo, void *p_ucontext)
{
int i = 0;
//printf("enter segv handler\n");
if (sig_no == SIGSEGV) {
//printf("segment fault 134123423\n");
}
if (mprotect((void *)(addr), offset, PROT_WRITE)) {
printf("error\n");
}else {
printf("modify to write\n");
}
printf("i %p\n", &i);
}
#define SIGSTKSZ 8192
static void sighandler(void)
{
stack_t sigstack;
struct sigaction action;
sigstack.ss_sp = malloc(SIGSTKSZ);
if (sigstack.ss_sp == NULL) {
perror ("malloc");
}
printf("stack %p\n", sigstack.ss_sp);
sigstack.ss_size = SIGSTKSZ;
sigstack.ss_flags = 0;
if (sigaltstack(&sigstack, NULL) == -1) {
perror ("sigaltstack");
}
sigemptyset(&action.sa_mask);
action.sa_sigaction = segv_handler;
action.sa_flags = SA_ONSTACK;
if (sigaction(SIGSEGV, &action, NULL) == -1) {
printf("sig handler error\n");
}
}
{
int i = 0;
//printf("enter segv handler\n");
if (sig_no == SIGSEGV) {
//printf("segment fault 134123423\n");
}
if (mprotect((void *)(addr), offset, PROT_WRITE)) {
printf("error\n");
}else {
printf("modify to write\n");
}
printf("i %p\n", &i);
}
#define SIGSTKSZ 8192
static void sighandler(void)
{
stack_t sigstack;
struct sigaction action;
sigstack.ss_sp = malloc(SIGSTKSZ);
if (sigstack.ss_sp == NULL) {
perror ("malloc");
}
printf("stack %p\n", sigstack.ss_sp);
sigstack.ss_size = SIGSTKSZ;
sigstack.ss_flags = 0;
if (sigaltstack(&sigstack, NULL) == -1) {
perror ("sigaltstack");
}
sigemptyset(&action.sa_mask);
action.sa_sigaction = segv_handler;
action.sa_flags = SA_ONSTACK;
if (sigaction(SIGSEGV, &action, NULL) == -1) {
printf("sig handler error\n");
}
}