pub struct MOpt {
Show 27 fields pub rand: StdRand, pub total_finds: usize, pub finds_until_last_swarm: usize, pub w_init: f64, pub w_end: f64, pub w_now: f64, pub g_now: f64, pub g_max: f64, pub operator_num: usize, pub swarm_num: usize, pub period_pilot: usize, pub period_core: usize, pub pilot_time: usize, pub core_time: usize, pub swarm_now: usize, pub swarm_fitness: Vec<f64>, pub pilot_operator_finds: Vec<Vec<u64>>, pub pilot_operator_finds_v2: Vec<Vec<u64>>, pub pilot_operator_cycles: Vec<Vec<u64>>, pub pilot_operator_cycles_v2: Vec<Vec<u64>>, pub pilot_operator_cycles_v3: Vec<Vec<u64>>, pub operator_finds_puppet: Vec<u64>, pub core_operator_finds: Vec<u64>, pub core_operator_finds_v2: Vec<u64>, pub core_operator_cycles: Vec<u64>, pub core_operator_cycles_v2: Vec<u64>, pub core_operator_cycles_v3: Vec<u64>, /* private fields */
}
Expand description

A Struct for managing MOpt-mutator parameters. There are 2 modes for MOpt scheduler, the core fuzzing mode and the pilot fuzzing mode. In short, in the pilot fuzzing mode, the fuzzer employs several swarms to compute the probability to choose the mutation operator. On the other hand, in the core fuzzing mode, the fuzzer chooses the best swarms, which was determined during the pilot fuzzing mode, to compute the probability to choose the operation operator. With the current implementation we are always in the pacemaker fuzzing mode.

Fields

rand: StdRand

Random number generator

total_finds: usize

The number of total findings (unique crashes and unique interesting paths). This is equivalent to state.corpus().count() + state.solutions().count();

finds_until_last_swarm: usize

The number of finds before until last swarm.

w_init: f64

These w_* and g_* values are the coefficients for updating variables according to the PSO algorithms

w_end: f64

These w_* and g_* values are the coefficients for updating variables according to the PSO algorithms

w_now: f64

These w_* and g_* values are the coefficients for updating variables according to the PSO algorithms

g_now: f64

These w_* and g_* values are the coefficients for updating variables according to the PSO algorithms

g_max: f64

These w_* and g_* values are the coefficients for updating variables according to the PSO algorithms

operator_num: usize

The number of mutation operators

swarm_num: usize

The number of swarms that we want to employ during the pilot fuzzing mode

period_pilot: usize

We’ll generate inputs for period_pilot times before we call pso_update in pilot fuzzing module

period_core: usize

We’ll generate inputs for period_core times before we call pso_update in core fuzzing module

pilot_time: usize

The number of testcases generated during this pilot fuzzing mode

core_time: usize

The number of testcases generated during this core fuzzing mode

swarm_now: usize

The swarm identifier that we are currently using in the pilot fuzzing mode

swarm_fitness: Vec<f64>

The fitness for each swarm, we’ll calculate the fitness in the pilot fuzzing mode and use the best one in the core fuzzing mode

pilot_operator_finds: Vec<Vec<u64>>

(Pilot Mode) Finds by each operators. This vector is used in pso_update

pilot_operator_finds_v2: Vec<Vec<u64>>

(Pilot Mode) Finds by each operator till now.

pilot_operator_cycles: Vec<Vec<u64>>

(Pilot Mode) The number of mutation operator used. This vector is used in pso_update

pilot_operator_cycles_v2: Vec<Vec<u64>>

(Pilot Mode) The number of mutation operator used till now

pilot_operator_cycles_v3: Vec<Vec<u64>>

(Pilot Mode) The number of mutation operator used till last execution

operator_finds_puppet: Vec<u64>

Vector used in pso_update

core_operator_finds: Vec<u64>

(Core Mode) Finds by each operators. This vector is used in pso_update

core_operator_finds_v2: Vec<u64>

(Core Mode) Finds by each operator till now.

core_operator_cycles: Vec<u64>

(Core Mode) The number of mutation operator used. This vector is used in pso_update

core_operator_cycles_v2: Vec<u64>

(Core Mode) The number of mutation operator used till now

core_operator_cycles_v3: Vec<u64>

(Core Mode) The number of mutation operator used till last execution

Implementations

Creates a new MOpt instance.

initialize pso

This function is used to decide the operator that we want to apply next see https://github.com/puppet-meteor/MOpt-AFL/blob/master/MOpt/afl-fuzz.c#L397

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Deserialize this value from the given Serde deserializer. Read more

returns this as Any trait

returns this as mutable Any trait

returns this as boxed Any trait

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The Resulting TupleList, of an Prepend::prepend() call, including the prepended entry. Read more

Prepend a value to this tuple, returning a new tuple with prepended value.

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.