// This must be marked with "__attribute__ ((noinline))", to ensure the // compiler generates the proper stack guards around this function. // Assign local array address to global variable to force stack guards. // Use another noinline function to corrupt the stack. __attribute__ ((noinline)) static int smash_stack(volatile int* plen) { printf("crasher: deliberately corrupting stack...\n"); char buf[128]; smash_stack_dummy_buf = buf; // This should corrupt stack guards and make process abort. smash_stack_dummy_function(plen); return 0; }
// This must be marked with "__attribute__ ((noinline))", to ensure the // compiler generates the proper stack guards around this function. // Assign local array address to global variable to force stack guards. // Use another noinline function to corrupt the stack. noinline int smash_stack(volatile int* plen) { printf("%s: deliberately corrupting stack...\n", getprogname()); char buf[128]; smash_stack_dummy_buf = buf; // This should corrupt stack guards and make process abort. smash_stack_dummy_function(plen); return 0; }