Struct libafl_qemu::hooks::QemuHooks
source · [−]pub struct QemuHooks<'a, I, QT, S> where
QT: QemuHelperTuple<I, S>,
I: Input, { /* private fields */ }
Implementations
sourceimpl<'a, I, QT, S> QemuHooks<'a, I, QT, S> where
QT: QemuHelperTuple<I, S>,
I: Input,
impl<'a, I, QT, S> QemuHooks<'a, I, QT, S> where
QT: QemuHelperTuple<I, S>,
I: Input,
pub fn new(emulator: &'a Emulator, helpers: QT) -> Box<Self>
pub fn match_helper<T>(&self) -> Option<&T> where
T: 'static,
pub fn match_helper_mut<T>(&mut self) -> Option<&mut T> where
T: 'static,
pub fn emulator(&self) -> &Emulator
pub fn helpers(&self) -> &QT
pub fn helpers_mut(&mut self) -> &mut QT
pub fn instruction(
&self,
addr: GuestAddr,
hook: fn(_: &mut Self, _: Option<&mut S>, _: GuestAddr),
invalidate_block: bool
)
pub unsafe fn instruction_closure(
&self,
addr: GuestAddr,
hook: Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, GuestAddr)>,
invalidate_block: bool
)
pub fn edges(
&self,
generation_hook: Option<fn(_: &mut Self, _: Option<&mut S>, src: GuestAddr, dest: GuestAddr) -> Option<u64>>,
execution_hook: Option<fn(_: &mut Self, _: Option<&mut S>, id: u64)>
)
pub unsafe fn edges_closures(
&self,
generation_hook: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, GuestAddr, GuestAddr) -> Option<u64>>>,
execution_hook: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, u64)>>
)
pub fn edges_raw(
&self,
generation_hook: Option<fn(_: &mut Self, _: Option<&mut S>, src: GuestAddr, dest: GuestAddr) -> Option<u64>>,
execution_hook: Option<extern "C" fn(id: u64, data: u64)>
)
pub fn blocks(
&self,
generation_hook: Option<fn(_: &mut Self, _: Option<&mut S>, pc: GuestAddr) -> Option<u64>>,
execution_hook: Option<fn(_: &mut Self, _: Option<&mut S>, id: u64)>
)
pub unsafe fn blocks_closures(
&self,
generation_hook: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, GuestAddr) -> Option<u64>>>,
execution_hook: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, u64)>>
)
pub fn blocks_raw(
&self,
generation_hook: Option<fn(_: &mut Self, _: Option<&mut S>, pc: GuestAddr) -> Option<u64>>,
execution_hook: Option<extern "C" fn(id: u64, data: u64)>
)
pub fn reads(
&self,
generation_hook: Option<fn(_: &mut Self, _: Option<&mut S>, pc: GuestAddr, size: usize) -> Option<u64>>,
execution_hook1: Option<fn(_: &mut Self, _: Option<&mut S>, id: u64, addr: GuestAddr)>,
execution_hook2: Option<fn(_: &mut Self, _: Option<&mut S>, id: u64, addr: GuestAddr)>,
execution_hook4: Option<fn(_: &mut Self, _: Option<&mut S>, id: u64, addr: GuestAddr)>,
execution_hook8: Option<fn(_: &mut Self, _: Option<&mut S>, id: u64, addr: GuestAddr)>,
execution_hook_n: Option<fn(_: &mut Self, _: Option<&mut S>, id: u64, addr: GuestAddr, size: usize)>
)
pub unsafe fn reads_closures(
&self,
generation_hook: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, GuestAddr, usize) -> Option<u64>>>,
execution_hook1: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, u64, GuestAddr)>>,
execution_hook2: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, u64, GuestAddr)>>,
execution_hook4: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, u64, GuestAddr)>>,
execution_hook8: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, u64, GuestAddr)>>,
execution_hook_n: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, u64, GuestAddr, usize)>>
)
pub fn reads_raw(
&self,
generation_hook: Option<fn(_: &mut Self, _: Option<&mut S>, pc: GuestAddr, size: usize) -> Option<u64>>,
execution_hook1: Option<extern "C" fn(id: u64, addr: GuestAddr, data: u64)>,
execution_hook2: Option<extern "C" fn(id: u64, addr: GuestAddr, data: u64)>,
execution_hook4: Option<extern "C" fn(id: u64, addr: GuestAddr, data: u64)>,
execution_hook8: Option<extern "C" fn(id: u64, addr: GuestAddr, data: u64)>,
execution_hook_n: Option<extern "C" fn(id: u64, addr: GuestAddr, size: usize, data: u64)>
)
pub fn writes(
&self,
generation_hook: Option<fn(_: &mut Self, _: Option<&mut S>, pc: GuestAddr, size: usize) -> Option<u64>>,
execution_hook1: Option<fn(_: &mut Self, _: Option<&mut S>, id: u64, addr: GuestAddr)>,
execution_hook2: Option<fn(_: &mut Self, _: Option<&mut S>, id: u64, addr: GuestAddr)>,
execution_hook4: Option<fn(_: &mut Self, _: Option<&mut S>, id: u64, addr: GuestAddr)>,
execution_hook8: Option<fn(_: &mut Self, _: Option<&mut S>, id: u64, addr: GuestAddr)>,
execution_hook_n: Option<fn(_: &mut Self, _: Option<&mut S>, id: u64, addr: GuestAddr, size: usize)>
)
pub unsafe fn writes_closures(
&self,
generation_hook: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, GuestAddr, usize) -> Option<u64>>>,
execution_hook1: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, u64, GuestAddr)>>,
execution_hook2: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, u64, GuestAddr)>>,
execution_hook4: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, u64, GuestAddr)>>,
execution_hook8: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, u64, GuestAddr)>>,
execution_hook_n: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, u64, GuestAddr, usize)>>
)
pub fn writes_raw(
&self,
generation_hook: Option<fn(_: &mut Self, _: Option<&mut S>, pc: GuestAddr, size: usize) -> Option<u64>>,
execution_hook1: Option<extern "C" fn(id: u64, addr: GuestAddr, data: u64)>,
execution_hook2: Option<extern "C" fn(id: u64, addr: GuestAddr, data: u64)>,
execution_hook4: Option<extern "C" fn(id: u64, addr: GuestAddr, data: u64)>,
execution_hook8: Option<extern "C" fn(id: u64, addr: GuestAddr, data: u64)>,
execution_hook_n: Option<extern "C" fn(id: u64, addr: GuestAddr, size: usize, data: u64)>
)
pub fn cmps(
&self,
generation_hook: Option<fn(_: &mut Self, _: Option<&mut S>, pc: GuestAddr, size: usize) -> Option<u64>>,
execution_hook1: Option<fn(_: &mut Self, _: Option<&mut S>, id: u64, v0: u8, v1: u8)>,
execution_hook2: Option<fn(_: &mut Self, _: Option<&mut S>, id: u64, v0: u16, v1: u16)>,
execution_hook4: Option<fn(_: &mut Self, _: Option<&mut S>, id: u64, v0: u32, v1: u32)>,
execution_hook8: Option<fn(_: &mut Self, _: Option<&mut S>, id: u64, v0: u64, v1: u64)>
)
pub unsafe fn cmps_closures(
&self,
generation_hook: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, GuestAddr, usize) -> Option<u64>>>,
execution_hook1: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, u64, u8, u8)>>,
execution_hook2: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, u64, u16, u16)>>,
execution_hook4: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, u64, u32, u32)>>,
execution_hook8: Option<Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, u64, u64, u64)>>
)
pub fn cmps_raw(
&self,
generation_hook: Option<fn(_: &mut Self, _: Option<&mut S>, pc: GuestAddr, size: usize) -> Option<u64>>,
execution_hook1: Option<extern "C" fn(id: u64, v0: u8, v1: u8, data: u64)>,
execution_hook2: Option<extern "C" fn(id: u64, v0: u16, v1: u16, data: u64)>,
execution_hook4: Option<extern "C" fn(id: u64, v0: u32, v1: u32, data: u64)>,
execution_hook8: Option<extern "C" fn(id: u64, v0: u64, v1: u64, data: u64)>
)
pub fn thread_creation(
&self,
hook: fn(_: &mut Self, _: Option<&mut S>, tid: u32)
)
pub fn thread_creation_closure(
&self,
hook: Box<dyn FnMut(&'a mut Self, Option<&'a mut S>, u32) + 'a>
)
pub fn thread_creation_once(
&self,
hook: Box<dyn FnOnce(&mut Self, Option<&mut S>, u32) + 'a>
)
pub fn syscalls(
&self,
hook: fn(_: &mut Self, _: Option<&mut S>, sys_num: i32, _: u64, _: u64, _: u64, _: u64, _: u64, _: u64, _: u64, _: u64) -> SyscallHookResult
)
pub fn syscalls_closure(
&self,
hook: Box<dyn FnMut(&mut Self, Option<&mut S>, i32, u64, u64, u64, u64, u64, u64, u64, u64) -> SyscallHookResult>
)
pub fn after_syscalls(
&self,
hook: fn(_: &mut Self, _: Option<&mut S>, result: u64, sys_num: i32, _: u64, _: u64, _: u64, _: u64, _: u64, _: u64, _: u64, _: u64) -> u64
)
pub fn after_syscalls_closure(
&self,
hook: Box<dyn FnMut(&mut Self, Option<&mut S>, u64, i32, u64, u64, u64, u64, u64, u64, u64, u64) -> u64>
)
Trait Implementations
Auto Trait Implementations
impl<'a, I, QT, S> RefUnwindSafe for QemuHooks<'a, I, QT, S> where
I: RefUnwindSafe,
QT: RefUnwindSafe,
S: RefUnwindSafe,
impl<'a, I, QT, S> Send for QemuHooks<'a, I, QT, S> where
I: Send,
QT: Send,
S: Send,
impl<'a, I, QT, S> Sync for QemuHooks<'a, I, QT, S> where
I: Sync,
QT: Sync,
S: Sync,
impl<'a, I, QT, S> Unpin for QemuHooks<'a, I, QT, S> where
I: Unpin,
QT: Unpin,
S: Unpin,
impl<'a, I, QT, S> UnwindSafe for QemuHooks<'a, I, QT, S> where
I: UnwindSafe,
QT: UnwindSafe,
S: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<Tail, T> Prepend<T> for Tail
impl<Tail, T> Prepend<T> for Tail
type PreprendResult = Tail
type PreprendResult = Tail
The Resulting [TupleList
], of an Prepend::prepend()
call,
including the prepended entry. Read more
sourcefn prepend(self, value: T) -> (T, <Tail as Prepend<T>>::PreprendResult)
fn prepend(self, value: T) -> (T, <Tail as Prepend<T>>::PreprendResult)
Prepend a value to this tuple, returning a new tuple with prepended value.
impl<SS, SP> SupersetOf<SS> for SP where
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SP where
SS: SubsetOf<SP>,
fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct self
from the equivalent element of its
superset. Read more
fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if self
is actually part of its subset T
(and can be converted to it).
fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as self.to_subset
but without any property checks. Always succeeds.
fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts self
to the equivalent element of its superset.