[−][src]Struct pelite::pe32::scanner::Scanner
Pattern scanner.
For more information see the module-level documentation.
Methods
impl<'a, P: Pe<'a>> Scanner<P>
[src]
pub fn finds(&self, pat: &[Atom], range: Range<Rva>, save: &mut [Rva]) -> bool
[src]
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.
pub fn finds_code(&self, pat: &[Atom], save: &mut [Rva]) -> bool
[src]
Finds the unique code match for the pattern.
Restricts the range to the code section. See finds
for more information.
pub fn matches<'pat>(
&self,
pat: &'pat [Atom],
range: Range<Rva>
) -> Matches<'pat, P>
[src]
&self,
pat: &'pat [Atom],
range: Range<Rva>
) -> Matches<'pat, P>
Returns an iterator over the matches of a pattern within the given range.
pub fn matches_code<'pat>(&self, pat: &'pat [Atom]) -> Matches<'pat, P>
[src]
Returns an iterator over the code matches of a pattern.
Restricts the range to the code section. See matches
for more information.
pub fn exec(&self, cursor: Rva, pat: &[Atom], save: &mut [Rva]) -> bool
[src]
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
Auto Trait Implementations
impl<P> Sync for Scanner<P> where
P: Sync,
P: Sync,
impl<P> Send for Scanner<P> where
P: Send,
P: Send,
impl<P> Unpin for Scanner<P> where
P: Unpin,
P: Unpin,
impl<P> UnwindSafe for Scanner<P> where
P: UnwindSafe,
P: UnwindSafe,
impl<P> RefUnwindSafe for Scanner<P> where
P: RefUnwindSafe,
P: RefUnwindSafe,
Blanket Implementations
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T> From<T> for T
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,