about summary refs log tree commit diff
path: root/unicorn_mode/patches
diff options
context:
space:
mode:
authorAndrea Fioraldi <andreafioraldi@gmail.com>2019-08-27 21:10:51 +0200
committerAndrea Fioraldi <andreafioraldi@gmail.com>2019-08-27 21:10:51 +0200
commitc5e0b29a22a126a90942fd31a85fcfe8486fa67c (patch)
treea5422ba34ef88274169e933731404e0fa8e0b4cd /unicorn_mode/patches
parentbec9b307db299b586c2574031d3cc1a491dc00c3 (diff)
downloadafl++-c5e0b29a22a126a90942fd31a85fcfe8486fa67c.tar.gz
neverzero for unicorn_mode
Diffstat (limited to 'unicorn_mode/patches')
-rw-r--r--unicorn_mode/patches/afl-unicorn-cpu-inl.h16
1 files changed, 15 insertions, 1 deletions
diff --git a/unicorn_mode/patches/afl-unicorn-cpu-inl.h b/unicorn_mode/patches/afl-unicorn-cpu-inl.h
index 892c3f72..ed422725 100644
--- a/unicorn_mode/patches/afl-unicorn-cpu-inl.h
+++ b/unicorn_mode/patches/afl-unicorn-cpu-inl.h
@@ -241,7 +241,21 @@ static inline void afl_maybe_log(unsigned long cur_loc) {
   // DEBUG
   //printf("cur_loc = 0x%lx\n", cur_loc);  
 
-  afl_area_ptr[cur_loc ^ prev_loc]++;
+  register uintptr_t afl_idx = cur_loc ^ prev_loc;
+
+#if (defined(__x86_64__) || defined(__i386__)) && defined(AFL_QEMU_NOT_ZERO)
+  asm volatile (
+    "incb (%0, %1, 1)\n"
+    "seto %%al\n"
+    "addb %%al, (%0, %1, 1)\n"
+    : /* no out */
+    : "r" (afl_area_ptr), "r" (afl_idx)
+    : "memory", "eax"
+  );
+#else
+  afl_area_ptr[afl_idx]++;
+#endif
+
   prev_loc = cur_loc >> 1;
 
 }