Crate zydis

source ·
Expand description

§Zydis Rust Bindings

Crates.io docs.rs MIT licensed

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
BindingsZydis
v0.0.4v2.0.2
v0.0.3v2.0.0-develop@e967510
v0.0.2v2.0.0-alpha2
v0.0.1v2.0.0-develop@4a79d57

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§

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§

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§