parent
5311ce705a
commit
84beb61c3f
@ -1,188 +0,0 @@
|
|||||||
//! A dynamic collection of owned FeedbackStates
|
|
||||||
|
|
||||||
use alloc::{boxed::Box, vec::Vec};
|
|
||||||
use libafl_bolts::anymap::AsAny;
|
|
||||||
|
|
||||||
use crate::{
|
|
||||||
feedbacks::{FeedbackState, FeedbackStateTuple},
|
|
||||||
Error,
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Combine `FeedbackState` and `AsAny`
|
|
||||||
pub trait AnyFeedbackState: FeedbackState + AsAny {}
|
|
||||||
|
|
||||||
/// An owned list of `FeedbackState` trait objects
|
|
||||||
#[derive(Default)]
|
|
||||||
#[allow(missing_debug_implementations)]
|
|
||||||
pub struct FeedbackStatesOwnedList {
|
|
||||||
/// The named trait objects map
|
|
||||||
pub list: Vec<Box<dyn AnyFeedbackState>>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl FeedbackStatesTuple for FeedbackStatesOwnedList {
|
|
||||||
fn perform_all(
|
|
||||||
&mut self,
|
|
||||||
fuzzer: &mut Z,
|
|
||||||
executor: &mut E,
|
|
||||||
state: &mut S,
|
|
||||||
manager: &mut EM,
|
|
||||||
corpus_idx: usize,
|
|
||||||
) -> Result<(), Error> {
|
|
||||||
for s in &mut self.list {
|
|
||||||
s.perform(fuzzer, executor, state, manager, corpus_idx)?;
|
|
||||||
}
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl FeedbackStatesOwnedList {
|
|
||||||
/// Create a new instance
|
|
||||||
#[must_use]
|
|
||||||
pub fn new(list: Vec<Box<dyn AnyFeedbackState>>) -> Self {
|
|
||||||
Self { list }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "python")]
|
|
||||||
/// `FeedbackStatesOwnedList` Python bindings
|
|
||||||
pub mod pybind {
|
|
||||||
use crate::stages::owned::FeedbackStatesOwnedList;
|
|
||||||
use pyo3::prelude::*;
|
|
||||||
|
|
||||||
macro_rules! define_python_stage_owned_list {
|
|
||||||
($struct_name:ident, $py_name:tt, $my_std_state_type_name: ident, $my_std_fuzzer_type_name: ident, $event_manager_name: ident,
|
|
||||||
$executor_name: ident, $stage_name: ident) => {
|
|
||||||
use crate::events::pybind::$event_manager_name;
|
|
||||||
use crate::executors::pybind::$executor_name;
|
|
||||||
use crate::fuzzer::pybind::$my_std_fuzzer_type_name;
|
|
||||||
use crate::stages::pybind::$stage_name;
|
|
||||||
use crate::state::pybind::$my_std_state_type_name;
|
|
||||||
#[pyclass(unsendable, name = $py_name)]
|
|
||||||
|
|
||||||
/// Python class for FeedbackStatesOwnedList
|
|
||||||
#[allow(missing_debug_implementations)]
|
|
||||||
pub struct $struct_name {
|
|
||||||
/// Rust wrapped FeedbackStatesOwnedList object
|
|
||||||
pub stages_owned_list: FeedbackStatesOwnedList<
|
|
||||||
$executor_name,
|
|
||||||
$event_manager_name,
|
|
||||||
$my_std_state_type_name,
|
|
||||||
$my_std_fuzzer_type_name,
|
|
||||||
>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[pymethods]
|
|
||||||
impl $struct_name {
|
|
||||||
//TODO: Add new from list
|
|
||||||
#[new]
|
|
||||||
fn new(stage: &$stage_name) -> Self {
|
|
||||||
// TODO: Be safe
|
|
||||||
unsafe {
|
|
||||||
Self {
|
|
||||||
stages_owned_list: FeedbackStatesOwnedList {
|
|
||||||
list: vec![Box::new(std::mem::transmute_copy::<
|
|
||||||
$stage_name,
|
|
||||||
$stage_name,
|
|
||||||
>(stage))],
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
define_python_stage_owned_list!(
|
|
||||||
PythonFeedbackStatesOwnedListI8,
|
|
||||||
"FeedbackStatesOwnedListI8",
|
|
||||||
MyStdStateI8,
|
|
||||||
MyStdFuzzerI8,
|
|
||||||
PythonEventManagerI8,
|
|
||||||
PythonExecutorI8,
|
|
||||||
PythonFeedbackStateI8
|
|
||||||
);
|
|
||||||
|
|
||||||
define_python_stage_owned_list!(
|
|
||||||
PythonFeedbackStatesOwnedListI16,
|
|
||||||
"FeedbackStatesOwnedListI16",
|
|
||||||
MyStdStateI16,
|
|
||||||
MyStdFuzzerI16,
|
|
||||||
PythonEventManagerI16,
|
|
||||||
PythonExecutorI16,
|
|
||||||
PythonFeedbackStateI16
|
|
||||||
);
|
|
||||||
|
|
||||||
define_python_stage_owned_list!(
|
|
||||||
PythonFeedbackStatesOwnedListI32,
|
|
||||||
"FeedbackStatesOwnedListI32",
|
|
||||||
MyStdStateI32,
|
|
||||||
MyStdFuzzerI32,
|
|
||||||
PythonEventManagerI32,
|
|
||||||
PythonExecutorI32,
|
|
||||||
PythonFeedbackStateI32
|
|
||||||
);
|
|
||||||
|
|
||||||
define_python_stage_owned_list!(
|
|
||||||
PythonFeedbackStatesOwnedListI64,
|
|
||||||
"FeedbackStatesOwnedListI64",
|
|
||||||
MyStdStateI64,
|
|
||||||
MyStdFuzzerI64,
|
|
||||||
PythonEventManagerI64,
|
|
||||||
PythonExecutorI64,
|
|
||||||
PythonFeedbackStateI64
|
|
||||||
);
|
|
||||||
|
|
||||||
define_python_stage_owned_list!(
|
|
||||||
PythonFeedbackStatesOwnedListU8,
|
|
||||||
"FeedbackStatesOwnedListU8",
|
|
||||||
MyStdStateU8,
|
|
||||||
MyStdFuzzerU8,
|
|
||||||
PythonEventManagerU8,
|
|
||||||
PythonExecutorU8,
|
|
||||||
PythonFeedbackStateU8
|
|
||||||
);
|
|
||||||
|
|
||||||
define_python_stage_owned_list!(
|
|
||||||
PythonFeedbackStatesOwnedListU16,
|
|
||||||
"FeedbackStatesOwnedListU16",
|
|
||||||
MyStdStateU16,
|
|
||||||
MyStdFuzzerU16,
|
|
||||||
PythonEventManagerU16,
|
|
||||||
PythonExecutorU16,
|
|
||||||
PythonFeedbackStateU16
|
|
||||||
);
|
|
||||||
|
|
||||||
define_python_stage_owned_list!(
|
|
||||||
PythonFeedbackStatesOwnedListU32,
|
|
||||||
"FeedbackStatesOwnedListU32",
|
|
||||||
MyStdStateU32,
|
|
||||||
MyStdFuzzerU32,
|
|
||||||
PythonEventManagerU32,
|
|
||||||
PythonExecutorU32,
|
|
||||||
PythonFeedbackStateU32
|
|
||||||
);
|
|
||||||
|
|
||||||
define_python_stage_owned_list!(
|
|
||||||
PythonFeedbackStatesOwnedListU64,
|
|
||||||
"FeedbackStatesOwnedListU64",
|
|
||||||
MyStdStateU64,
|
|
||||||
MyStdFuzzerU64,
|
|
||||||
PythonEventManagerU64,
|
|
||||||
PythonExecutorU64,
|
|
||||||
PythonFeedbackStateU64
|
|
||||||
);
|
|
||||||
|
|
||||||
/// Register the classes to the python module
|
|
||||||
pub fn register(_py: Python, m: &PyModule) -> PyResult<()> {
|
|
||||||
m.add_class::<PythonFeedbackStatesOwnedListI8>()?;
|
|
||||||
m.add_class::<PythonFeedbackStatesOwnedListI16>()?;
|
|
||||||
m.add_class::<PythonFeedbackStatesOwnedListI32>()?;
|
|
||||||
m.add_class::<PythonFeedbackStatesOwnedListI64>()?;
|
|
||||||
|
|
||||||
m.add_class::<PythonFeedbackStatesOwnedListU8>()?;
|
|
||||||
m.add_class::<PythonFeedbackStatesOwnedListU16>()?;
|
|
||||||
m.add_class::<PythonFeedbackStatesOwnedListU32>()?;
|
|
||||||
m.add_class::<PythonFeedbackStatesOwnedListU64>()?;
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user