#include <stdio.h> | |
#include <stdlib.h> | |
#include <stdarg.h> | |
static void printf_log(const char *fmt, ...) | |
{ | |
va_list lst; | |
va_start(lst, fmt); | |
vprintf(fmt, lst); | |
va_end(lst); | |
} | |
/* Override this for non-printf reporting */ | |
extern void (*malloc_log)(const char *fmt, ...); | |
static void ctor(void) __attribute__((constructor)); | |
static void ctor(void) | |
{ | |
malloc_log = printf_log; | |
} | |
int main(void) | |
{ | |
char *ptr[6]; | |
char *uaf; | |
char *cf, *cb; | |
ptr[0] = malloc(10); | |
ptr[1] = calloc(1,20); | |
ptr[2] = malloc(30); | |
ptr[3] = malloc(40); | |
ptr[4] = malloc(50); | |
ptr[5] = malloc(60); | |
free(ptr[1]); | |
free(ptr[1]); | |
free(ptr[2]); | |
ptr[2] = realloc(ptr[2], 300); | |
// free(ptr[2]); | |
// free(ptr[2]); | |
uaf = ptr[3]; | |
free(uaf); | |
uaf[5] = 'a'; | |
cf = ptr[4]; | |
cf[-1] = 'a'; | |
cb = ptr[5]; | |
cb[60] = 'a'; | |
sleep(10); | |
return 0; | |
} |