Expand description
§Zydis Rust Bindings
Rust bindings for Zydis, a fast and lightweight x86/x86-64 disassembler and code generator library.
[dependencies]
zydis = "4.1.1"
§Example
use zydis::*;
#[rustfmt::skip]
static CODE: &'static [u8] = &[
0x51, 0x8D, 0x45, 0xFF, 0x50, 0xFF, 0x75, 0x0C, 0xFF, 0x75, 0x08,
0xFF, 0x15, 0xA0, 0xA5, 0x48, 0x76, 0x85, 0xC0, 0x0F, 0x88, 0xFC,
0xDA, 0x02, 0x00,
];
fn main() -> zydis::Result {
let fmt = Formatter::intel();
let dec = Decoder::new64();
// 0 is the address for our code.
for insn_info in dec.decode_all::<VisibleOperands>(CODE, 0) {
let (ip, _raw_bytes, insn) = insn_info?;
// We use Some(ip) here since we want absolute addressing based on the given
// instruction pointer. If we wanted relative addressing, we'd use `None` instead.
println!("0x{:016X} {}", ip, fmt.format(Some(ip), &insn)?);
}
Ok(())
}
§Output
0x0000000000000000 push rcx
0x0000000000000001 lea eax, [rbp-0x01]
0x0000000000000004 push rax
0x0000000000000005 push [rbp+0x0C]
0x0000000000000008 push [rbp+0x08]
0x000000000000000B call [0x000000007648A5B1]
0x0000000000000011 test eax, eax
0x0000000000000013 js 0x000000000002DB15
§Version Map
Since version 3.0.0 the binding’s major and minor versions are tethered to the Zydis version. The binding’s patch version is independent of the Zydis version and can be bumped for binding-only changes. Every cargo crate release has a corresponding git tag.
Version map for older releases
Bindings | Zydis |
---|---|
v0.0.4 | v2.0.2 |
v0.0.3 | v2.0.0-develop@e967510 |
v0.0.2 | v2.0.0-alpha2 |
v0.0.1 | v2.0.0-develop@4a79d57 |
§Navigation
Modules§
- Provides the types, enums, constants and functions of the raw, unwrapped C library.
Macros§
- Macro for conveniently creating encoder requests (32-bit variant).
- Macro for conveniently creating encoder requests (64-bit variant).
- Macro for creating memory operands.
Structs§
- Identifies a CPU flag.
- Decodes raw instruction bytes into a machine-readable struct.
- Describes an operand in an
EncoderRequest
. - Describes an instruction to be encoded.
- Formats decoded instructions to human-readable text.
- Identifies an FPU flag.
- Basic information about an instruction.
- Attributes of an instruction.
- Iterator decoding instructions in a buffer.
- Don’t decode or store any operands.
- Describes how an operand is accessed.
- Decode and store operands in a static array buffer.
- Attributes of an operand.
- A convenience typed when using the
format.*
ortokenize.*
functions. - The type of a formatter token.
Enums§
- Defines possible values for address size hints. See
ZydisEncoderRequest
for more information about address size hints. - Defines the
ZydisBranchType
enum. - Defines encodable physical/effective sizes of relative immediate operands. See
ZydisEncoderRequest.branch_width
for more details. - Defines the
ZydisBroadcastMode
enum. - Defines the
ZydisConversionMode
enum. - Defines the
ZydisDecoderMode
enum. - Enum of all decorator types.
- Defines the
ZydisElementType
enum. - Defines possible physical instruction encodings as bit flags, so multiple acceptable encodings can be specified simultaneously.
- Defines the
ZydisExceptionClass
enum. - Defines the
ZydisFeature
enum. - Enum selecting a formatter function to be replaced with hooks.
- State of a formatter setting knob.
- Enum selecting the syntax to format the disassembly in.
- Defines the
ZydisISAExt
enum. - Defines the
ZydisISASet
enum. - Defines the
ZydisInstructionCategory
enum. - Defines the
ZydisInstructionEncoding
enum. - Defines the
ZydisInstructionSegment
struct. - Defines the
ZydisMachineMode
enum. - Defines the
ZydisMaskMode
enum. - Defines the
ZydisMemoryOperandType
enum. - Defines the
ZydisMnemonic
enum. - Enum defining different mantissae to be used during formatting.
- Defines the
ZydisOpcodeMap
enum. - Defines the
ZydisOperandEncoding
enum. - Defines possible values for operand size hints. See
ZydisEncoderRequest
for more information about operand size hints. - Defines the
ZydisOperandType
enum. - Defines the
ZydisOperandVisibility
enum. - Enum definining magic values that receive special treatment when used as padding properties of the formatter.
- Defines the
ZydisPrefixType
enum. - Defines the
ZydisRegister
enum. - Defines the
ZydisRegisterClass
enum. - Defines the
ZydisRegisterKind
enum. - Defines the
ZydisRoundingMode
enum. - Enum defining the signeness of integers to be used during formatting.
- Defines the
ZydisStackWidth
enum. - Status code indicating either success or failure.
- Defines the
ZydisSwizzleMode
enum. - We wrap this in a nicer rust enum
FormatterProperty
already, use that instead.
Constants§
- Combination of all user-encodable prefixes.
- Maximum number of encoder operands.
- Maximum length of an instruction in bytes.
- Maximum number of operands (visible and hidden).
- Maximum number of visible operands.
- The base for user defined tokens.
Traits§
- Defines storage and decoding behavior for operands.
Functions§
- Returns the version of the zydis C library as a quadruple
(major, minor, patch, build)
.
Type Aliases§
- Decode and store all (both visible and implicit) operands.
- Convenience alias for an instruction with full operand information.
- A convenience alias for a Result, holding either a value or a status.
- Decode and store visible operands.