about summary refs log tree commit diff
path: root/src/afl-fuzz-init.c
diff options
context:
space:
mode:
authorrish9101 <rranjan@cs.iitr.ac.in>2020-05-13 18:59:12 +0530
committerrish9101 <rranjan@cs.iitr.ac.in>2020-05-13 18:59:12 +0530
commit9627458ecc61783aa1f8bf76835abe00c4107739 (patch)
treed489774c83c2e24faf9c44fcde3eb21990679891 /src/afl-fuzz-init.c
parentf8b3d34225102158ed585130e3de08772e989b53 (diff)
downloadafl++-9627458ecc61783aa1f8bf76835abe00c4107739.tar.gz
Add post library API as custom mutator and rename pre_save
Diffstat (limited to 'src/afl-fuzz-init.c')
-rw-r--r--src/afl-fuzz-init.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/afl-fuzz-init.c b/src/afl-fuzz-init.c
index 78b92368..2686d014 100644
--- a/src/afl-fuzz-init.c
+++ b/src/afl-fuzz-init.c
@@ -297,12 +297,16 @@ void setup_post(afl_state_t *afl) {
   dh = dlopen(fn, RTLD_NOW);
   if (!dh) { FATAL("%s", dlerror()); }
 
-  afl->post_handler = dlsym(dh, "afl_postprocess");
-  if (!afl->post_handler) { FATAL("Symbol 'afl_postprocess' not found."); }
-  afl->post_init = dlsym(dh, "afl_postprocess_init");
-  if (!afl->post_init) { FATAL("Symbol 'afl_postprocess_init' not found."); }
-  afl->post_deinit = dlsym(dh, "afl_postprocess_deinit");
-  if (!afl->post_deinit) {
+  struct custom_mutator * mutator;
+  mutator = ck_alloc(sizeof(struct custom_mutator));
+  memset(mutator, 0, sizeof(struct custom_mutator));
+
+  mutator->afl_custom_post_process = dlsym(dh, "afl_postprocess");
+  if (!mutator->afl_custom_post_process) { FATAL("Symbol 'afl_postprocess' not found."); }
+  mutator->afl_custom_init = dlsym(dh, "afl_postprocess_init");
+  if (!mutator->afl_custom_init) { FATAL("Symbol 'afl_postprocess_init' not found."); }
+  mutator->afl_custom_deinit = dlsym(dh, "afl_postprocess_deinit");
+  if (!mutator->afl_custom_post_process) {
 
     FATAL("Symbol 'afl_postprocess_deinit' not found.");
 
@@ -311,16 +315,18 @@ void setup_post(afl_state_t *afl) {
   /* Do a quick test. It's better to segfault now than later =) */
 
   u8 *post_buf = NULL;
-  afl->post_data = afl->post_init(afl);
-  if (!afl->post_data) { FATAL("Could not initialize post handler."); }
+  mutator->data = mutator->afl_custom_init(afl, rand_below(afl, 0xFFFFFFFF));
+  if (!mutator->data) { FATAL("Could not initialize post handler."); }
 
-  size_t post_len = afl->post_handler(afl->post_data, tbuf, tlen, &post_buf);
+  size_t post_len = mutator->afl_custom_post_process(mutator->data, tbuf, tlen, &post_buf);
   if (!post_len || !post_buf) {
 
     SAYF("Empty return in test post handler for buf=\"hello\\0\".");
 
   }
 
+  afl->post_library_mutator = mutator;
+
   OKF("Postprocessor installed successfully.");
 
 }