aboutsummaryrefslogtreecommitdiff
path: root/frida_mode/src
diff options
context:
space:
mode:
Diffstat (limited to 'frida_mode/src')
-rw-r--r--frida_mode/src/entry.c2
-rw-r--r--frida_mode/src/instrument/instrument.c2
-rw-r--r--frida_mode/src/persistent/persistent.c6
-rw-r--r--frida_mode/src/seccomp/seccomp_event.c10
-rw-r--r--frida_mode/src/seccomp/seccomp_filter.c10
-rw-r--r--frida_mode/src/stalker.c22
-rw-r--r--frida_mode/src/stats/stats.c6
-rw-r--r--frida_mode/src/util.c34
8 files changed, 56 insertions, 36 deletions
diff --git a/frida_mode/src/entry.c b/frida_mode/src/entry.c
index 562e74eb..de645fdb 100644
--- a/frida_mode/src/entry.c
+++ b/frida_mode/src/entry.c
@@ -62,7 +62,7 @@ void entry_on_fork(void) {
void entry_config(void) {
- entry_point = util_read_address("AFL_ENTRYPOINT");
+ entry_point = util_read_address("AFL_ENTRYPOINT", 0);
if (getenv("AFL_FRIDA_TRACEABLE") != NULL) { traceable = TRUE; }
}
diff --git a/frida_mode/src/instrument/instrument.c b/frida_mode/src/instrument/instrument.c
index d5823654..414dc84c 100644
--- a/frida_mode/src/instrument/instrument.c
+++ b/frida_mode/src/instrument/instrument.c
@@ -246,7 +246,7 @@ void instrument_config(void) {
instrument_tracing = (getenv("AFL_FRIDA_INST_TRACE") != NULL);
instrument_unique = (getenv("AFL_FRIDA_INST_TRACE_UNIQUE") != NULL);
instrument_use_fixed_seed = (getenv("AFL_FRIDA_INST_SEED") != NULL);
- instrument_fixed_seed = util_read_num("AFL_FRIDA_INST_SEED");
+ instrument_fixed_seed = util_read_num("AFL_FRIDA_INST_SEED", 0);
instrument_coverage_unstable_filename =
(getenv("AFL_FRIDA_INST_UNSTABLE_COVERAGE_FILE"));
diff --git a/frida_mode/src/persistent/persistent.c b/frida_mode/src/persistent/persistent.c
index e62f25d0..817d9925 100644
--- a/frida_mode/src/persistent/persistent.c
+++ b/frida_mode/src/persistent/persistent.c
@@ -22,9 +22,9 @@ gboolean persistent_debug = FALSE;
void persistent_config(void) {
hook_name = getenv("AFL_FRIDA_PERSISTENT_HOOK");
- persistent_start = util_read_address("AFL_FRIDA_PERSISTENT_ADDR");
- persistent_count = util_read_num("AFL_FRIDA_PERSISTENT_CNT");
- persistent_ret = util_read_address("AFL_FRIDA_PERSISTENT_RET");
+ persistent_start = util_read_address("AFL_FRIDA_PERSISTENT_ADDR", 0);
+ persistent_count = util_read_num("AFL_FRIDA_PERSISTENT_CNT", 0);
+ persistent_ret = util_read_address("AFL_FRIDA_PERSISTENT_RET", 0);
if (getenv("AFL_FRIDA_PERSISTENT_DEBUG") != NULL) { persistent_debug = TRUE; }
diff --git a/frida_mode/src/seccomp/seccomp_event.c b/frida_mode/src/seccomp/seccomp_event.c
index 0907eff8..e6585f1d 100644
--- a/frida_mode/src/seccomp/seccomp_event.c
+++ b/frida_mode/src/seccomp/seccomp_event.c
@@ -10,13 +10,13 @@
int seccomp_event_create(void) {
-#ifdef SYS_eventfd
+ #ifdef SYS_eventfd
int fd = syscall(SYS_eventfd, 0, 0);
-#else
-# ifdef SYS_eventfd2
+ #else
+ #ifdef SYS_eventfd2
int fd = syscall(SYS_eventfd2, 0, 0);
-# endif
-#endif
+ #endif
+ #endif
if (fd < 0) { FFATAL("seccomp_event_create"); }
return fd;
diff --git a/frida_mode/src/seccomp/seccomp_filter.c b/frida_mode/src/seccomp/seccomp_filter.c
index 5aee398f..1d050303 100644
--- a/frida_mode/src/seccomp/seccomp_filter.c
+++ b/frida_mode/src/seccomp/seccomp_filter.c
@@ -72,13 +72,13 @@ static struct sock_filter filter[] = {
/* Allow us to make anonymous maps */
BPF_STMT(BPF_LD | BPF_W | BPF_ABS, (offsetof(struct seccomp_data, nr))),
-#ifdef __NR_mmap
+ #ifdef __NR_mmap
BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, __NR_mmap, 0, 3),
-#else
-# ifdef __NR_mmap2
+ #else
+ #ifdef __NR_mmap2
BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, __NR_mmap2, 0, 3),
-# endif
-#endif
+ #endif
+ #endif
BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
(offsetof(struct seccomp_data, args[4]))),
BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, -1, 0, 1),
diff --git a/frida_mode/src/stalker.c b/frida_mode/src/stalker.c
index b4dd5a47..caa16b3f 100644
--- a/frida_mode/src/stalker.c
+++ b/frida_mode/src/stalker.c
@@ -61,9 +61,10 @@ void stalker_config(void) {
backpatch_enable = (getenv("AFL_FRIDA_INST_NO_BACKPATCH") == NULL);
- stalker_ic_entries = util_read_num("AFL_FRIDA_STALKER_ADJACENT_BLOCKS");
+ stalker_ic_entries = util_read_num("AFL_FRIDA_STALKER_IC_ENTRIES", 32);
- stalker_adjacent_blocks = util_read_num("AFL_FRIDA_STALKER_IC_ENTRIES");
+ stalker_adjacent_blocks =
+ util_read_num("AFL_FRIDA_STALKER_ADJACENT_BLOCKS", 32);
observer = g_object_new(GUM_TYPE_AFL_STALKER_OBSERVER, NULL);
@@ -98,33 +99,32 @@ void stalker_init(void) {
FOKF("Stalker - adjacent_blocks [%u]", stalker_adjacent_blocks);
#if !(defined(__x86_64__) || defined(__i386__))
- if (stalker_ic_entries != 0) {
+ if (getenv("AFL_FRIDA_STALKER_IC_ENTRIES") != NULL) {
FFATAL("AFL_FRIDA_STALKER_IC_ENTRIES not supported");
}
- if (stalker_adjacent_blocks != 0) {
+ if (getenv("AFL_FRIDA_STALKER_ADJACENT_BLOCKS") != NULL) {
FFATAL("AFL_FRIDA_STALKER_ADJACENT_BLOCKS not supported");
}
#endif
- if (stalker_ic_entries == 0) { stalker_ic_entries = 32; }
- if (instrument_coverage_filename == NULL) {
+ if (instrument_coverage_filename != NULL) {
- if (stalker_adjacent_blocks == 0) { stalker_adjacent_blocks = 32; }
-
- } else {
-
- if (stalker_adjacent_blocks != 0) {
+ if (getenv("AFL_FRIDA_STALKER_ADJACENT_BLOCKS") != NULL) {
FFATAL(
"AFL_FRIDA_STALKER_ADJACENT_BLOCKS and AFL_FRIDA_INST_COVERAGE_FILE "
"are incompatible");
+ } else {
+
+ stalker_adjacent_blocks = 0;
+
}
}
diff --git a/frida_mode/src/stats/stats.c b/frida_mode/src/stats/stats.c
index a61834d6..83ecf89a 100644
--- a/frida_mode/src/stats/stats.c
+++ b/frida_mode/src/stats/stats.c
@@ -323,7 +323,7 @@ static void stats_observer_init(GumStalkerObserver *observer) {
void stats_config(void) {
stats_filename = getenv("AFL_FRIDA_STATS_FILE");
- stats_interval = util_read_num("AFL_FRIDA_STATS_INTERVAL");
+ stats_interval = util_read_num("AFL_FRIDA_STATS_INTERVAL", 10);
}
@@ -332,7 +332,8 @@ void stats_init(void) {
FOKF("Stats - file [%s]", stats_filename);
FOKF("Stats - interval [%" G_GINT64_MODIFIER "u]", stats_interval);
- if (stats_interval != 0 && stats_filename == NULL) {
+ if (getenv("AFL_FRIDA_STATS_INTERVAL") != NULL &&
+ getenv("AFL_FRIDA_STATS_FILE") == NULL) {
FFATAL(
"AFL_FRIDA_STATS_FILE must be specified if "
@@ -340,7 +341,6 @@ void stats_init(void) {
}
- if (stats_interval == 0) { stats_interval = 10; }
stats_interval_us = stats_interval * MICRO_TO_SEC;
if (stats_filename == NULL) { return; }
diff --git a/frida_mode/src/util.c b/frida_mode/src/util.c
index d84b7065..6f52b6cb 100644
--- a/frida_mode/src/util.c
+++ b/frida_mode/src/util.c
@@ -1,10 +1,11 @@
#include "util.h"
-guint64 util_read_address(char *key) {
+guint64 util_read_address(char *key, guint64 default_value) {
char *value_str = getenv(key);
+ char *end_ptr;
- if (value_str == NULL) { return 0; }
+ if (value_str == NULL) { return default_value; }
if (!g_str_has_prefix(value_str, "0x")) {
@@ -25,8 +26,17 @@ guint64 util_read_address(char *key) {
}
- guint64 value = g_ascii_strtoull(value_str2, NULL, 16);
- if (value == 0) {
+ errno = 0;
+
+ guint64 value = g_ascii_strtoull(value_str2, &end_ptr, 16);
+
+ if (errno != 0) {
+
+ FATAL("Error (%d) during conversion: %s", errno, value_str);
+
+ }
+
+ if (value == 0 && end_ptr == value_str2) {
FATAL("Invalid address failed hex conversion: %s=%s\n", key, value_str2);
@@ -36,11 +46,12 @@ guint64 util_read_address(char *key) {
}
-guint64 util_read_num(char *key) {
+guint64 util_read_num(char *key, guint64 default_value) {
char *value_str = getenv(key);
+ char *end_ptr;
- if (value_str == NULL) { return 0; }
+ if (value_str == NULL) { return default_value; }
for (char *c = value_str; *c != '\0'; c++) {
@@ -53,8 +64,17 @@ guint64 util_read_num(char *key) {
}
+ errno = 0;
+
guint64 value = g_ascii_strtoull(value_str, NULL, 10);
- if (value == 0) {
+
+ if (errno != 0) {
+
+ FATAL("Error (%d) during conversion: %s", errno, value_str);
+
+ }
+
+ if (value == 0 && end_ptr == value_str) {
FATAL("Invalid address failed numeric conversion: %s=%s\n", key, value_str);