1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* A simple test to demonstrate heap, stack, and global overrun 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown detection. */ 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h> 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdlib.h> 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownshort ga[100]; 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__attribute__((noinline)) 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint addup_wrongly ( short* arr ) 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int sum = 0, i; 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i = 0; i <= 100; i++) 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown sum += (int)arr[i]; 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return sum; 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__attribute__((noinline)) 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint do_other_stuff ( void ) 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown short la[100]; 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 123 + addup_wrongly(la); 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__attribute__((noinline)) 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint do_stupid_malloc_stuff ( void ) 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int sum = 0; 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown unsigned char* duh = malloc(100 * sizeof(char)); 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown sum += duh[-1]; 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown free(duh); 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown sum += duh[50]; 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return sum; 35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main ( void ) 38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown long s = addup_wrongly(ga); 40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s += do_other_stuff(); 41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown s += do_stupid_malloc_stuff(); 42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (s == 123456789) { 43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stdout, "well, i never!\n"); 44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } else { 45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stdout, "boringly as expected\n"); 46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 49