Trait libafl::observers::map::MapObserver
source · pub trait MapObserver: HasLen + Named + Serialize + DeserializeOwned + AsRef<Self> + AsMut<Self> {
type Entry: Bounded + PartialEq + Default + Copy + Debug + 'static;
// Required methods
fn get(&self, idx: usize) -> &Self::Entry;
fn get_mut(&mut self, idx: usize) -> &mut Self::Entry;
fn usable_count(&self) -> usize;
fn count_bytes(&self) -> u64;
fn hash(&self) -> u64;
fn initial(&self) -> Self::Entry;
fn reset_map(&mut self) -> Result<(), Error>;
fn to_vec(&self) -> Vec<Self::Entry>;
fn how_many_set(&self, indexes: &[usize]) -> usize;
}
Expand description
A MapObserver
observes the static map, as oftentimes used for AFL-like coverage information
When referring to this type in a constraint (e.g. O: MapObserver
), ensure that you only refer
to instances of a second type, e.g. C: AsRef<O>
or A: AsMut<O>
. Map observer instances are
passed around in a way that may be potentially wrapped by e.g. ExplicitTracking
as a way to
encode metadata into the type. This is an unfortunate additional requirement that we can’t get
around without specialization.
See crate::require_index_tracking
for an example of how to do so.
TODO: enforce iter() -> AssociatedTypeIter
when generic associated types stabilize
Required Associated Types§
Required Methods§
sourcefn usable_count(&self) -> usize
fn usable_count(&self) -> usize
Get the number of usable entries in the map (all by default)
sourcefn count_bytes(&self) -> u64
fn count_bytes(&self) -> u64
Count the set bytes in the map
sourcefn how_many_set(&self, indexes: &[usize]) -> usize
fn how_many_set(&self, indexes: &[usize]) -> usize
Get the number of set entries with the specified indexes