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次下载

BSD-3-Clause

120KB
2.5K SLoC

VTIL-RustParser Travis docs.rs

使用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