Scanner

Struct Scanner 

Source
pub struct Scanner<P> { /* private fields */ }
Expand description

Pattern scanner.

For more information see the module-level documentation.

Implementations§

Source§

impl<'a, P: Pe<'a>> Scanner<P>

Source

pub fn finds(&self, pat: &[Atom], range: Range<Rva>, save: &mut [Rva]) -> bool

Finds the unique match for the pattern in the given range.

The pattern may contain instructions to capture interesting addresses, these are stored in the save array. Out of bounds stores are simply ignored, ensure the save array is large enough for the given pattern.

In case of mismatch, ie. returns false, the save array is still overwritten with temporary data and should be considered trashed. Keep a copy, invoke with a fresh save array or reexecute the pattern at the saved cursor to get around this.

Returns false if no match is found or multiple matches are found to prevent subtle bugs where a pattern goes stale by not being unique any more.

Use matches(pat, range).next(save) if just the first match is desired.

Source

pub fn finds_code(&self, pat: &[Atom], save: &mut [Rva]) -> bool

Finds the unique code match for the pattern.

Restricts the range to the code section. See finds for more information.

Source

pub fn matches<'pat>( &self, pat: &'pat [Atom], range: Range<Rva>, ) -> Matches<'pat, P>

Returns an iterator over the matches of a pattern within the given range.

Source

pub fn matches_code<'pat>(&self, pat: &'pat [Atom]) -> Matches<'pat, P>

Returns an iterator over the code matches of a pattern.

Restricts the range to the code section. See matches for more information.

Source

pub fn exec(&self, cursor: Rva, pat: &[Atom], save: &mut [Rva]) -> bool

Pattern interpreter, returns if the pattern matches the binary image at the given rva.

The pattern may contain instructions to capture interesting addresses, these are stored in the save array. Out of bounds stores are simply ignored, ensure the save array is large enough for the given pattern.

In case of mismatch, ie. returns false, the save array is still overwritten with temporary data and should be considered trashed. Keep a copy, invoke with a fresh save array or reexecute the pattern at the saved cursor to get around this.

Trait Implementations§

Source§

impl<P: Clone> Clone for Scanner<P>

Source§

fn clone(&self) -> Scanner<P>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<P: Copy> Copy for Scanner<P>

Auto Trait Implementations§

§

impl<P> Freeze for Scanner<P>
where P: Freeze,

§

impl<P> RefUnwindSafe for Scanner<P>
where P: RefUnwindSafe,

§

impl<P> Send for Scanner<P>
where P: Send,

§

impl<P> Sync for Scanner<P>
where P: Sync,

§

impl<P> Unpin for Scanner<P>
where P: Unpin,

§

impl<P> UnwindSafe for Scanner<P>
where P: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.