diff --git a/fuzzers/FRET/benchmark/.gitignore b/fuzzers/FRET/benchmark/.gitignore index c496b7ab01..8ae16ec83e 100644 --- a/fuzzers/FRET/benchmark/.gitignore +++ b/fuzzers/FRET/benchmark/.gitignore @@ -2,3 +2,6 @@ timedump corpora build mnt +.R* +*.png +*.pdf \ No newline at end of file diff --git a/fuzzers/FRET/benchmark/Makefile b/fuzzers/FRET/benchmark/Makefile index c3a8b2253c..1c93c219c6 100644 --- a/fuzzers/FRET/benchmark/Makefile +++ b/fuzzers/FRET/benchmark/Makefile @@ -1,4 +1,4 @@ -TIME=7200 +TIME=1000 corpora/%/seed: mkdir -p $$(dirname $@) @@ -32,5 +32,16 @@ all_sequential: timedump/sequential/mpeg2$(FUZZ_RANDOM) timedump/sequential/dijk all_kernel: timedump/kernel/bsort$(FUZZ_RANDOM) timedump/kernel/insertsort$(FUZZ_RANDOM) #timedump/kernel/fft$(FUZZ_RANDOM) +graphics: + Rscript --vanilla plot_comparison.r sequential audiobeam + Rscript --vanilla plot_comparison.r sequential dijkstra + Rscript --vanilla plot_comparison.r sequential epic + Rscript --vanilla plot_comparison.r sequential g723_enc + # Rscript --vanilla plot_comparison.r sequential gsm_enc + # Rscript --vanilla plot_comparison.r sequential huff_dec + Rscript --vanilla plot_comparison.r sequential mpeg2 + Rscript --vanilla plot_comparison.r sequential rijndael_dec + Rscript --vanilla plot_comparison.r sequential rijndael_enc + clean: rm -rf corpora timedump \ No newline at end of file diff --git a/fuzzers/FRET/benchmark/plot_comparison.r b/fuzzers/FRET/benchmark/plot_comparison.r index def7ac62d9..6340d34042 100644 --- a/fuzzers/FRET/benchmark/plot_comparison.r +++ b/fuzzers/FRET/benchmark/plot_comparison.r @@ -1,17 +1,52 @@ -#runtype="sequential" -runtype="kernel" -target="insertsort" -file_1=sprintf("~/code/FRET/LibAFL/fuzzers/FRET/benchmark/mnt/timedump/%s/%s",runtype,target) -file_2=sprintf("~/code/FRET/LibAFL/fuzzers/FRET/benchmark/mnt/timedump/%s/%s_random",runtype,target) -bsort <- read.table(file_1, quote="\"", comment.char="") -bsort_rand <- read.table(file_2, quote="\"", comment.char="") -bsort[[2]]=seq_len(length(bsort[[1]])) -bsort_rand[[2]]=seq_len(length(bsort_rand[[1]])) -names(bsort)[1] <- "bsort" -names(bsort)[2] <- "iter" -names(bsort_rand)[1] <- "bsort" -names(bsort_rand)[2] <- "iter" -plot(bsort[[2]],bsort[[1]], col="#99bbff", xlab="iters", ylab="wcet", pch='.') -points(bsort_rand[[2]],bsort_rand[[1]], col="#ffbb99", pch='.') -abline(lm(bsort ~ iter, data=bsort),col="green") -abline(lm(bsort ~ iter, data=bsort_rand),col="magenta") \ No newline at end of file +args = commandArgs(trailingOnly=TRUE) + +if (length(args)==0) { + runtype="sequential" + target="g723_enc" + filename_1="graph.pdf" +} else { + runtype=args[1] + target=args[2] + filename_1=sprintf("%s.png",args[2]) + filename_2=sprintf("%s_maxline.png",args[2]) + # filename_1=args[3] +} + +file_1=sprintf("~/code/FRET/LibAFL/fuzzers/FRET/benchmark/%s/%s",runtype,target) +file_2=sprintf("~/code/FRET/LibAFL/fuzzers/FRET/benchmark/%s/%s_random",runtype,target) +timetrace <- read.table(file_1, quote="\"", comment.char="") +timetrace_rand <- read.table(file_2, quote="\"", comment.char="") +timetrace[[2]]=seq_len(length(timetrace[[1]])) +timetrace_rand[[2]]=seq_len(length(timetrace_rand[[1]])) +names(timetrace)[1] <- "timetrace" +names(timetrace)[2] <- "iter" +names(timetrace_rand)[1] <- "timetrace" +names(timetrace_rand)[2] <- "iter" + +png(file=filename_1) +# pdf(file=filename_1,width=8, height=8) +plot(timetrace[[2]],timetrace[[1]], col="#99bbff", xlab="iters", ylab="wcet", pch='.') +points(timetrace_rand[[2]],timetrace_rand[[1]], col="#ffbb99", pch='.') +abline(lm(timetrace ~ iter, data=timetrace),col="green") +abline(lm(timetrace ~ iter, data=timetrace_rand),col="magenta") +dev.off() + +# Takes a flat list +trace2maxline <- function(tr) { + maxline = tr + for (var in seq_len(length(maxline))[2:length(maxline)]) { + maxline[var] = max(maxline[var],maxline[var-1]) + } + #plot(seq_len(length(maxline)),maxline,"l",xlab="Index",ylab="WOET") + return(maxline) +} +timetrace[[1]] <- trace2maxline(timetrace[[1]]) +timetrace_rand[[1]] <- trace2maxline(timetrace_rand[[1]]) + +png(file=filename_2) +# pdf(file=filename_1,width=8, height=8) +plot(timetrace[[2]],timetrace[[1]], col="#99bbff", xlab="iters", ylab="wcet", pch='.') +points(timetrace_rand[[2]],timetrace_rand[[1]], col="#ffbb99", pch='.') +abline(lm(timetrace ~ iter, data=timetrace),col="green") +abline(lm(timetrace ~ iter, data=timetrace_rand),col="magenta") +dev.off() \ No newline at end of file diff --git a/fuzzers/FRET/src/fuzzer.rs b/fuzzers/FRET/src/fuzzer.rs index 73a2799339..213204349b 100644 --- a/fuzzers/FRET/src/fuzzer.rs +++ b/fuzzers/FRET/src/fuzzer.rs @@ -289,7 +289,18 @@ pub fn fuzz() { fuzzer.evaluate_input(&mut state, &mut executor, &mut mgr, BytesInput::new(show_input)) .unwrap(); } else { - if let Ok(sf) = env::var("SEED_DIR") { + if let Ok(_) = env::var("SEED_RANDOM") { + unsafe { + let mut generator = RandBytesGenerator::new(MAX_INPUT_SIZE); + state + .generate_initial_inputs_forced(&mut fuzzer, &mut executor, &mut generator, &mut mgr, 100) + .unwrap_or_else(|_| { + println!("Failed to load initial corpus at {:?}", &corpus_dirs); + process::exit(0); + }); + } + } + else if let Ok(sf) = env::var("SEED_DIR") { state .load_initial_inputs(&mut fuzzer, &mut executor, &mut mgr, &[PathBuf::from(&sf)]) .unwrap_or_else(|_| {