aboutsummaryrefslogtreecommitdiff
path: root/frida_mode/src/util.c
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2021-12-09 11:55:36 +0100
committerGitHub <noreply@github.com>2021-12-09 11:55:36 +0100
commit08ca4d54a55fe73e64a994c41a12af61f52e497e (patch)
tree2d0f060cf98afbe80f5bf810fd6b167a5152be81 /frida_mode/src/util.c
parent773baf9391ff5f1793deb7968366819e7fa07adc (diff)
parent4c6d94ea5f854071277ed9729de2d4ef7d07cc84 (diff)
downloadafl++-08ca4d54a55fe73e64a994c41a12af61f52e497e.tar.gz
Merge pull request #1101 from AFLplusplus/dev
Dev
Diffstat (limited to 'frida_mode/src/util.c')
-rw-r--r--frida_mode/src/util.c73
1 files changed, 64 insertions, 9 deletions
diff --git a/frida_mode/src/util.c b/frida_mode/src/util.c
index 09e8a58b..6f52b6cb 100644
--- a/frida_mode/src/util.c
+++ b/frida_mode/src/util.c
@@ -1,12 +1,11 @@
#include "util.h"
-#include "debug.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")) {
@@ -27,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);
@@ -38,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++) {
@@ -55,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);
@@ -66,3 +84,40 @@ guint64 util_read_num(char *key) {
}
+gboolean util_output_enabled(void) {
+
+ static gboolean initialized = FALSE;
+ static gboolean enabled = TRUE;
+
+ if (!initialized) {
+
+ initialized = TRUE;
+ if (getenv("AFL_DEBUG_CHILD") == NULL) { enabled = FALSE; }
+
+ }
+
+ return enabled;
+
+}
+
+gsize util_rotate(gsize val, gsize shift, gsize size) {
+
+ if (shift == 0) { return val; }
+ gsize result = ((val >> shift) | (val << (size - shift)));
+ result = result & ((1 << size) - 1);
+ return result;
+
+}
+
+gsize util_log2(gsize val) {
+
+ for (gsize i = 0; i < 64; i++) {
+
+ if (((gsize)1 << i) == val) { return i; }
+
+ }
+
+ FFATAL("Not a power of two");
+
+}
+