Struct libafl::mutators::tuneable::TuneableScheduledMutator
source · pub struct TuneableScheduledMutator<I, MT, S>where
MT: MutatorsTuple<I, S>,
S: HasRand,{ /* private fields */ }
Expand description
A Mutator
that schedules one of the embedded mutations on each call.
The index of the next mutation can be set.
Implementations§
source§impl<I, MT, S> TuneableScheduledMutator<I, MT, S>
impl<I, MT, S> TuneableScheduledMutator<I, MT, S>
sourcepub fn new(state: &mut S, mutations: MT) -> Self
pub fn new(state: &mut S, mutations: MT) -> Self
Create a new TuneableScheduledMutator
instance specifying mutations
source§impl<S> TuneableScheduledMutator<(), (), S>where
S: HasRand + HasMetadata,
impl<S> TuneableScheduledMutator<(), (), S>where
S: HasRand + HasMetadata,
sourcepub fn set_iters(state: &mut S, iters: u64)
pub fn set_iters(state: &mut S, iters: u64)
Sets the next iterations count, i.e., how many times to mutate the input
Using set_mutation_ids_and_iter
to set multiple values at the same time
will be faster than setting them individually
as it internally only needs a single metadata lookup
sourcepub fn set_iter_probabilities_pow(
state: &mut S,
iter_probabilities_pow: Vec<f32>
) -> Result<(), Error>
pub fn set_iter_probabilities_pow( state: &mut S, iter_probabilities_pow: Vec<f32> ) -> Result<(), Error>
Sets the probability of next iteration counts, i.e., how many times the mutation is likely to get mutated.
So, setting the iter_probabilities
to vec![0.1, 0.7, 0.2]
would apply 2^1 mutation with the likelihood of 10%, 2^2 mutations with the
a probability of 70% (0.7), and 2^3 mutations with the likelihood of 20%.
These will be applied for each call of this mutate
function.
Setting this function will unset everything previously set in set_iters
.
sourcepub fn set_mutation_ids(state: &mut S, mutations: Vec<MutationId>)
pub fn set_mutation_ids(state: &mut S, mutations: Vec<MutationId>)
Sets the mutation ids
sourcepub fn set_mutation_probabilities(
state: &mut S,
mutation_probabilities: Vec<f32>
) -> Result<(), Error>
pub fn set_mutation_probabilities( state: &mut S, mutation_probabilities: Vec<f32> ) -> Result<(), Error>
Sets the mutation probabilities.
The Vec
contains a probability per MutationId
: between 0 and 1, and they have to add
up to 1.
Setting the probabilities will remove the value set through set_mutation_ids
.
sourcepub fn set_mutation_ids_and_iters(
state: &mut S,
mutations: Vec<MutationId>,
iters: u64
)
pub fn set_mutation_ids_and_iters( state: &mut S, mutations: Vec<MutationId>, iters: u64 )
mutation ids and iterations
sourcepub fn push_mutation_id(state: &mut S, mutation_id: MutationId)
pub fn push_mutation_id(state: &mut S, mutation_id: MutationId)
Appends a mutation id to the end of the mutations
Trait Implementations§
source§impl<I, MT, S> ComposedByMutations<I, MT, S> for TuneableScheduledMutator<I, MT, S>where
MT: MutatorsTuple<I, S>,
S: HasRand,
impl<I, MT, S> ComposedByMutations<I, MT, S> for TuneableScheduledMutator<I, MT, S>where
MT: MutatorsTuple<I, S>,
S: HasRand,
source§impl<I, MT, S> Debug for TuneableScheduledMutator<I, MT, S>where
MT: MutatorsTuple<I, S>,
S: HasRand,
impl<I, MT, S> Debug for TuneableScheduledMutator<I, MT, S>where
MT: MutatorsTuple<I, S>,
S: HasRand,
source§impl<I, MT, S> Mutator<I, S> for TuneableScheduledMutator<I, MT, S>
impl<I, MT, S> Mutator<I, S> for TuneableScheduledMutator<I, MT, S>
source§impl<I, MT, S> Named for TuneableScheduledMutator<I, MT, S>where
MT: MutatorsTuple<I, S>,
S: HasRand,
impl<I, MT, S> Named for TuneableScheduledMutator<I, MT, S>where
MT: MutatorsTuple<I, S>,
S: HasRand,
source§impl<I, MT, S> ScheduledMutator<I, MT, S> for TuneableScheduledMutator<I, MT, S>
impl<I, MT, S> ScheduledMutator<I, MT, S> for TuneableScheduledMutator<I, MT, S>
source§fn iterations(&self, state: &mut S, _: &I) -> u64
fn iterations(&self, state: &mut S, _: &I) -> u64
Compute the number of iterations used to apply stacked mutations
source§fn scheduled_mutate(
&mut self,
state: &mut S,
input: &mut I,
stage_idx: i32
) -> Result<MutationResult, Error>
fn scheduled_mutate( &mut self, state: &mut S, input: &mut I, stage_idx: i32 ) -> Result<MutationResult, Error>
mutate()
to this methodAuto Trait Implementations§
impl<I, MT, S> RefUnwindSafe for TuneableScheduledMutator<I, MT, S>
impl<I, MT, S> Send for TuneableScheduledMutator<I, MT, S>
impl<I, MT, S> Sync for TuneableScheduledMutator<I, MT, S>
impl<I, MT, S> Unpin for TuneableScheduledMutator<I, MT, S>
impl<I, MT, S> UnwindSafe for TuneableScheduledMutator<I, MT, S>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.source§impl<Tail, T> Prepend<T> for Tail
impl<Tail, T> Prepend<T> for Tail
§type PreprendResult = Tail
type PreprendResult = Tail
TupleList
, of an Prepend::prepend()
call,
including the prepended entry.source§fn prepend(self, value: T) -> (T, <Tail as Prepend<T>>::PreprendResult)
fn prepend(self, value: T) -> (T, <Tail as Prepend<T>>::PreprendResult)
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.