[][src]Crate vtil_parser

VTIL-RustParser

An in-place parser for VTIL files written in Rust.

You can learn more about VTIL here on the main GitHub page.

Examples

For a simple example of loading a VTIL file and reading out some basic data:

use vtil_parser::{VTILReader, ArchitectureIdentifier};

let routine = VTILReader::from_path("resources/big.vtil")?;
assert_eq!(routine.header().arch_id(), ArchitectureIdentifier::Amd64);

For a more complex example, iterating over IL instructions:

use vtil_parser::{VTILReader, Operand, RegisterFlags};

let routine = VTILReader::from_path("resources/big.vtil")?;

for basic_block in routine.explored_blocks().iter().take(1) {
    for instr in basic_block.instructions().iter().take(1) {
        assert_eq!(instr.name(), "ldd");
        assert_eq!(instr.operands().len(), 3);

        if let Operand::Reg(reg) = &instr.operands()[1] {
            assert!(reg.flags().contains(RegisterFlags::PHYSICAL));
        } else { unreachable!() }

        if let Operand::Imm(imm) = &instr.operands()[2] {
            assert_eq!(imm.i64(), 0);
        } else { unreachable!() }

        assert_eq!(instr.vip(), 0x9b833);
    }
}

Structs

BasicBlock

Basic block containing a linear sequence of VTIL instructions

Header

Header containing metadata regarding the VTIL container

ImmediateDesc

Describes a VTIL immediate value in an operand

Instruction

VTIL instruction and associated metadata

RegisterDesc

Describes a VTIL register in an operand

RegisterFlags

Flags describing register properties

RoutineConvention

Routine calling convention information and associated metadata

VTIL

VTIL container

VTILReader

Reader for VTIL containers

Vip

VTIL instruction pointer

Enums

ArchitectureIdentifier

Architecture for IL inside of VTIL routines

Error

Custom Error for VTIL parsing

Operand

VTIL instruction operand

Type Definitions

SubroutineConvention

Alias for RoutineConvention for consistent naming