Enum yaxpeax_x86::real_mode::Operand[][src]

#[non_exhaustive]
pub enum Operand {
Show 29 variants ImmediateI8(i8), ImmediateU8(u8), ImmediateI16(i16), ImmediateU16(u16), ImmediateI32(i32), ImmediateU32(u32), Register(RegSpec), RegisterMaskMerge(RegSpecRegSpecMergeMode), RegisterMaskMergeSae(RegSpecRegSpecMergeModeSaeMode), RegisterMaskMergeSaeNoround(RegSpecRegSpecMergeMode), DisplacementU16(u16), DisplacementU32(u32), RegDeref(RegSpec), RegDisp(RegSpeci32), RegScale(RegSpecu8), RegIndexBase(RegSpecRegSpec), RegIndexBaseDisp(RegSpecRegSpeci32), RegScaleDisp(RegSpecu8i32), RegIndexBaseScale(RegSpecRegSpecu8), RegIndexBaseScaleDisp(RegSpecRegSpecu8i32), RegDerefMasked(RegSpecRegSpec), RegDispMasked(RegSpeci32RegSpec), RegScaleMasked(RegSpecu8RegSpec), RegIndexBaseMasked(RegSpecRegSpecRegSpec), RegIndexBaseDispMasked(RegSpecRegSpeci32RegSpec), RegScaleDispMasked(RegSpecu8i32RegSpec), RegIndexBaseScaleMasked(RegSpecRegSpecu8RegSpec), RegIndexBaseScaleDispMasked(RegSpecRegSpecu8i32RegSpec), Nothing,
}
Expand description

an operand for an x86 instruction.

Operand::Nothing should be unreachable in practice; any such instructions should have an operand count of 0 (or at least one fewer than the Nothing operand’s position).

Variants (Non-exhaustive)

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
ImmediateI8(i8)

a sign-extended byte

ImmediateU8(u8)

a zero-extended byte

ImmediateI16(i16)

a sign-extended word

ImmediateU16(u16)

a zero-extended word

ImmediateI32(i32)

a sign-extended dword

ImmediateU32(u32)

a zero-extended dword

Register(RegSpec)

a bare register operand, such as rcx.

RegisterMaskMerge(RegSpecRegSpecMergeMode)

an avx512 register operand with optional mask register and merge mode, such as zmm3{k4}{z}.

if the mask register is k0, there is no masking applied, and the default x86 operation is MergeMode::Merge.

RegisterMaskMergeSae(RegSpecRegSpecMergeModeSaeMode)

an avx512 register operand with optional mask register, merge mode, and suppressed exceptions, such as zmm3{k4}{z}{rd-sae}.

if the mask register is k0, there is no masking applied, and the default x86 operation is MergeMode::Merge.

RegisterMaskMergeSaeNoround(RegSpecRegSpecMergeMode)

an avx512 register operand with optional mask register, merge mode, and suppressed exceptions, with no overridden rounding mode, such as zmm3{k4}{z}{sae}.

if the mask register is k0, there is no masking applied, and the default x86 operation is MergeMode::Merge.

DisplacementU16(u16)

a memory access to a literal word address. it’s extremely rare that a well-formed x86 instruction uses this mode. as an example, [0x1133]

DisplacementU32(u32)

a memory access to a literal qword address. it’s relatively rare that a well-formed x86 instruction uses this mode, but plausibe. for example, fs:[0x14]. segment overrides, however, are maintained on the instruction itself.

RegDeref(RegSpec)

a simple dereference of the address held in some register. for example: [esi].

RegDisp(RegSpeci32)

a dereference of the address held in some register with offset. for example: [esi + 0x14].

RegScale(RegSpecu8)

a dereference of the address held in some register scaled by 1, 2, 4, or 8. this is almost always used with the lea instruction. for example: [edx * 4].

RegIndexBase(RegSpecRegSpec)

a dereference of the address from summing two registers. for example: [ebp + rax]

RegIndexBaseDisp(RegSpecRegSpeci32)

a dereference of the address from summing two registers with offset. for example: [edi + ecx + 0x40]

RegScaleDisp(RegSpecu8i32)

a dereference of the address held in some register scaled by 1, 2, 4, or 8 with offset. this is almost always used with the lea instruction. for example: [eax * 4 + 0x30].

RegIndexBaseScale(RegSpecRegSpecu8)

a dereference of the address from summing a register and index register scaled by 1, 2, 4, or 8. for example: [esi + ecx * 4]

RegIndexBaseScaleDisp(RegSpecRegSpecu8i32)

a dereference of the address from summing a register and index register scaled by 1, 2, 4, or 8, with offset. for example: [esi + ecx * 4 + 0x1234]

RegDerefMasked(RegSpecRegSpec)

an avx512 dereference of register with optional masking. for example: [edx]{k3}

RegDispMasked(RegSpeci32RegSpec)

an avx512 dereference of register plus offset, with optional masking. for example: [esp + 0x40]{k3}

RegScaleMasked(RegSpecu8RegSpec)

an avx512 dereference of a register scaled by 1, 2, 4, or 8, with optional masking. this seems extraordinarily unlikely to occur in practice. for example: [esi * 4]{k2}

RegIndexBaseMasked(RegSpecRegSpecRegSpec)

an avx512 dereference of a register plus index scaled by 1, 2, 4, or 8, with optional masking. for example: [esi + eax * 4]{k6}

RegIndexBaseDispMasked(RegSpecRegSpeci32RegSpec)

an avx512 dereference of a register plus offset, with optional masking. for example: [esi + eax + 0x1313]{k6}

RegScaleDispMasked(RegSpecu8i32RegSpec)

an avx512 dereference of a register scaled by 1, 2, 4, or 8 plus offset, with optional masking. this seems extraordinarily unlikely to occur in practice. for example: [esi * 4 + 0x1357]{k2}

RegIndexBaseScaleMasked(RegSpecRegSpecu8RegSpec)

an avx512 dereference of a register plus index scaled by 1, 2, 4, or 8, with optional masking. for example: [esi + eax * 4]{k6}

RegIndexBaseScaleDispMasked(RegSpecRegSpecu8i32RegSpec)

an avx512 dereference of a register plus index scaled by 1, 2, 4, or 8 and offset, with optional masking. for example: [esi + eax * 4 + 0x1313]{k6}

Nothing

no operand. it is a bug for yaxpeax-x86 to construct an Operand of this kind for public use; the instruction’s operand_count should be reduced so as to make this invisible to library clients.

Implementations

returns true if this operand implies a memory access, false otherwise.

notably, the lea instruction uses a memory operand without actually ever accessing memory.

return the width of this operand, in bytes. register widths are determined by the register’s class. the widths of memory operands are recorded on the instruction this Operand came from; None here means the authoritative width is instr.mem_size().

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

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 !=.

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

Performs the conversion.

Performs the conversion.

The resulting type after obtaining ownership.

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

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

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

Converts the given value to a String. 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.