about summary refs log tree commit diff
path: root/examples/defork/forking_target.c
diff options
context:
space:
mode:
authorDominik Maier <domenukk@gmail.com>2020-07-16 02:17:05 +0200
committerDominik Maier <domenukk@gmail.com>2020-07-16 02:17:05 +0200
commitf465a75b6592e4c30b0465f63beda166a8e09045 (patch)
treeea72e8c66e2cb3842e342b2ab9cb1b1558c22fa1 /examples/defork/forking_target.c
parent4314e59af9a2224443fa38ac8145eba305189d97 (diff)
downloadafl++-f465a75b6592e4c30b0465f63beda166a8e09045.tar.gz
added initial defork example
Diffstat (limited to 'examples/defork/forking_target.c')
-rw-r--r--examples/defork/forking_target.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/examples/defork/forking_target.c b/examples/defork/forking_target.c
new file mode 100644
index 00000000..ff1d6e37
--- /dev/null
+++ b/examples/defork/forking_target.c
@@ -0,0 +1,46 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <stdint.h>
+#include <sys/types.h>
+
+/* This is an example target for defork.c - fuzz using
+```
+mkdir in; echo a > ./in/a
+AFL_PRELOAD=./defork64.so ../../afl-fuzz -i in -o out -- ./forking_target @@
+```
+*/
+
+int main(int argc, char **argv) {
+
+  if (argc < 2) {
+
+    printf("Example tool to test defork.\nUsage ./forking_target <input>\n");
+    return -1;
+
+  }
+
+  pid_t pid = fork();
+  if (pid == 0) {
+
+    printf("We're in the child.\n");
+    FILE *f = fopen(argv[1], "r");
+    char  buf[4096];
+    fread(buf, 1, 4096, f);
+    uint32_t offset = buf[100] + (buf[101] << 8);
+    char     test_val = buf[offset];
+    return test_val < 100;
+
+  } else if (pid < 0) {
+
+    perror("fork");
+    return -1;
+
+  } else {
+
+    printf("We are in the parent - defork didn't work! :( (pid=%d)\n", (int) pid);
+
+  }
+
+  return 0;
+
+}