From ce9413bfa47a17d8aba96b89307abc1d5449b35b Mon Sep 17 00:00:00 2001 From: Andrea Fioraldi Date: Tue, 27 Oct 2020 20:45:49 +0100 Subject: [PATCH] in memory executor first impl --- src/executors/mod.rs | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/executors/mod.rs b/src/executors/mod.rs index d977984bae..a02d34c328 100644 --- a/src/executors/mod.rs +++ b/src/executors/mod.rs @@ -13,7 +13,7 @@ pub trait Executor { fn run_target(&mut self) -> Result; - fn place_input(&mut self, entry: Box) -> Result<(), AflError>; + fn place_input(&mut self, input: Box) -> Result<(), AflError>; } @@ -23,4 +23,30 @@ pub struct ExecutorBase { observers: Vec>, cur_input: Box +} + +type HarnessFunction = fn(&dyn Executor, &[u8]) -> ExitKind; + +pub struct InMemoryExecutor { + + base: ExecutorBase, + harness: HarnessFunction, + +} + +impl Executor for InMemoryExecutor { + + fn run_target(&mut self) -> Result { + let bytes = self.base.cur_input.serialize(); + return match bytes { + Ok(b) => Ok((self.harness)(self, b)), + Err(e) => Err(e) + } + } + + fn place_input(&mut self, input: Box) -> Result<(), AflError> { + self.base.cur_input = input; + Ok(()) + } + } \ No newline at end of file