parent
034a4870e2
commit
e77e147a74
@ -91,7 +91,7 @@ unsafe fn fuzz(options: FuzzerOptions) -> Result<(), Error> {
|
|||||||
(|state: Option<StdState<_, _, _, _, _>>,
|
(|state: Option<StdState<_, _, _, _, _>>,
|
||||||
mut mgr: LlmpRestartingEventManager<_, _, _, _>,
|
mut mgr: LlmpRestartingEventManager<_, _, _, _>,
|
||||||
_core_id| {
|
_core_id| {
|
||||||
let gum = unsafe { Gum::obtain() };
|
let gum = Gum::obtain();
|
||||||
|
|
||||||
let coverage = CoverageRuntime::new();
|
let coverage = CoverageRuntime::new();
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
@ -105,13 +105,11 @@ unsafe fn fuzz(options: FuzzerOptions) -> Result<(), Error> {
|
|||||||
FridaInstrumentationHelper::new(&gum, &options, tuple_list!(coverage));
|
FridaInstrumentationHelper::new(&gum, &options, tuple_list!(coverage));
|
||||||
|
|
||||||
// Create an observation channel using the coverage map
|
// Create an observation channel using the coverage map
|
||||||
let edges_observer = HitcountsMapObserver::new(unsafe {
|
let edges_observer = HitcountsMapObserver::new(StdMapObserver::new_from_ptr(
|
||||||
StdMapObserver::new_from_ptr(
|
"edges",
|
||||||
"edges",
|
frida_helper.map_ptr_mut().unwrap(),
|
||||||
frida_helper.map_ptr_mut().unwrap(),
|
MAP_SIZE,
|
||||||
MAP_SIZE,
|
));
|
||||||
)
|
|
||||||
});
|
|
||||||
|
|
||||||
// Create an observation channel to keep track of the execution time
|
// Create an observation channel to keep track of the execution time
|
||||||
let time_observer = TimeObserver::new("time");
|
let time_observer = TimeObserver::new("time");
|
||||||
@ -183,7 +181,7 @@ unsafe fn fuzz(options: FuzzerOptions) -> Result<(), Error> {
|
|||||||
let observers = tuple_list!(
|
let observers = tuple_list!(
|
||||||
edges_observer,
|
edges_observer,
|
||||||
time_observer,
|
time_observer,
|
||||||
AsanErrorsObserver::new(unsafe { &ASAN_ERRORS })
|
AsanErrorsObserver::new(&ASAN_ERRORS)
|
||||||
);
|
);
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
let observers = tuple_list!(edges_observer, time_observer);
|
let observers = tuple_list!(edges_observer, time_observer);
|
||||||
@ -221,7 +219,7 @@ unsafe fn fuzz(options: FuzzerOptions) -> Result<(), Error> {
|
|||||||
(|state: Option<StdState<_, _, _, _, _>>,
|
(|state: Option<StdState<_, _, _, _, _>>,
|
||||||
mut mgr: LlmpRestartingEventManager<_, _, _, _>,
|
mut mgr: LlmpRestartingEventManager<_, _, _, _>,
|
||||||
_core_id| {
|
_core_id| {
|
||||||
let gum = unsafe { Gum::obtain() };
|
let gum = Gum::obtain();
|
||||||
|
|
||||||
let coverage = CoverageRuntime::new();
|
let coverage = CoverageRuntime::new();
|
||||||
let cmplog = CmpLogRuntime::new();
|
let cmplog = CmpLogRuntime::new();
|
||||||
@ -230,13 +228,11 @@ unsafe fn fuzz(options: FuzzerOptions) -> Result<(), Error> {
|
|||||||
FridaInstrumentationHelper::new(&gum, &options, tuple_list!(coverage, cmplog));
|
FridaInstrumentationHelper::new(&gum, &options, tuple_list!(coverage, cmplog));
|
||||||
|
|
||||||
// Create an observation channel using the coverage map
|
// Create an observation channel using the coverage map
|
||||||
let edges_observer = HitcountsMapObserver::new(unsafe {
|
let edges_observer = HitcountsMapObserver::new(StdMapObserver::new_from_ptr(
|
||||||
StdMapObserver::new_from_ptr(
|
"edges",
|
||||||
"edges",
|
frida_helper.map_ptr_mut().unwrap(),
|
||||||
frida_helper.map_ptr_mut().unwrap(),
|
MAP_SIZE,
|
||||||
MAP_SIZE,
|
));
|
||||||
)
|
|
||||||
});
|
|
||||||
|
|
||||||
// Create an observation channel to keep track of the execution time
|
// Create an observation channel to keep track of the execution time
|
||||||
let time_observer = TimeObserver::new("time");
|
let time_observer = TimeObserver::new("time");
|
||||||
@ -301,7 +297,7 @@ unsafe fn fuzz(options: FuzzerOptions) -> Result<(), Error> {
|
|||||||
let observers = tuple_list!(
|
let observers = tuple_list!(
|
||||||
edges_observer,
|
edges_observer,
|
||||||
time_observer,
|
time_observer,
|
||||||
AsanErrorsObserver::new(unsafe { &ASAN_ERRORS })
|
AsanErrorsObserver::new(&ASAN_ERRORS)
|
||||||
);
|
);
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
let observers = tuple_list!(edges_observer, time_observer,);
|
let observers = tuple_list!(edges_observer, time_observer,);
|
||||||
@ -330,8 +326,7 @@ unsafe fn fuzz(options: FuzzerOptions) -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create an observation channel using cmplog map
|
// Create an observation channel using cmplog map
|
||||||
let cmplog_observer =
|
let cmplog_observer = CmpLogObserver::new("cmplog", &mut CMPLOG_MAP, true);
|
||||||
CmpLogObserver::new("cmplog", unsafe { &mut CMPLOG_MAP }, true);
|
|
||||||
|
|
||||||
let mut executor = ShadowExecutor::new(executor, tuple_list!(cmplog_observer));
|
let mut executor = ShadowExecutor::new(executor, tuple_list!(cmplog_observer));
|
||||||
|
|
||||||
@ -356,7 +351,7 @@ unsafe fn fuzz(options: FuzzerOptions) -> Result<(), Error> {
|
|||||||
(|state: Option<StdState<_, _, _, _, _>>,
|
(|state: Option<StdState<_, _, _, _, _>>,
|
||||||
mut mgr: LlmpRestartingEventManager<_, _, _, _>,
|
mut mgr: LlmpRestartingEventManager<_, _, _, _>,
|
||||||
_core_id| {
|
_core_id| {
|
||||||
let gum = unsafe { Gum::obtain() };
|
let gum = Gum::obtain();
|
||||||
|
|
||||||
let coverage = CoverageRuntime::new();
|
let coverage = CoverageRuntime::new();
|
||||||
|
|
||||||
@ -364,13 +359,11 @@ unsafe fn fuzz(options: FuzzerOptions) -> Result<(), Error> {
|
|||||||
FridaInstrumentationHelper::new(&gum, &options, tuple_list!(coverage));
|
FridaInstrumentationHelper::new(&gum, &options, tuple_list!(coverage));
|
||||||
|
|
||||||
// Create an observation channel using the coverage map
|
// Create an observation channel using the coverage map
|
||||||
let edges_observer = HitcountsMapObserver::new(unsafe {
|
let edges_observer = HitcountsMapObserver::new(StdMapObserver::new_from_ptr(
|
||||||
StdMapObserver::new_from_ptr(
|
"edges",
|
||||||
"edges",
|
frida_helper.map_ptr_mut().unwrap(),
|
||||||
frida_helper.map_ptr_mut().unwrap(),
|
MAP_SIZE,
|
||||||
MAP_SIZE,
|
));
|
||||||
)
|
|
||||||
});
|
|
||||||
|
|
||||||
// Create an observation channel to keep track of the execution time
|
// Create an observation channel to keep track of the execution time
|
||||||
let time_observer = TimeObserver::new("time");
|
let time_observer = TimeObserver::new("time");
|
||||||
@ -435,7 +428,7 @@ unsafe fn fuzz(options: FuzzerOptions) -> Result<(), Error> {
|
|||||||
let observers = tuple_list!(
|
let observers = tuple_list!(
|
||||||
edges_observer,
|
edges_observer,
|
||||||
time_observer,
|
time_observer,
|
||||||
AsanErrorsObserver::new(unsafe { &ASAN_ERRORS })
|
AsanErrorsObserver::new(&ASAN_ERRORS)
|
||||||
);
|
);
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
let observers = tuple_list!(edges_observer, time_observer,);
|
let observers = tuple_list!(edges_observer, time_observer,);
|
||||||
|
@ -63,7 +63,7 @@
|
|||||||
//! }
|
//! }
|
||||||
//!```
|
//!```
|
||||||
|
|
||||||
use clap::{App, AppSettings, IntoApp, Parser};
|
use clap::{Command, CommandFactory, Parser};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
#[cfg(feature = "frida_cli")]
|
#[cfg(feature = "frida_cli")]
|
||||||
use std::error;
|
use std::error;
|
||||||
@ -105,9 +105,9 @@ fn parse_instrumentation_location(
|
|||||||
/// Top-level container for cli options/arguments/subcommands
|
/// Top-level container for cli options/arguments/subcommands
|
||||||
#[derive(Parser, Clone, Debug, Serialize, Deserialize)]
|
#[derive(Parser, Clone, Debug, Serialize, Deserialize)]
|
||||||
#[clap(
|
#[clap(
|
||||||
setting(AppSettings::ArgRequiredElseHelp),
|
arg_required_else_help(true),
|
||||||
setting(AppSettings::SubcommandPrecedenceOverArg),
|
subcommand_precedence_over_arg(true),
|
||||||
setting(AppSettings::ArgsNegateSubcommands)
|
args_conflicts_with_subcommands(true)
|
||||||
)]
|
)]
|
||||||
#[allow(clippy::struct_excessive_bools)]
|
#[allow(clippy::struct_excessive_bools)]
|
||||||
pub struct FuzzerOptions {
|
pub struct FuzzerOptions {
|
||||||
@ -347,9 +347,9 @@ impl FuzzerOptions {
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn with_subcommand(mode: App) -> App {
|
pub fn with_subcommand(mode: Command) -> Command {
|
||||||
let app: App = Self::into_app();
|
let command: Command = Self::command();
|
||||||
app.subcommand(mode)
|
command.subcommand(mode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,7 +67,6 @@ extern "C" {
|
|||||||
fn __register_frame(begin: *mut c_void);
|
fn __register_frame(begin: *mut c_void);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the current thread's TLS address
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
fn tls_ptr() -> *const c_void;
|
fn tls_ptr() -> *const c_void;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user