Expand description
this is a crate which allows encoding, decoding and working with x86 instructions in a very convenient and user-friendly way.
it uses the Zydis
library under the hood, but provides user-friendly wrappers around Zydis
’ interfaces to make it
easier to work with.
Example
let state = rydis::RydisState::new(MachineMode::Long64, StackWidth::Width64)?;
// encode an instruction
let encoded = state.encode(Instruction {
prefixes: Prefixes::empty(),
mnemonic: Mnemonic::XCHG,
operands: [Operand::Reg(Register::RAX), Operand::Reg(Register::RBX)]
.into_iter()
.collect(),
})?;
// decode it
let decoded_instruction = state.decode_one(encoded.as_slice())?;
// modify it
let mut modified_instruction = decoded_instruction.to_instruction();
modified_instruction.operands[1] = Operand::Mem(MemOperand {
base: Some(Register::RBP),
index: None,
displacement: 0x1234,
size: decoded_instruction.operand_width,
segment_register_override: None,
});
// format it
println!(
"modified insn: {}",
modified_instruction.format(&state, FormatStyle::Intel, Some(0x123400))?
);
// re-encode the modified instruction
let re_encoded = state.encode(modified_instruction)?;
Structs
- an iterator which decodes instructions from a buffer.
- information about a decoded instruction.
- information about a decoded instruction using the iterator decoder.
- information about a decoded operand.
- an instruction.
- a memory operand, for example
[rbp+2*rsi+0x35]
. - the index of a memory operand, for example the
2*rsi
part in[rbp+2*rsi+0x35]
. - the actions that an operand is used for by an instruction.
- the prefixes of an instruction.
- A pointer operand, for example
0x10:0x1234
. - a structure which encapsulates information required for encoding/decoding instructions.
Enums
- the error type of this crate.
- the style to use when formatting an instruction
- the machine mode to decode instructions according to.
- an instruction mnemonic.
- an operand.
- a register.
- a segment register.
- the stack width to decode instructions according to.
- an error returned from the zydis library.
Constants
- the maximum length of a formatted instruction string, in bytes.
- the maximum length of an instruction, in bytes.
- the maximum amount of operands of a single instruction.
Type Aliases
- information about the flags accessed by an instruction.
- a mask of the flags accessed in some way by some instruction.
- an array of operands of a decoded instruction.
- a buffer for an encoded instruction.
- a formatted instruction string.
- an array of operands of an instruction.
- the result type of this crate.