Enum pelite::pattern::Atom

source ·
pub enum Atom {
Show 26 variants Byte(u8), Save(u8), Push(u8), Pop, Fuzzy(u8), Skip(u8), Back(u8), Rangext(u8), Many(u8), Jump1, Jump4, Ptr, Pir(u8), VTypeName, Check(u8), Aligned(u8), ReadI8(u8), ReadU8(u8), ReadI16(u8), ReadU16(u8), ReadI32(u8), ReadU32(u8), Zero(u8), Case(u8), Break(u8), Nop,
}
Expand description

Pattern atoms.

The scanner will silently ignore nonsensical arguments.

Variants

Byte(u8)

Matches a single byte.

Save(u8)

Captures the cursor in the save array at the specified index.

Push(u8)

After a Pop later continue matching at the current cursor plus the argument.

Pop

Pops the cursor from the stack and continues matching.

Fuzzy(u8)

Sets a mask to apply on next byte match.

Skip(u8)

Skips a fixed number of bytes.

Back(u8)

Rewinds the cursor a fixed number of bytes.

Rangext(u8)

Extends the push, skip, back and many range by argument * 256.

Many(u8)

Looks for the next pattern at most a certain number of bytes ahead.

Jump1

Follows a signed 1 byte jump.

Reads the byte under the cursor, sign extends it, adds it plus 1 to the cursor and continues matching.

Jump4

Follows a signed 4 byte jump.

Reads the dword under the cursor and adds it plus 4 to the cursor and continues matching.

Ptr

Follows an absolute pointer.

Reads the pointer under the cursor, translates it to an RVA, assigns it to the cursor and continues matching.

Matching fails immediately when translation to an RVA fails.

Pir(u8)

Follows a position independent reference.

Reads the dword under the cursor and adds it to the saved cursor for the given slot and continues matching.

VTypeName

Given a cursor pointing to the vtable follows it to its type name.

Check(u8)

Compares the cursor with the value in the given save slot and fails if they’re not equal.

Aligned(u8)

Checks if the cursor is aligned to (1 << value).

ReadI8(u8)

Reads and sign-extends the byte under the cursor, writes to the given slot and advances the cursor by 1.

ReadU8(u8)

Reads and zero-extends the byte under the cursor, writes to the given slot and advances the cursor by 1.

ReadI16(u8)

Reads and sign-extends the word under the cursor, writes to the given slot and advances the cursor by 2.

ReadU16(u8)

Reads and zero-extends the word under the cursor, writes to the given slot and advances the cursor by 2.

ReadI32(u8)

Reads the dword under the cursor, writes to the given slot and advances the cursor by 4.

ReadU32(u8)

Reads the dword under the cursor, writes to the given slot and advances the cursor by 4.

Zero(u8)

Writes zero to the given save slot.

Case(u8)

Sets a retry point when matching fails.

When matching fails the cursor is restored and matching begins again skipping N atoms.

Break(u8)

Continues matching after a case atom, skipping the next N atoms.

Nop

Null instruction, used to make the parser easier to write.

Trait Implementations

Returns a copy of the value. Read more
Performs copy-assignment from source. Read more
Formats the value using the given formatter. Read more
This method tests for self and other values to be equal, and is used by ==. Read more
This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

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

The resulting type after obtaining ownership.
Creates owned data from borrowed data, usually by cloning. Read more
Uses borrowed data to replace owned data, usually by cloning. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.