mirror of
https://github.com/AFLplusplus/AFLplusplus.git
synced 2025-06-20 05:23:43 +00:00
extract function afl_fsrv_setup_preload
This commit is contained in:
@ -242,6 +242,7 @@ typedef enum fsrv_run_result {
|
|||||||
|
|
||||||
void afl_fsrv_init(afl_forkserver_t *fsrv);
|
void afl_fsrv_init(afl_forkserver_t *fsrv);
|
||||||
void afl_fsrv_init_dup(afl_forkserver_t *fsrv_to, afl_forkserver_t *from);
|
void afl_fsrv_init_dup(afl_forkserver_t *fsrv_to, afl_forkserver_t *from);
|
||||||
|
void afl_fsrv_setup_preload(afl_forkserver_t *fsrv, char *argv0);
|
||||||
void afl_fsrv_start(afl_forkserver_t *fsrv, char **argv,
|
void afl_fsrv_start(afl_forkserver_t *fsrv, char **argv,
|
||||||
volatile u8 *stop_soon_p, u8 debug_child_output);
|
volatile u8 *stop_soon_p, u8 debug_child_output);
|
||||||
u32 afl_fsrv_get_mapsize(afl_forkserver_t *fsrv, char **argv,
|
u32 afl_fsrv_get_mapsize(afl_forkserver_t *fsrv, char **argv,
|
||||||
|
@ -75,7 +75,6 @@ static bool edges_only, /* Ignore hit counts? */
|
|||||||
static volatile u8 stop_soon; /* Ctrl-C pressed? */
|
static volatile u8 stop_soon; /* Ctrl-C pressed? */
|
||||||
|
|
||||||
static u8 *target_path;
|
static u8 *target_path;
|
||||||
static u8 frida_mode;
|
|
||||||
static u8 qemu_mode;
|
static u8 qemu_mode;
|
||||||
static u8 cs_mode;
|
static u8 cs_mode;
|
||||||
static u32 map_size = MAP_SIZE;
|
static u32 map_size = MAP_SIZE;
|
||||||
@ -628,9 +627,7 @@ static void handle_stop_sig(int sig) {
|
|||||||
|
|
||||||
static void set_up_environment(char **argv) {
|
static void set_up_environment(char **argv) {
|
||||||
|
|
||||||
u8 *x;
|
u8 *x;
|
||||||
char *afl_preload;
|
|
||||||
char *frida_afl_preload = NULL;
|
|
||||||
|
|
||||||
fsrv.dev_null_fd = open("/dev/null", O_RDWR);
|
fsrv.dev_null_fd = open("/dev/null", O_RDWR);
|
||||||
if (fsrv.dev_null_fd < 0) { PFATAL("Unable to open /dev/null"); }
|
if (fsrv.dev_null_fd < 0) { PFATAL("Unable to open /dev/null"); }
|
||||||
@ -672,57 +669,7 @@ static void set_up_environment(char **argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
set_sanitizer_defaults();
|
set_sanitizer_defaults();
|
||||||
|
afl_fsrv_setup_preload(&fsrv, argv[0]);
|
||||||
if (get_afl_env("AFL_PRELOAD")) {
|
|
||||||
|
|
||||||
if (qemu_mode) {
|
|
||||||
|
|
||||||
/* afl-qemu-trace takes care of converting AFL_PRELOAD. */
|
|
||||||
|
|
||||||
} else if (frida_mode) {
|
|
||||||
|
|
||||||
afl_preload = getenv("AFL_PRELOAD");
|
|
||||||
u8 *frida_binary = find_afl_binary(argv[0], "afl-frida-trace.so");
|
|
||||||
if (afl_preload) {
|
|
||||||
|
|
||||||
frida_afl_preload = alloc_printf("%s:%s", afl_preload, frida_binary);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
frida_afl_preload = alloc_printf("%s", frida_binary);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
ck_free(frida_binary);
|
|
||||||
|
|
||||||
setenv("LD_PRELOAD", frida_afl_preload, 1);
|
|
||||||
#ifdef __APPLE__
|
|
||||||
setenv("DYLD_INSERT_LIBRARIES", frida_afl_preload, 1);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
/* CoreSight mode uses the default behavior. */
|
|
||||||
|
|
||||||
setenv("LD_PRELOAD", getenv("AFL_PRELOAD"), 1);
|
|
||||||
#ifdef __APPLE__
|
|
||||||
setenv("DYLD_INSERT_LIBRARIES", getenv("AFL_PRELOAD"), 1);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (frida_mode) {
|
|
||||||
|
|
||||||
u8 *frida_binary = find_afl_binary(argv[0], "afl-frida-trace.so");
|
|
||||||
setenv("LD_PRELOAD", frida_binary, 1);
|
|
||||||
#ifdef __APPLE__
|
|
||||||
setenv("DYLD_INSERT_LIBRARIES", frida_binary, 1);
|
|
||||||
#endif
|
|
||||||
ck_free(frida_binary);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (frida_afl_preload) { ck_free(frida_afl_preload); }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -936,10 +883,9 @@ int main(int argc, char **argv_orig, char **envp) {
|
|||||||
|
|
||||||
case 'O': /* FRIDA mode */
|
case 'O': /* FRIDA mode */
|
||||||
|
|
||||||
if (frida_mode) { FATAL("Multiple -O options not supported"); }
|
if (fsrv.frida_mode) { FATAL("Multiple -O options not supported"); }
|
||||||
|
|
||||||
frida_mode = 1;
|
fsrv.frida_mode = true;
|
||||||
fsrv.frida_mode = frida_mode;
|
|
||||||
setenv("AFL_FRIDA_INST_SEED", "1", 1);
|
setenv("AFL_FRIDA_INST_SEED", "1", 1);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -320,6 +320,63 @@ void afl_fsrv_init_dup(afl_forkserver_t *fsrv_to, afl_forkserver_t *from) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void afl_fsrv_setup_preload(afl_forkserver_t *fsrv, char *argv0) {
|
||||||
|
|
||||||
|
char *afl_preload;
|
||||||
|
char *frida_afl_preload = NULL;
|
||||||
|
if (get_afl_env("AFL_PRELOAD")) {
|
||||||
|
|
||||||
|
if (fsrv->qemu_mode) {
|
||||||
|
|
||||||
|
/* afl-qemu-trace takes care of converting AFL_PRELOAD. */
|
||||||
|
|
||||||
|
} else if (fsrv->frida_mode) {
|
||||||
|
|
||||||
|
afl_preload = getenv("AFL_PRELOAD");
|
||||||
|
u8 *frida_binary = find_afl_binary(argv0, "afl-frida-trace.so");
|
||||||
|
if (afl_preload) {
|
||||||
|
|
||||||
|
frida_afl_preload = alloc_printf("%s:%s", afl_preload, frida_binary);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
frida_afl_preload = alloc_printf("%s", frida_binary);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ck_free(frida_binary);
|
||||||
|
|
||||||
|
setenv("LD_PRELOAD", frida_afl_preload, 1);
|
||||||
|
#ifdef __APPLE__
|
||||||
|
setenv("DYLD_INSERT_LIBRARIES", frida_afl_preload, 1);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* CoreSight mode uses the default behavior. */
|
||||||
|
|
||||||
|
setenv("LD_PRELOAD", getenv("AFL_PRELOAD"), 1);
|
||||||
|
#ifdef __APPLE__
|
||||||
|
setenv("DYLD_INSERT_LIBRARIES", getenv("AFL_PRELOAD"), 1);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (fsrv->frida_mode) {
|
||||||
|
|
||||||
|
u8 *frida_binary = find_afl_binary(argv0, "afl-frida-trace.so");
|
||||||
|
setenv("LD_PRELOAD", frida_binary, 1);
|
||||||
|
#ifdef __APPLE__
|
||||||
|
setenv("DYLD_INSERT_LIBRARIES", frida_binary, 1);
|
||||||
|
#endif
|
||||||
|
ck_free(frida_binary);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (frida_afl_preload) { ck_free(frida_afl_preload); }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/* Wrapper for select() and read(), reading a 32 bit var.
|
/* Wrapper for select() and read(), reading a 32 bit var.
|
||||||
Returns the time passed to read.
|
Returns the time passed to read.
|
||||||
If the wait times out, returns timeout_ms + 1;
|
If the wait times out, returns timeout_ms + 1;
|
||||||
|
@ -714,61 +714,8 @@ static void handle_stop_sig(int sig) {
|
|||||||
|
|
||||||
static void set_up_environment(afl_forkserver_t *fsrv, char **argv) {
|
static void set_up_environment(afl_forkserver_t *fsrv, char **argv) {
|
||||||
|
|
||||||
char *afl_preload;
|
|
||||||
char *frida_afl_preload = NULL;
|
|
||||||
|
|
||||||
set_sanitizer_defaults();
|
set_sanitizer_defaults();
|
||||||
|
afl_fsrv_setup_preload(fsrv, argv[0]);
|
||||||
if (get_afl_env("AFL_PRELOAD")) {
|
|
||||||
|
|
||||||
if (fsrv->qemu_mode) {
|
|
||||||
|
|
||||||
/* afl-qemu-trace takes care of converting AFL_PRELOAD. */
|
|
||||||
|
|
||||||
} else if (fsrv->frida_mode) {
|
|
||||||
|
|
||||||
afl_preload = getenv("AFL_PRELOAD");
|
|
||||||
u8 *frida_binary = find_afl_binary(argv[0], "afl-frida-trace.so");
|
|
||||||
if (afl_preload) {
|
|
||||||
|
|
||||||
frida_afl_preload = alloc_printf("%s:%s", afl_preload, frida_binary);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
frida_afl_preload = alloc_printf("%s", frida_binary);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
ck_free(frida_binary);
|
|
||||||
|
|
||||||
setenv("LD_PRELOAD", frida_afl_preload, 1);
|
|
||||||
#ifdef __APPLE__
|
|
||||||
setenv("DYLD_INSERT_LIBRARIES", frida_afl_preload, 1);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
/* CoreSight mode uses the default behavior. */
|
|
||||||
|
|
||||||
setenv("LD_PRELOAD", getenv("AFL_PRELOAD"), 1);
|
|
||||||
#ifdef __APPLE__
|
|
||||||
setenv("DYLD_INSERT_LIBRARIES", getenv("AFL_PRELOAD"), 1);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (fsrv->frida_mode) {
|
|
||||||
|
|
||||||
u8 *frida_binary = find_afl_binary(argv[0], "afl-frida-trace.so");
|
|
||||||
setenv("LD_PRELOAD", frida_binary, 1);
|
|
||||||
#ifdef __APPLE__
|
|
||||||
setenv("DYLD_INSERT_LIBRARIES", frida_binary, 1);
|
|
||||||
#endif
|
|
||||||
ck_free(frida_binary);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (frida_afl_preload) { ck_free(frida_afl_preload); }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -899,9 +899,7 @@ static void handle_stop_sig(int sig) {
|
|||||||
|
|
||||||
static void set_up_environment(afl_forkserver_t *fsrv, char **argv) {
|
static void set_up_environment(afl_forkserver_t *fsrv, char **argv) {
|
||||||
|
|
||||||
u8 *x;
|
u8 *x;
|
||||||
char *afl_preload;
|
|
||||||
char *frida_afl_preload = NULL;
|
|
||||||
|
|
||||||
fsrv->dev_null_fd = open("/dev/null", O_RDWR);
|
fsrv->dev_null_fd = open("/dev/null", O_RDWR);
|
||||||
if (fsrv->dev_null_fd < 0) { PFATAL("Unable to open /dev/null"); }
|
if (fsrv->dev_null_fd < 0) { PFATAL("Unable to open /dev/null"); }
|
||||||
@ -945,57 +943,7 @@ static void set_up_environment(afl_forkserver_t *fsrv, char **argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
set_sanitizer_defaults();
|
set_sanitizer_defaults();
|
||||||
|
afl_fsrv_setup_preload(fsrv, argv[0]);
|
||||||
if (get_afl_env("AFL_PRELOAD")) {
|
|
||||||
|
|
||||||
if (fsrv->qemu_mode) {
|
|
||||||
|
|
||||||
/* afl-qemu-trace takes care of converting AFL_PRELOAD. */
|
|
||||||
|
|
||||||
} else if (fsrv->frida_mode) {
|
|
||||||
|
|
||||||
afl_preload = getenv("AFL_PRELOAD");
|
|
||||||
u8 *frida_binary = find_afl_binary(argv[0], "afl-frida-trace.so");
|
|
||||||
if (afl_preload) {
|
|
||||||
|
|
||||||
frida_afl_preload = alloc_printf("%s:%s", afl_preload, frida_binary);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
frida_afl_preload = alloc_printf("%s", frida_binary);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
ck_free(frida_binary);
|
|
||||||
|
|
||||||
setenv("LD_PRELOAD", frida_afl_preload, 1);
|
|
||||||
#ifdef __APPLE__
|
|
||||||
setenv("DYLD_INSERT_LIBRARIES", frida_afl_preload, 1);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
/* CoreSight mode uses the default behavior. */
|
|
||||||
|
|
||||||
setenv("LD_PRELOAD", getenv("AFL_PRELOAD"), 1);
|
|
||||||
#ifdef __APPLE__
|
|
||||||
setenv("DYLD_INSERT_LIBRARIES", getenv("AFL_PRELOAD"), 1);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (fsrv->frida_mode) {
|
|
||||||
|
|
||||||
u8 *frida_binary = find_afl_binary(argv[0], "afl-frida-trace.so");
|
|
||||||
setenv("LD_PRELOAD", frida_binary, 1);
|
|
||||||
#ifdef __APPLE__
|
|
||||||
setenv("DYLD_INSERT_LIBRARIES", frida_binary, 1);
|
|
||||||
#endif
|
|
||||||
ck_free(frida_binary);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (frida_afl_preload) { ck_free(frida_afl_preload); }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user