mirror of
https://github.com/AFLplusplus/AFLplusplus.git
synced 2025-06-08 16:21:32 +00:00
Update LibAFL custom mutator to latest
This commit is contained in:
parent
885a6fc106
commit
aa39921e49
@ -6,7 +6,7 @@ edition = "2021"
|
|||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
libafl = { git = "https://github.com/AFLplusplus/LibAFL.git", rev = "62614ce1016c86e3f00f35b56399292ceabd486b" }
|
libafl = { git = "https://github.com/AFLplusplus/LibAFL.git", rev = "266677bb88abe75165430f34e7de897c35560504" }
|
||||||
custom_mutator = { path = "../rust/custom_mutator", features = ["afl_internals"] }
|
custom_mutator = { path = "../rust/custom_mutator", features = ["afl_internals"] }
|
||||||
serde = { version = "1.0", default-features = false, features = ["alloc"] } # serialization lib
|
serde = { version = "1.0", default-features = false, features = ["alloc"] } # serialization lib
|
||||||
|
|
||||||
|
@ -18,10 +18,12 @@ use libafl::{
|
|||||||
scheduled::{havoc_mutations, tokens_mutations, StdScheduledMutator, Tokens},
|
scheduled::{havoc_mutations, tokens_mutations, StdScheduledMutator, Tokens},
|
||||||
Mutator,
|
Mutator,
|
||||||
},
|
},
|
||||||
state::{HasCorpus, HasMaxSize, HasMetadata, HasRand, State},
|
prelude::UsesInput,
|
||||||
|
state::{HasCorpus, HasMaxSize, HasMetadata, HasRand, State, UsesState},
|
||||||
Error,
|
Error,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#[allow(clippy::identity_op)]
|
||||||
const MAX_FILE: usize = 1 * 1024 * 1024;
|
const MAX_FILE: usize = 1 * 1024 * 1024;
|
||||||
|
|
||||||
static mut AFL: Option<&'static afl_state> = None;
|
static mut AFL: Option<&'static afl_state> = None;
|
||||||
@ -64,7 +66,11 @@ impl<'de> Deserialize<'de> for AFLCorpus {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Corpus<BytesInput> for AFLCorpus {
|
impl UsesState for AFLCorpus {
|
||||||
|
type State = AFLState;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Corpus for AFLCorpus {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn count(&self) -> usize {
|
fn count(&self) -> usize {
|
||||||
afl().queued_items as usize
|
afl().queued_items as usize
|
||||||
@ -76,7 +82,11 @@ impl Corpus<BytesInput> for AFLCorpus {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn replace(&mut self, idx: usize, testcase: Testcase<BytesInput>) -> Result<(), Error> {
|
fn replace(
|
||||||
|
&mut self,
|
||||||
|
idx: usize,
|
||||||
|
testcase: Testcase<BytesInput>,
|
||||||
|
) -> Result<Testcase<Self::Input>, Error> {
|
||||||
unimplemented!();
|
unimplemented!();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,7 +102,7 @@ impl Corpus<BytesInput> for AFLCorpus {
|
|||||||
entries.entry(idx).or_insert_with(|| {
|
entries.entry(idx).or_insert_with(|| {
|
||||||
let queue_buf = std::slice::from_raw_parts_mut(afl().queue_buf, self.count());
|
let queue_buf = std::slice::from_raw_parts_mut(afl().queue_buf, self.count());
|
||||||
let entry = queue_buf[idx].as_mut().unwrap();
|
let entry = queue_buf[idx].as_mut().unwrap();
|
||||||
let fname = CStr::from_ptr((entry.fname as *mut i8).as_ref().unwrap())
|
let fname = CStr::from_ptr((entry.fname.cast::<i8>()).as_ref().unwrap())
|
||||||
.to_str()
|
.to_str()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.to_owned();
|
.to_owned();
|
||||||
@ -127,9 +137,10 @@ pub struct AFLState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl AFLState {
|
impl AFLState {
|
||||||
|
#[must_use]
|
||||||
pub fn new(seed: u32) -> Self {
|
pub fn new(seed: u32) -> Self {
|
||||||
Self {
|
Self {
|
||||||
rand: StdRand::with_seed(seed as u64),
|
rand: StdRand::with_seed(u64::from(seed)),
|
||||||
corpus: AFLCorpus::default(),
|
corpus: AFLCorpus::default(),
|
||||||
metadata: SerdeAnyMap::new(),
|
metadata: SerdeAnyMap::new(),
|
||||||
max_size: MAX_FILE,
|
max_size: MAX_FILE,
|
||||||
@ -153,7 +164,11 @@ impl HasRand for AFLState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl HasCorpus<BytesInput> for AFLState {
|
impl UsesInput for AFLState {
|
||||||
|
type Input = BytesInput;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl HasCorpus for AFLState {
|
||||||
type Corpus = AFLCorpus;
|
type Corpus = AFLCorpus;
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
@ -208,7 +223,7 @@ impl CustomMutator for LibAFLBaseCustomMutator {
|
|||||||
tokens.push(data.to_vec());
|
tokens.push(data.to_vec());
|
||||||
}
|
}
|
||||||
if !tokens.is_empty() {
|
if !tokens.is_empty() {
|
||||||
state.add_metadata(Tokens::new(tokens));
|
state.add_metadata(Tokens::from(tokens));
|
||||||
}
|
}
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
state,
|
state,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user