Struct bddisasm::operand::OpMem

source ·
pub struct OpMem {
Show 20 fields pub has_broadcast: bool, pub is_rip_rel: bool, pub is_stack: bool, pub is_string: bool, pub is_direct: bool, pub is_bitbase: bool, pub is_ag: bool, pub is_mib: bool, pub is_sib_mem: bool, pub seg: Option<u8>, pub base: Option<u8>, pub base_size: Option<u32>, pub index: Option<u8>, pub index_size: Option<u32>, pub vsib: Option<Vsib>, pub scale: Option<u8>, pub disp: Option<u64>, pub disp_size: Option<u8>, pub comp_disp_size: Option<u8>, pub shadow_stack_access: Option<ShadowStackAccess>,
}
Expand description

Describes a memory operand.

Fields§

§has_broadcast: bool

true if the memory operand is a broadcast operand.

§is_rip_rel: bool

true if this is a rip-relative addressing. Base, Index, Scale are all ignored.

§is_stack: bool

true if this is a stack op.

§Note

Explicit stack accesses are not included (eg: mov eax, [rsp]).

§is_string: bool

true for [RSI] and [RDI] operands inside string operations.

§is_direct: bool

true if direct addressing (MOV [...], EAX, 0xA3).

§is_bitbase: bool

true if this is a bit base. Used for BT* instructions.

The bitbase stored in the second operand must be added to the linear address.

§is_ag: bool

true if the memory operand is address generation and no memory access is made.

§is_mib: bool

true MIB addressing is used (MPX instructions).

§is_sib_mem: bool

true the addressing uses sibmem (AMX instructions).

§seg: Option<u8>

Base segment used to address the memory.

§base: Option<u8>

Base register.

§base_size: Option<u32>

Base register size, in bytes. Max 8 bytes.

§index: Option<u8>

Index register. Can be a vector reg (ZMM0-ZMM31).

§index_size: Option<u32>

Index register size, in bytes. Max 8 bytes.

§vsib: Option<Vsib>

The index register selects a vector register.

§scale: Option<u8>

Scale: 1, 2, 4 or 8. Always present if index is present.

§disp: Option<u64>

Sign extended displacement.

§disp_size: Option<u8>

Displacement size. Max 4 bytes.

§comp_disp_size: Option<u8>

Compressed displacement size - 1, 2, 4, 8, 16, 32, 64.

§shadow_stack_access: Option<ShadowStackAccess>

Shadow stack access type.

Will be None if the shadow stack is not accessed.

Trait Implementations§

source§

impl Clone for OpMem

source§

fn clone(&self) -> OpMem

Returns a copy 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 Debug for OpMem

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for OpMem

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq for OpMem

source§

fn eq(&self, other: &OpMem) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Copy for OpMem

source§

impl Eq for OpMem

source§

impl StructuralPartialEq for OpMem

Auto Trait Implementations§

§

impl RefUnwindSafe for OpMem

§

impl Send for OpMem

§

impl Sync for OpMem

§

impl Unpin for OpMem

§

impl UnwindSafe for OpMem

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> 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,

§

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>,

§

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>,

§

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.