Struct libafl::executors::forkserver::ForkserverExecutorBuilder
source · pub struct ForkserverExecutorBuilder<'a, SP> { /* private fields */ }
Expand description
The builder for ForkserverExecutor
Implementations§
source§impl<'a, SP> ForkserverExecutorBuilder<'a, SP>
impl<'a, SP> ForkserverExecutorBuilder<'a, SP>
sourcepub fn build<OT, S>(
&mut self,
observers: OT
) -> Result<ForkserverExecutor<OT, S, SP>, Error>
pub fn build<OT, S>( &mut self, observers: OT ) -> Result<ForkserverExecutor<OT, S, SP>, Error>
Builds ForkserverExecutor
.
This Forkserver will attempt to provide inputs over shared mem when shmem_provider
is given.
Else this forkserver will pass the input to the target via stdin
in case no input file is specified.
If debug_child
is set, the child will print to stdout
/stderr
.
sourcepub fn build_dynamic_map<A, MO, OT, S>(
&mut self,
map_observer: A,
other_observers: OT
) -> Result<ForkserverExecutor<(A, OT), S, SP>, Error>where
MO: MapObserver + Truncate,
A: Observer<S> + AsRef<MO> + AsMut<MO>,
OT: ObserversTuple<S> + Prepend<MO, PreprendResult = OT>,
S: UsesInput,
S::Input: Input + HasTargetBytes,
SP: ShMemProvider,
pub fn build_dynamic_map<A, MO, OT, S>(
&mut self,
map_observer: A,
other_observers: OT
) -> Result<ForkserverExecutor<(A, OT), S, SP>, Error>where
MO: MapObserver + Truncate,
A: Observer<S> + AsRef<MO> + AsMut<MO>,
OT: ObserversTuple<S> + Prepend<MO, PreprendResult = OT>,
S: UsesInput,
S::Input: Input + HasTargetBytes,
SP: ShMemProvider,
Builds ForkserverExecutor
downsizing the coverage map to fit exaclty the AFL++ map size.
sourcepub fn autotokens(self, tokens: &'a mut Tokens) -> Self
pub fn autotokens(self, tokens: &'a mut Tokens) -> Self
Use autodict?
sourcepub fn parse_afl_cmdline<IT, O>(self, args: IT) -> Self
pub fn parse_afl_cmdline<IT, O>(self, args: IT) -> Self
Parse afl style command line
Replaces @@
with the path to the input file generated by the fuzzer. If @@
is omitted,
stdin
is used to pass the test case instead.
Interprets the first argument as the path to the program as long as it is not set yet. You have to omit the program path in case you have set it already. Otherwise it will be interpreted as a regular argument, leading to probably unintended results.
sourcepub fn arg<O>(self, arg: O) -> Self
pub fn arg<O>(self, arg: O) -> Self
Adds an argument to the harness’s commandline
You may want to use parse_afl_cmdline
if you’re going to pass @@
represents the input file generated by the fuzzer (similar to the afl-fuzz
command line).
sourcepub fn args<IT, O>(self, args: IT) -> Self
pub fn args<IT, O>(self, args: IT) -> Self
Adds arguments to the harness’s commandline
You may want to use parse_afl_cmdline
if you’re going to pass @@
represents the input file generated by the fuzzer (similar to the afl-fuzz
command line).
sourcepub fn env<K, V>(self, key: K, val: V) -> Self
pub fn env<K, V>(self, key: K, val: V) -> Self
Adds an environmental var to the harness’s commandline
sourcepub fn envs<IT, K, V>(self, vars: IT) -> Self
pub fn envs<IT, K, V>(self, vars: IT) -> Self
Adds environmental vars to the harness’s commandline
sourcepub fn arg_input_file<P: AsRef<Path>>(self, path: P) -> Self
pub fn arg_input_file<P: AsRef<Path>>(self, path: P) -> Self
Place the input at this position and set the filename for the input.
Note: If you use this, you should ensure that there is only one instance using this file at any given time.
sourcepub fn arg_input_file_std(self) -> Self
pub fn arg_input_file_std(self) -> Self
Place the input at this position and set the default filename for the input. The filename includes the PID of the fuzzer to ensure that no two fuzzers write to the same file
sourcepub fn debug_child(self, debug_child: bool) -> Self
pub fn debug_child(self, debug_child: bool) -> Self
If debug_child
is set, the child will print to stdout
/stderr
.
sourcepub fn is_persistent(self, is_persistent: bool) -> Self
pub fn is_persistent(self, is_persistent: bool) -> Self
Call this if you want to run it under persistent mode; default is false
sourcepub fn is_deferred_frksrv(self, is_deferred_frksrv: bool) -> Self
pub fn is_deferred_frksrv(self, is_deferred_frksrv: bool) -> Self
Call this if the harness uses deferred forkserver mode; default is false
sourcepub fn coverage_map_size(self, size: usize) -> Self
pub fn coverage_map_size(self, size: usize) -> Self
Call this to set a defauult const coverage map size
sourcepub fn kill_signal(self, kill_signal: Signal) -> Self
pub fn kill_signal(self, kill_signal: Signal) -> Self
Call this to set a signal to be used to kill child processes after executions
source§impl<'a> ForkserverExecutorBuilder<'a, UnixShMemProvider>
impl<'a> ForkserverExecutorBuilder<'a, UnixShMemProvider>
sourcepub fn new() -> ForkserverExecutorBuilder<'a, UnixShMemProvider>
pub fn new() -> ForkserverExecutorBuilder<'a, UnixShMemProvider>
Creates a new AFL
-style ForkserverExecutor
with the given target, arguments and observers.
This is the builder for ForkserverExecutor
This Forkserver will attempt to provide inputs over shared mem when shmem_provider
is given.
Else this forkserver will pass the input to the target via stdin
in case no input file is specified.
If debug_child
is set, the child will print to stdout
/stderr
.
sourcepub fn shmem_provider<SP: ShMemProvider>(
self,
shmem_provider: &'a mut SP
) -> ForkserverExecutorBuilder<'a, SP>
pub fn shmem_provider<SP: ShMemProvider>( self, shmem_provider: &'a mut SP ) -> ForkserverExecutorBuilder<'a, SP>
Shmem provider for forkserver’s shared memory testcase feature.
Trait Implementations§
source§impl<'a, SP: Debug> Debug for ForkserverExecutorBuilder<'a, SP>
impl<'a, SP: Debug> Debug for ForkserverExecutorBuilder<'a, SP>
source§impl<'a> Default for ForkserverExecutorBuilder<'a, UnixShMemProvider>
impl<'a> Default for ForkserverExecutorBuilder<'a, UnixShMemProvider>
Auto Trait Implementations§
impl<'a, SP> Freeze for ForkserverExecutorBuilder<'a, SP>
impl<'a, SP> RefUnwindSafe for ForkserverExecutorBuilder<'a, SP>where
SP: RefUnwindSafe,
impl<'a, SP> Send for ForkserverExecutorBuilder<'a, SP>where
SP: Send,
impl<'a, SP> Sync for ForkserverExecutorBuilder<'a, SP>where
SP: Sync,
impl<'a, SP> Unpin for ForkserverExecutorBuilder<'a, SP>
impl<'a, SP> !UnwindSafe for ForkserverExecutorBuilder<'a, SP>
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
source§impl<T> FmtForward for T
impl<T> FmtForward for T
source§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.source§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.source§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.source§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.source§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.source§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.source§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.source§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.source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§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 moresource§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 moresource§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
source§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
source§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.source§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.source§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)
source§impl<T> Tap for T
impl<T> Tap for T
source§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 moresource§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 moresource§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 moresource§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 moresource§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 moresource§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 moresource§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.source§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.source§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.source§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.source§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.source§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.source§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.