compile-time option to restore kAFL style full edge traces

This commit is contained in:
Steffen Schulz 2021-07-21 03:30:02 -07:00
parent 81dbc38d46
commit 7dbb64e7c2

View File

@ -4,6 +4,13 @@
#include <assert.h> #include <assert.h>
#include "redqueen_trace.h" #include "redqueen_trace.h"
/* write full trace of edge transitions rather than sorted list? */
//#define KAFL_FULL_TRACES
#ifdef KAFL_FULL_TRACES
#include "redqueen.h"
#endif
redqueen_trace_t* redqueen_trace_new(void){ redqueen_trace_t* redqueen_trace_new(void){
redqueen_trace_t* self = malloc(sizeof(redqueen_trace_t)); redqueen_trace_t* self = malloc(sizeof(redqueen_trace_t));
self->lookup = kh_init(RQ_TRACE); self->lookup = kh_init(RQ_TRACE);
@ -28,6 +35,13 @@ void redqueen_trace_free(redqueen_trace_t* self){
void redqueen_trace_register_transition(redqueen_trace_t* self, disassembler_mode_t mode, uint64_t from, uint64_t to){ void redqueen_trace_register_transition(redqueen_trace_t* self, disassembler_mode_t mode, uint64_t from, uint64_t to){
khiter_t k; khiter_t k;
int ret; int ret;
#ifdef KAFL_FULL_TRACES
extern int trace_fd;
if (!trace_fd)
trace_fd = open(redqueen_workdir.pt_trace_results, O_WRONLY | O_CREAT | O_APPEND, S_IRWXU);
dprintf(trace_fd, "%lx,%lx\n", from, to);
return;
#endif
uint128_t key = (((uint128_t)from)<<64) | ((uint128_t)to); uint128_t key = (((uint128_t)from)<<64) | ((uint128_t)to);
k = kh_get(RQ_TRACE, self->lookup, key); k = kh_get(RQ_TRACE, self->lookup, key);
if(k != kh_end(self->lookup)){ if(k != kh_end(self->lookup)){
@ -42,6 +56,9 @@ void redqueen_trace_register_transition(redqueen_trace_t* self, disassembler_mod
} }
void redqueen_trace_write_file(redqueen_trace_t* self, int fd){ void redqueen_trace_write_file(redqueen_trace_t* self, int fd){
#ifdef KAFL_FULL_TRACES
return;
#endif
for(size_t i = 0; i < self->num_ordered_transitions; i++){ for(size_t i = 0; i < self->num_ordered_transitions; i++){
khiter_t k; khiter_t k;
uint128_t key = self->ordered_transitions[i]; uint128_t key = self->ordered_transitions[i];