diff --git a/src/executors/mod.rs b/src/executors/mod.rs index fdc8e75dc3..d977984bae 100644 --- a/src/executors/mod.rs +++ b/src/executors/mod.rs @@ -1 +1,26 @@ -pub trait Executor {} +use crate::AflError; +use crate::inputs::Input; +use crate::observers::Observer; + +pub enum ExitKind { + Ok, + Crash, + OOM, + Timeout +} + +pub trait Executor { + + fn run_target(&mut self) -> Result; + + fn place_input(&mut self, entry: Box) -> Result<(), AflError>; + +} + +// TODO abstract classes? how? +pub struct ExecutorBase { + + observers: Vec>, + cur_input: Box + +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 9c6b412040..a8038b6d77 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,6 +10,7 @@ pub mod monitors; pub mod mutators; pub mod stages; pub mod utils; +pub mod observers; #[derive(Error, Debug)] pub enum AflError { diff --git a/src/observers/mod.rs b/src/observers/mod.rs new file mode 100644 index 0000000000..22d8a103d7 --- /dev/null +++ b/src/observers/mod.rs @@ -0,0 +1,15 @@ +use crate::AflError; + +pub trait Observer { + + fn flush(&mut self) -> Result<(), AflError> { + Ok(()) + } + + fn reset(&mut self) -> Result<(), AflError>; + + fn post_exec(&mut self) -> Result<(), AflError> { + Ok(()) + } + +}