about summary refs log tree commit diff
path: root/frida_mode/src/asan/asan.c
diff options
context:
space:
mode:
Diffstat (limited to 'frida_mode/src/asan/asan.c')
-rw-r--r--frida_mode/src/asan/asan.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/frida_mode/src/asan/asan.c b/frida_mode/src/asan/asan.c
index d649bd76..fae1d655 100644
--- a/frida_mode/src/asan/asan.c
+++ b/frida_mode/src/asan/asan.c
@@ -1,6 +1,7 @@
 #include "frida-gumjs.h"
 
 #include "asan.h"
+#include "ranges.h"
 #include "util.h"
 
 static gboolean asan_enabled = FALSE;
@@ -32,3 +33,34 @@ void asan_init(void) {
 
 }
 
+gboolean asan_exclude_range(const GumRangeDetails *details,
+                            gpointer               user_data) {
+
+  UNUSED_PARAMETER(user_data);
+
+  FOKF("Exclude ASAN: 0x%016lx-0x%016lx", details->range->base_address,
+       details->range->base_address + details->range->size);
+
+  ranges_add_exclude((GumMemoryRange *)details->range);
+
+}
+
+static gboolean asan_exclude_module(const GumModuleDetails *details,
+                                    gpointer                user_data) {
+
+  gchar *    symbol_name = (gchar *)user_data;
+  GumAddress address;
+
+  address = gum_module_find_export_by_name(details->name, symbol_name);
+  if (address == 0) { return TRUE; }
+
+  gum_process_enumerate_ranges(GUM_PAGE_NO_ACCESS, asan_exclude_range, NULL);
+
+}
+
+void asan_exclude_module_by_symbol(gchar *symbol_name) {
+
+  gum_process_enumerate_modules(asan_exclude_module, "__asan_loadN");
+
+}
+