// This simple example just creates random buffer <= 100 filled with 'A' // needs -I /path/to/AFLplusplus/include //#include "custom_mutator_helpers.h" #include #include #include #include #include "radamsa.h" #include "custom_mutator_helpers.h" typedef struct my_mutator { afl_t *afl; u8 *mutator_buf; unsigned int seed; } my_mutator_t; my_mutator_t *afl_custom_init(afl_t *afl, unsigned int seed) { srand(seed); my_mutator_t *data = calloc(1, sizeof(my_mutator_t)); if (!data) { perror("afl_custom_init alloc"); return NULL; } if ((data->mutator_buf = malloc(MAX_FILE)) == NULL) { perror("mutator_buf alloc"); return NULL; } data->afl = afl; data->seed = seed; radamsa_init(); return data; } size_t afl_custom_fuzz(my_mutator_t *data, uint8_t *buf, size_t buf_size, u8 **out_buf, uint8_t *add_buf, size_t add_buf_size, size_t max_size) { *out_buf = data->mutator_buf; return radamsa(buf, buf_size, data->mutator_buf, max_size, data->seed++); } /** * Deinitialize everything * * @param data The data ptr from afl_custom_init */ void afl_custom_deinit(my_mutator_t *data) { free(data->mutator_buf); free(data); }