Esempio n. 1
0
int
main(int argc, char *argv[])
{
  stack_t sigstack;
  struct sigaction sa;
  int j;

  printf("Top of standard stack is near %10p\n", (void *) &j);

  /* Allocate alternate stack and inform kernel of its existence */

  sigstack.ss_sp = malloc(SIGSTKSZ);
  if (sigstack.ss_sp == NULL)
    errExit("malloc");

  sigstack.ss_size = SIGSTKSZ;
  sigstack.ss_flags = 0;
  if (sigaltstack(&sigstack, NULL) == -1)
    errExit("sigaltstack");
  printf("Alternate stack is at %10p-%p\n",
      sigstack.ss_sp, (char *) sbrk(0) - 1);

  sa.sa_handler = sigsegvHandler; /* Establish handler for SIGSEGV */
  sigemptyset(&sa.sa_mask);
  sa.sa_flags = SA_ONSTACK;       /* Handler uses alternate stack */
  if (sigaction(SIGSEGV, &sa, NULL) == -1)
    errExit("sigaction");

  overflowStack(1);
}
Esempio n. 2
0
int main(int argc,char *argv[])
{
    stack_t sigstack;
    struct sigaction sa;
    int j;

    printf("Top of standard stack is near %10p\n",(void *)&j);
    sigstack.ss_sp = malloc(SIGSTKSZ);
    if(sigstack.ss_sp == NULL) {
        perror("malloc");
        exit(EXIT_FAILURE);
    }

    sigstack.ss_size = SIGSTKSZ;
    sigstack.ss_flags = 0;
    if(sigaltstack(&sigstack,NULL) == -1) {
        perror("sigalstack");
        exit(EXIT_FAILURE);
    }
    printf("Alternate stack is at   %10p-%p\n",
            sigstack.ss_sp,(char*)sbrk(0) - 1);
    sa.sa_handler = sigsegvHandler;
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = SA_ONSTACK;
    if(sigaction(SIGSEGV,&sa,NULL) == -1) {
        perror("sigaction");
        exit(EXIT_FAILURE);
    }
    overflowStack(1);
}
Esempio n. 3
0
static void       /* A recursive function that overflows the stack */
overflowStack(int callNum)
{
  char a[100000];   /* Make this stack frame large */
  printf("Call %4d - top of stack near %10p\n", callNum, &a[0]);
  overflowStack(callNum+1);
}
Esempio n. 4
0
static void overflowStack(int callNum)
{
    char a[100000];
    printf("Call %4d - top of stack near %10p\n",callNum,&a[0]);
    overflowStack(callNum + 1);
}