6个版本

0.1.5 2023年11月24日
0.1.4 2023年11月24日

#1071 in 编码

33 每月下载量

MIT 许可证

76KB
2.5K SLoC

rydis

这是一个允许以非常方便和用户友好的方式对x86指令进行编码、解码和操作的crate。

它底层使用Zydis库,但提供了用户友好的包装来简化Zydis接口的使用。

示例

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)?;

依赖项

~16MB
~134K SLoC