parent
c1aafe3e98
commit
5d9a19f955
@ -21,7 +21,7 @@ pub fn main() {
|
|||||||
|
|
||||||
let mut cc = ClangWrapper::new();
|
let mut cc = ClangWrapper::new();
|
||||||
|
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(any(target_os = "linux", target_vendor = "apple"))]
|
||||||
cc.add_pass(LLVMPasses::AutoTokens);
|
cc.add_pass(LLVMPasses::AutoTokens);
|
||||||
|
|
||||||
if let Some(code) = cc
|
if let Some(code) = cc
|
||||||
|
@ -47,7 +47,7 @@ use libafl::{
|
|||||||
state::{HasCorpus, HasMetadata, StdState},
|
state::{HasCorpus, HasMetadata, StdState},
|
||||||
Error,
|
Error,
|
||||||
};
|
};
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(any(target_os = "linux", target_vendor = "apple"))]
|
||||||
use libafl_targets::autotokens;
|
use libafl_targets::autotokens;
|
||||||
use libafl_targets::{
|
use libafl_targets::{
|
||||||
libfuzzer_initialize, libfuzzer_test_one_input, CmpLogObserver, CMPLOG_MAP, EDGES_MAP,
|
libfuzzer_initialize, libfuzzer_test_one_input, CmpLogObserver, CMPLOG_MAP, EDGES_MAP,
|
||||||
@ -367,7 +367,7 @@ fn fuzz(
|
|||||||
if let Some(tokenfile) = tokenfile {
|
if let Some(tokenfile) = tokenfile {
|
||||||
toks.add_from_file(tokenfile)?;
|
toks.add_from_file(tokenfile)?;
|
||||||
}
|
}
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(any(target_os = "linux", target_vendor = "apple"))]
|
||||||
{
|
{
|
||||||
toks += autotokens()?;
|
toks += autotokens()?;
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ pub fn main() {
|
|||||||
|
|
||||||
let mut cc = ClangWrapper::new();
|
let mut cc = ClangWrapper::new();
|
||||||
|
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(any(target_os = "linux", target_vendor = "apple"))]
|
||||||
cc.add_pass(LLVMPasses::AutoTokens);
|
cc.add_pass(LLVMPasses::AutoTokens);
|
||||||
|
|
||||||
if let Some(code) = cc
|
if let Some(code) = cc
|
||||||
|
@ -53,7 +53,7 @@ use libafl::{
|
|||||||
state::{HasCorpus, HasMetadata, StdState},
|
state::{HasCorpus, HasMetadata, StdState},
|
||||||
Error,
|
Error,
|
||||||
};
|
};
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(any(target_os = "linux", target_vendor = "apple"))]
|
||||||
use libafl_targets::autotokens;
|
use libafl_targets::autotokens;
|
||||||
use libafl_targets::{
|
use libafl_targets::{
|
||||||
libfuzzer_initialize, libfuzzer_test_one_input, CmpLogObserver, CMPLOG_MAP, EDGES_MAP,
|
libfuzzer_initialize, libfuzzer_test_one_input, CmpLogObserver, CMPLOG_MAP, EDGES_MAP,
|
||||||
@ -427,7 +427,7 @@ fn fuzz_binary(
|
|||||||
if let Some(tokenfile) = tokenfile {
|
if let Some(tokenfile) = tokenfile {
|
||||||
toks.add_from_file(tokenfile)?;
|
toks.add_from_file(tokenfile)?;
|
||||||
}
|
}
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(any(target_os = "linux", target_vendor = "apple"))]
|
||||||
{
|
{
|
||||||
toks += autotokens()?;
|
toks += autotokens()?;
|
||||||
}
|
}
|
||||||
@ -654,7 +654,7 @@ fn fuzz_text(
|
|||||||
if let Some(tokenfile) = tokenfile {
|
if let Some(tokenfile) = tokenfile {
|
||||||
toks.add_from_file(tokenfile)?;
|
toks.add_from_file(tokenfile)?;
|
||||||
}
|
}
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(any(target_os = "linux", target_vendor = "apple"))]
|
||||||
{
|
{
|
||||||
toks += autotokens()?;
|
toks += autotokens()?;
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ pub fn main() {
|
|||||||
|
|
||||||
let mut cc = ClangWrapper::new();
|
let mut cc = ClangWrapper::new();
|
||||||
|
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(any(target_os = "linux", target_vendor = "apple"))]
|
||||||
cc.add_pass(LLVMPasses::AutoTokens);
|
cc.add_pass(LLVMPasses::AutoTokens);
|
||||||
|
|
||||||
if let Some(code) = cc
|
if let Some(code) = cc
|
||||||
|
@ -47,7 +47,7 @@ use libafl::{
|
|||||||
state::{HasCorpus, HasMetadata, StdState},
|
state::{HasCorpus, HasMetadata, StdState},
|
||||||
Error,
|
Error,
|
||||||
};
|
};
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(any(target_os = "linux", target_vendor = "apple"))]
|
||||||
use libafl_targets::autotokens;
|
use libafl_targets::autotokens;
|
||||||
use libafl_targets::{
|
use libafl_targets::{
|
||||||
libfuzzer_initialize, libfuzzer_test_one_input, CmpLogObserver, CMPLOG_MAP, EDGES_MAP,
|
libfuzzer_initialize, libfuzzer_test_one_input, CmpLogObserver, CMPLOG_MAP, EDGES_MAP,
|
||||||
@ -368,7 +368,7 @@ fn fuzz(
|
|||||||
if let Some(tokenfile) = tokenfile {
|
if let Some(tokenfile) = tokenfile {
|
||||||
toks.add_from_file(tokenfile)?;
|
toks.add_from_file(tokenfile)?;
|
||||||
}
|
}
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(any(target_os = "linux", target_vendor = "apple"))]
|
||||||
{
|
{
|
||||||
toks += autotokens()?;
|
toks += autotokens()?;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
//! Tokens are what AFL calls extras or dictionaries.
|
//! Tokens are what AFL calls extras or dictionaries.
|
||||||
//! They may be inserted as part of mutations during fuzzing.
|
//! They may be inserted as part of mutations during fuzzing.
|
||||||
use alloc::vec::Vec;
|
use alloc::vec::Vec;
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(any(target_os = "linux", target_vendor = "apple"))]
|
||||||
use core::slice::from_raw_parts;
|
use core::slice::from_raw_parts;
|
||||||
use core::{
|
use core::{
|
||||||
mem::size_of,
|
mem::size_of,
|
||||||
@ -105,7 +105,7 @@ impl Tokens {
|
|||||||
/// # Safety
|
/// # Safety
|
||||||
/// The caller must ensure that the region between `token_start` and `token_stop`
|
/// The caller must ensure that the region between `token_start` and `token_stop`
|
||||||
/// is a valid region, containing autotokens in the exepcted format.
|
/// is a valid region, containing autotokens in the exepcted format.
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(any(target_os = "linux", target_vendor = "apple"))]
|
||||||
pub unsafe fn from_ptrs(token_start: *const u8, token_stop: *const u8) -> Result<Self, Error> {
|
pub unsafe fn from_ptrs(token_start: *const u8, token_stop: *const u8) -> Result<Self, Error> {
|
||||||
let mut ret = Self::default();
|
let mut ret = Self::default();
|
||||||
if token_start.is_null() || token_stop.is_null() {
|
if token_start.is_null() || token_stop.is_null() {
|
||||||
|
@ -665,7 +665,11 @@ bool AutoTokensPass::runOnModule(Module &M) {
|
|||||||
ConstantDataArray::get(Ctx,
|
ConstantDataArray::get(Ctx,
|
||||||
*(new ArrayRef<char>(ptrhld.get(), offset))),
|
*(new ArrayRef<char>(ptrhld.get(), offset))),
|
||||||
"libafl_dictionary_" + M.getName());
|
"libafl_dictionary_" + M.getName());
|
||||||
|
#if defined(__linux__)
|
||||||
dict->setSection("libafl_token");
|
dict->setSection("libafl_token");
|
||||||
|
#elif defined(__APPLE__)
|
||||||
|
dict->setSection("__DATA,__libafl_token");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,19 +9,27 @@ typedef uint32_t prev_loc_t;
|
|||||||
#define CTX_MAX_K 32U
|
#define CTX_MAX_K 32U
|
||||||
|
|
||||||
extern uint8_t __afl_area_ptr_local[EDGES_MAP_SIZE];
|
extern uint8_t __afl_area_ptr_local[EDGES_MAP_SIZE];
|
||||||
uint8_t* __afl_area_ptr = __afl_area_ptr_local;
|
uint8_t *__afl_area_ptr = __afl_area_ptr_local;
|
||||||
|
|
||||||
extern uint32_t __afl_acc_memop_ptr_local[ACCOUNTING_MAP_SIZE];
|
extern uint32_t __afl_acc_memop_ptr_local[ACCOUNTING_MAP_SIZE];
|
||||||
uint32_t* __afl_acc_memop_ptr = __afl_acc_memop_ptr_local;
|
uint32_t *__afl_acc_memop_ptr = __afl_acc_memop_ptr_local;
|
||||||
|
|
||||||
// Weak symbols, LLVM Passes overwrites them if we really use it
|
// Weak symbols, LLVM Passes overwrites them if we really use it
|
||||||
#ifdef __linux__
|
#if defined(__linux__)
|
||||||
extern EXT_VAR(__start_libafl_token, uint8_t);
|
extern EXT_VAR(__start_libafl_token, uint8_t);
|
||||||
extern EXT_VAR(__stop_libafl_token, uint8_t);
|
extern EXT_VAR(__stop_libafl_token, uint8_t);
|
||||||
|
|
||||||
|
#elif defined(__APPLE__)
|
||||||
|
extern uint8_t __start_libafl_token __asm(
|
||||||
|
"section$start$__DATA$__libafl_token");
|
||||||
|
extern uint8_t __stop_libafl_token __asm("section$end$__DATA$__libafl_token");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__linux__) || defined(__APPLE__)
|
||||||
// Expose the start of libafl_token section as C symbols
|
// Expose the start of libafl_token section as C symbols
|
||||||
uint8_t* __token_start = &__start_libafl_token;
|
uint8_t *__token_start = &__start_libafl_token;
|
||||||
uint8_t* __token_stop = &__stop_libafl_token;
|
uint8_t *__token_stop = &__stop_libafl_token;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#if defined(__ANDROID__) || defined(__HAIKU__)
|
//#if defined(__ANDROID__) || defined(__HAIKU__)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//! Coverage maps as static mut array
|
//! Coverage maps as static mut array
|
||||||
|
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(any(target_os = "linux", target_vendor = "apple"))]
|
||||||
use libafl::{mutators::Tokens, Error};
|
use libafl::{mutators::Tokens, Error};
|
||||||
|
|
||||||
use crate::{ACCOUNTING_MAP_SIZE, EDGES_MAP_SIZE};
|
use crate::{ACCOUNTING_MAP_SIZE, EDGES_MAP_SIZE};
|
||||||
@ -26,11 +26,11 @@ extern "C" {
|
|||||||
pub static mut __afl_acc_memop_ptr: *mut u32;
|
pub static mut __afl_acc_memop_ptr: *mut u32;
|
||||||
|
|
||||||
/// Start of libafl token section
|
/// Start of libafl token section
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(any(target_os = "linux", target_vendor = "apple"))]
|
||||||
pub static __token_start: *const u8;
|
pub static __token_start: *const u8;
|
||||||
|
|
||||||
/// End of libafl token section
|
/// End of libafl token section
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(any(target_os = "linux", target_vendor = "apple"))]
|
||||||
pub static __token_stop: *const u8;
|
pub static __token_stop: *const u8;
|
||||||
}
|
}
|
||||||
pub use __afl_acc_memop_ptr as ACCOUNTING_MEMOP_MAP_PTR;
|
pub use __afl_acc_memop_ptr as ACCOUNTING_MEMOP_MAP_PTR;
|
||||||
@ -43,7 +43,7 @@ pub use __afl_area_ptr as EDGES_MAP_PTR;
|
|||||||
/// # Safety
|
/// # Safety
|
||||||
///
|
///
|
||||||
/// This fn is safe to call, as long as the compilation did not break, previously
|
/// This fn is safe to call, as long as the compilation did not break, previously
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(any(target_os = "linux", target_vendor = "apple"))]
|
||||||
pub fn autotokens() -> Result<Tokens, Error> {
|
pub fn autotokens() -> Result<Tokens, Error> {
|
||||||
unsafe {
|
unsafe {
|
||||||
if __token_start.is_null() || __token_stop.is_null() {
|
if __token_start.is_null() || __token_stop.is_null() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user