random seeds, better plots

This commit is contained in:
Alwin Berger 2023-01-17 10:01:15 +01:00
parent 4c90144db5
commit 8d31196614
4 changed files with 79 additions and 19 deletions

View File

@ -2,3 +2,6 @@ timedump
corpora
build
mnt
.R*
*.png
*.pdf

View File

@ -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

View File

@ -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")
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()

View File

@ -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(|_| {