10个版本 (6个重大更新)
0.7.0 | 2021年5月21日 |
---|---|
0.6.1 | 2021年5月10日 |
0.5.0 | 2021年5月7日 |
0.4.0 | 2021年5月5日 |
0.1.1 | 2020年10月11日 |
#2587 in 解析实现
每月22次下载
120KB
2.5K SLoC
VTIL-RustParser
使用Rust编写的VTIL文件就地解析器。
参考
lib.rs
:
VTIL-RustParser
Rust中读写VTIL文件。
您可以在GitHub主页的此处了解更多关于VTIL的信息。
示例
以下是一个简单示例,加载一个VTIL例程并读取一些基本数据
use vtil_parser::{Routine, ArchitectureIdentifier};
let routine = Routine::from_path("resources/big.vtil")?;
assert_eq!(routine.header.arch_id, ArchitectureIdentifier::Amd64);
以下是一个更复杂的示例,遍历IL指令
use vtil_parser::{Routine, Op, Operand, RegisterDesc, ImmediateDesc, RegisterFlags};
let routine = Routine::from_path("resources/big.vtil")?;
for (_, basic_block) in routine.explored_blocks.iter().take(1) {
for instr in basic_block.instructions.iter().take(1) {
match &instr.op {
Op::Ldd(_, Operand::RegisterDesc(op2), Operand::ImmediateDesc(op3)) => {
assert!(op2.flags.contains(RegisterFlags::PHYSICAL));
assert!(op3.i64() == 0);
}
_ => assert!(false)
}
assert_eq!(instr.vip.0, 0x9b833);
}
}
依赖关系
~1.4–2.3MB
~41K SLoC