now trying to add functionality

This commit is contained in:
van Hauser 2020-12-18 00:19:11 +01:00
parent 16a79bfbbc
commit 6c3e60df20
2 changed files with 118 additions and 11 deletions

View File

@ -2,6 +2,7 @@
use core::fmt::Debug;
use core::marker::PhantomData;
use std::fs;
use serde::{Deserialize, Serialize};
use crate::corpus::{Corpus, Testcase};
@ -195,6 +196,100 @@ where
}
}
pub fn load_from_directory<G, C, E, ET, EM>(
&mut self,
corpus: &mut C,
generator: &mut G,
engine: &mut Engine<E, OT, ET, I>,
manager: &mut EM,
in_dir: String,
)-> Result<(), AflError>
where
G: Generator<I, R>,
C: Corpus<I, R>,
E: Executor<I> + HasObservers<OT>,
ET: ExecutorsTuple<I>,
EM: EventManager<C, E, OT, FT, I, R>,
{
for entry in fs::read_dir(in_dir)? {
let entry = entry?;
let file = entry.path().display().to_string();
let attributes = fs::metadata(file.clone());
if !attributes.is_ok() {
continue;
}
let attr = attributes?;
if attr.is_file() {
println!("Load file {}", file);
//let input = read_file(file);
//let fitness = self.evaluate_input(&input, engine.executor_mut())?;
//if !self.add_if_interesting(corpus, input, fitness)?.is_none() {
// added += 1;
//}
} else if attr.is_dir() {
let _x = load_from_directory(
&mut corpus,
&mut generator,
&mut engine,
&mut manager,
file,
);
}
}
Ok(())
}
pub fn load_initial_inputs<G, C, E, ET, EM>(
&mut self,
corpus: &mut C,
generator: &mut G,
engine: &mut Engine<E, OT, ET, I>,
manager: &mut EM,
in_dir: Vec<String>,
)-> Result<(), AflError>
where
G: Generator<I, R>,
C: Corpus<I, R>,
E: Executor<I> + HasObservers<OT>,
ET: ExecutorsTuple<I>,
EM: EventManager<C, E, OT, FT, I, R>,
{
let mut added = 0 as u32;
for directory in in_dir {
let _x = load_from_directory(
&mut corpus,
&mut generator,
&mut engine,
&mut manager,
directory,
);
}
manager.log(
0,
format!("Loaded {} initial testcases", 123), // get corpus count
)?;
manager.process(self, corpus)?;
Ok(())
}
pub fn generate_initial_inputs<G, C, E, ET, EM>(
&mut self,
rand: &mut R,

View File

@ -131,6 +131,17 @@ pub extern "C" fn afl_libfuzzer_main() {
let mut engine = Engine::new(executor);
if input != None {
state
.load_initial_inputs(
&mut corpus,
&mut generator,
&mut engine,
&mut mgr,
input.unwrap(),
)
.expect("Failed to load initial corpus");
} else {
state
.generate_initial_inputs(
&mut rand,
@ -141,6 +152,7 @@ pub extern "C" fn afl_libfuzzer_main() {
4,
)
.expect("Failed to load initial inputs");
}
let mut mutator = HavocBytesMutator::new_default();
mutator.set_max_size(4096);