Rust language bindings for the Zydis library, a fast and lightweight x86/x86-64 disassembler.
Please make sure your system meets all requirements to be able to use bindgen
. Then, just invoke:
cargo build
Or, probably more common, add a dependency to your Cargo.toml
:
toml
[dependencies]
zydis = "0.0.3"
```rust extern crate zydis; use zydis::gen::; use zydis::;
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, 0x00u8, ];
fn main() { let formatter = Formatter::new(ZYDISFORMATTERSTYLEINTEL).unwrap(); let decoder = Decoder::new(ZYDISMACHINEMODELONG64, ZYDISADDRESSWIDTH64).unwrap();
for (mut instruction, ip) in decoder.instruction_iterator(CODE, 0) {
let insn = formatter.format_instruction(&mut instruction, 200, None);
println!("0x{:016X} {}", ip, insn.unwrap());
}
} ```
0x0000000000000001 push rcx
0x0000000000000004 lea eax, [rbp-0x01]
0x0000000000000005 push rax
0x0000000000000008 push qword ptr [rbp+0x0C]
0x000000000000000B push qword ptr [rbp+0x08]
0x0000000000000011 call [0x000000007648A5B1]
0x0000000000000013 test eax, eax
0x0000000000000019 js 0x000000000002DB15
| Bindings | Zydis | | -------- | -------- | | v0.0.3 | v2.0.0-develop@e967510 | | v0.0.2 | v2.0.0-alpha2 | | v0.0.1 | v2.0.0-develop@4a79d57 |