[−][src]Enum x64_asm::Opcode
Variants
Add r/m64 to r64
Fields of ADDRM64R64
rm64: Operand
r64: GeneralPurposeRegister
Add r64 to r/m64
Fields of ADDR64RM64
r64: GeneralPurposeRegister
rm64: Operand
CALLFUNC(Operand)
CALL Function (abstraction)
DX:AX := Sign-extended of AX
EDX:EAX := Sign-extended of EAX
RDX:RAX := Sign-extended of RAX
Compare imm32 with RAX.
Fields of CMPRAXIMM32
imm: Immediate
signed divide RDX:RAX by r/m64; result stored in RAX := Quotient, RDX := Remainder.
Fields of IDIVRM64
rm64: Operand
Quadword register := Quadword register * r/m64
Fields of IMULR64RM64
r64: GeneralPurposeRegister
rm64: Operand
increment r/m64 by one.
Fields of INCRM64
rm64: Operand
Jump Label
このopcodeに対し to_bytes()
メソッドを呼び出すと,
[REX-Prefix, opcode]
が返されます.
自作アセンブラでこのバイト列に対し imm32(0)
を追加して,
あとから相対オフセットを計算するといいと思います.
Fields of JMPLABEL
label: String
Jump Equal Label
このopcodeに対し to_bytes()
メソッドを呼び出すと,
[REX-Prefix, opcode1, opcode2]
が返されます.
自作アセンブラでこのバイト列に対し imm32(0)
を追加して,
あとから相対オフセットを計算するといいと思います.
Fields of JELABEL
label: String
スタティックリンクで使用される, 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
Move r8 to r/m8
Fields of MOVRM8R8
r8: GeneralPurposeRegister
rm8: Operand
Move r64 to r/m64
Fields of MOVRM64R64
r64: GeneralPurposeRegister
rm64: Operand
Move r/m64 to r64
Fields of MOVR64RM64
r64: GeneralPurposeRegister
rm64: Operand
Move imm32 to r/m64
Two's complement negate r/m64
Fields of NEGRM64
rm64: Operand
Pop top of stack into r64; increment stack pointer; Cannot encode 32-bit operand size.
Fields of POPR64
Push r/m64
Fields of PUSHRM64
rm64: Operand
Push r64,
Fields of PUSHR64
Push imm32
Fields of PUSHIMM32
imm: Immediate
Near Return
Subtract r/m64 from r64
Fields of SUBR64RM64
r64: GeneralPurposeRegister
rm64: Operand
Subtract r64 from r/m64
Fields of SUBRM64R64
rm64: Operand
r64: GeneralPurposeRegister
Subtract imm32 from r/m64
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]
fn cmp(&self, other: &Opcode) -> Ordering
[src]
#[must_use]fn max(self, other: Self) -> Self
1.21.0[src]
#[must_use]fn min(self, other: Self) -> Self
1.21.0[src]
#[must_use]fn clamp(self, min: Self, max: Self) -> Self
[src]
impl PartialEq<Opcode> for Opcode
[src]
impl PartialOrd<Opcode> for Opcode
[src]
fn partial_cmp(&self, other: &Opcode) -> Option<Ordering>
[src]
fn lt(&self, other: &Opcode) -> bool
[src]
fn le(&self, other: &Opcode) -> bool
[src]
fn gt(&self, other: &Opcode) -> bool
[src]
fn ge(&self, other: &Opcode) -> bool
[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]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
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, 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>,