[][src]Enum x64_asm::Opcode

pub enum Opcode {
    ADDRM64R64 {
        rm64: Operand,
        r64: GeneralPurposeRegister,
    },
    ADDR64RM64 {
        r64: GeneralPurposeRegister,
        rm64: Operand,
    },
    CALLFUNC(Operand),
    CWD,
    CDQ,
    CQO,
    CMPRAXIMM32 {
        imm: Immediate,
    },
    IDIVRM64 {
        rm64: Operand,
    },
    IMULR64RM64 {
        r64: GeneralPurposeRegister,
        rm64: Operand,
    },
    INCRM64 {
        rm64: Operand,
    },
    JMPLABEL {
        label: String,
    },
    JELABEL {
        label: String,
    },
    LEAR64FROMSTRADDR {
        r64: GeneralPurposeRegister,
        str_sym: String,
        addend: usize,
    },
    MOVRM8R8 {
        r8: GeneralPurposeRegister,
        rm8: Operand,
    },
    MOVRM64R64 {
        r64: GeneralPurposeRegister,
        rm64: Operand,
    },
    MOVR64RM64 {
        r64: GeneralPurposeRegister,
        rm64: Operand,
    },
    MOVRM64IMM32 {
        imm: Immediate,
        rm64: Operand,
    },
    NEGRM64 {
        rm64: Operand,
    },
    POPR64 {
        r64: GeneralPurposeRegister,
    },
    PUSHRM64 {
        rm64: Operand,
    },
    PUSHR64 {
        r64: GeneralPurposeRegister,
    },
    PUSHIMM32 {
        imm: Immediate,
    },
    RET,
    SUBR64RM64 {
        r64: GeneralPurposeRegister,
        rm64: Operand,
    },
    SUBRM64R64 {
        rm64: Operand,
        r64: GeneralPurposeRegister,
    },
    SUBRM64IMM32 {
        rm64: Operand,
        imm: Immediate,
    },
    SYSCALL,
    COMMENT(String),
}

Variants

ADDRM64R64

Add r/m64 to r64

Fields of ADDRM64R64

rm64: Operandr64: GeneralPurposeRegister
ADDR64RM64

Add r64 to r/m64

Fields of ADDR64RM64

r64: GeneralPurposeRegisterrm64: Operand
CALLFUNC(Operand)

CALL Function (abstraction)

CWD

DX:AX := Sign-extended of AX

CDQ

EDX:EAX := Sign-extended of EAX

CQO

RDX:RAX := Sign-extended of RAX

CMPRAXIMM32

Compare imm32 with RAX.

Fields of CMPRAXIMM32

imm: Immediate
IDIVRM64

signed divide RDX:RAX by r/m64; result stored in RAX := Quotient, RDX := Remainder.

Fields of IDIVRM64

rm64: Operand
IMULR64RM64

Quadword register := Quadword register * r/m64

Fields of IMULR64RM64

r64: GeneralPurposeRegisterrm64: Operand
INCRM64

increment r/m64 by one.

Fields of INCRM64

rm64: Operand
JMPLABEL

Jump Label このopcodeに対し to_bytes() メソッドを呼び出すと, [REX-Prefix, opcode] が返されます. 自作アセンブラでこのバイト列に対し imm32(0) を追加して, あとから相対オフセットを計算するといいと思います.

Fields of JMPLABEL

label: String
JELABEL

Jump Equal Label このopcodeに対し to_bytes() メソッドを呼び出すと, [REX-Prefix, opcode1, opcode2] が返されます. 自作アセンブラでこのバイト列に対し imm32(0) を追加して, あとから相対オフセットを計算するといいと思います.

Fields of JELABEL

label: String
LEAR64FROMSTRADDR

スタティックリンクで使用される, lea rax, .LS1 のような命令です. このopcodeに対し to_bytes() メソッドを呼び出すと, [REX-Prefix, opcode, ModRM] が返されます. 自作アセンブラでは let mut base_bytes = inst.to_bytes(); base_bytes.append(&mut vec![0x25, 0x00, 0x00, 0x00, 0x00]) のように, データセグメントを用いるプリフィックスと,再配置でアドレスを書き込むためのパディングを追加するといいでしょう. そして再配置シンボルを定義して,リンク時に文字列のアドレスを書き込むといいと思います.

Fields of LEAR64FROMSTRADDR

r64: GeneralPurposeRegisterstr_sym: Stringaddend: usize
MOVRM8R8

Move r8 to r/m8

Fields of MOVRM8R8

r8: GeneralPurposeRegisterrm8: Operand
MOVRM64R64

Move r64 to r/m64

Fields of MOVRM64R64

r64: GeneralPurposeRegisterrm64: Operand
MOVR64RM64

Move r/m64 to r64

Fields of MOVR64RM64

r64: GeneralPurposeRegisterrm64: Operand
MOVRM64IMM32

Move imm32 to r/m64

Fields of MOVRM64IMM32

imm: Immediaterm64: Operand
NEGRM64

Two's complement negate r/m64

Fields of NEGRM64

rm64: Operand
POPR64

Pop top of stack into r64; increment stack pointer; Cannot encode 32-bit operand size.

Fields of POPR64

r64: GeneralPurposeRegister
PUSHRM64

Push r/m64

Fields of PUSHRM64

rm64: Operand
PUSHR64

Push r64,

Fields of PUSHR64

r64: GeneralPurposeRegister
PUSHIMM32

Push imm32

Fields of PUSHIMM32

imm: Immediate
RET

Near Return

SUBR64RM64

Subtract r/m64 from r64

Fields of SUBR64RM64

r64: GeneralPurposeRegisterrm64: Operand
SUBRM64R64

Subtract r64 from r/m64

Fields of SUBRM64R64

rm64: Operandr64: GeneralPurposeRegister
SUBRM64IMM32

Subtract imm32 from r/m64

Fields of SUBRM64IMM32

rm64: Operandimm: Immediate
SYSCALL

Fast System Call

COMMENT(String)

for comments

Implementations

impl Opcode[src]

pub fn to_bytes(&self) -> Vec<u8>[src]

pub fn encoding(&self) -> Encoding[src]

pub fn rex_prefix(&self) -> Option<REXPrefix>[src]

calculating REX-Prefix byte

pub fn modrm(&self) -> Option<ModRM>[src]

calculating ModR/M byte

pub fn get_displacement(&self) -> Option<Displacement>[src]

get displacement if memory operand hasn't found, it returns Option::None,

pub fn get_immediate(&self) -> Option<Immediate>[src]

pub fn sib_bite(&self) -> Option<SIBByte>[src]

pub fn to_intel_string(&self) -> String[src]

to Intel syntax.

pub fn to_at_string(&self) -> String[src]

to AT&T syntax.

Trait Implementations

impl Clone for Opcode[src]

impl Debug for Opcode[src]

impl Eq for Opcode[src]

impl Ord for Opcode[src]

impl PartialEq<Opcode> for Opcode[src]

impl PartialOrd<Opcode> for Opcode[src]

impl StructuralEq for Opcode[src]

impl StructuralPartialEq for Opcode[src]

Auto Trait Implementations

impl RefUnwindSafe for Opcode

impl Send for Opcode

impl Sync for Opcode

impl Unpin for Opcode

impl UnwindSafe for Opcode

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.