6个版本
0.1.5 | 2023年11月24日 |
---|---|
0.1.4 | 2023年11月24日 |
#1071 in 编码
33 每月下载量
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