about summary refs log tree commit diff
path: root/frida_mode/src/main.c
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2023-06-05 14:12:56 +0300
committerGitHub <noreply@github.com>2023-06-05 14:12:56 +0300
commitf9b72b6f2f9a6545143ad2efa40ea0b527a5bf5c (patch)
tree82620ccfd9079b2e4fd0f7a6176b20508d4b68ca /frida_mode/src/main.c
parented73c632a5791ca740fe64770b6d238206033ec4 (diff)
parentb644e48f36485c645cbc0dadf0fddb2aa14cc079 (diff)
downloadafl++-f9b72b6f2f9a6545143ad2efa40ea0b527a5bf5c.tar.gz
Merge pull request #1755 from AFLplusplus/dev
push to stable
Diffstat (limited to 'frida_mode/src/main.c')
-rw-r--r--frida_mode/src/main.c41
1 files changed, 36 insertions, 5 deletions
diff --git a/frida_mode/src/main.c b/frida_mode/src/main.c
index c8c50b37..f11c4b25 100644
--- a/frida_mode/src/main.c
+++ b/frida_mode/src/main.c
@@ -197,7 +197,7 @@ static void afl_print_env(void) {
 
 }
 
-__attribute__((visibility("default"))) void afl_frida_start(void) {
+void afl_frida_config(void) {
 
   FOKF(cRED "**********************");
   FOKF(cRED "* " cYEL "******************" cRED " *");
@@ -225,9 +225,7 @@ __attribute__((visibility("default"))) void afl_frida_start(void) {
 
   js_start();
 
-  /* Initialize */
   output_init();
-
   embedded_init();
   entry_init();
   instrument_init();
@@ -240,12 +238,35 @@ __attribute__((visibility("default"))) void afl_frida_start(void) {
   ranges_init();
   stats_init();
 
-  /* Start */
+}
+
+void afl_frida_run(void) {
+
   stalker_start();
   entry_start();
 
 }
 
+__attribute__((visibility("default"))) void afl_frida_start(void) {
+
+  afl_frida_config();
+  afl_frida_run();
+
+}
+
+typedef void *(*entry_func_t)(size_t a1, size_t a2, size_t a3, size_t a4,
+                              size_t a5, size_t a6);
+
+static void *on_entry(size_t a1, size_t a2, size_t a3, size_t a4, size_t a5,
+                      size_t a6) {
+
+  intercept_unhook(GSIZE_TO_POINTER(entry_point));
+  afl_frida_run();
+  entry_func_t entry = (entry_func_t)entry_point;
+  return entry(a1, a2, a3, a4, a5, a6);
+
+}
+
 static int on_main(int argc, char **argv, char **envp) {
 
   int ret;
@@ -254,7 +275,17 @@ static int on_main(int argc, char **argv, char **envp) {
 
   intercept_unhook_self();
 
-  afl_frida_start();
+  afl_frida_config();
+
+  if (entry_point == 0) {
+
+    afl_frida_run();
+
+  } else {
+
+    intercept_hook(GSIZE_TO_POINTER(entry_point), on_entry, NULL);
+
+  }
 
   if (js_main_hook != NULL) {