VTILVTIL

Architecture Utility APIs

VTIL exposes architecture-focused helpers through <vtil/amd64>,<vtil/x86>, and <vtil/arm64>. These wrappers include assembler/disassembler entry points and register mapping details used by lifters, debuggers, and custom tooling.

Public include surface
#include <vtil/amd64>
#include <vtil/x86>
#include <vtil/arm64>

In VTIL-Core these wrappers are defined in:

  • VTIL-Common/includes/vtil/amd64
  • VTIL-Common/includes/vtil/x86
  • VTIL-Common/includes/vtil/arm64
Assembler and disassembler
// amd64
std::vector<uint8_t> bytes = vtil::amd64::assemble("mov rax, rbx", 0x140001000);
auto insns = vtil::amd64::disasm(bytes.data(), 0x140001000, bytes.size());

// x86
std::vector<uint8_t> x86_bytes = vtil::x86::assemble("mov eax, ebx", 0x401000);
auto x86_insns = vtil::x86::disasm(x86_bytes.data(), 0x401000, x86_bytes.size());

// arm64
std::vector<uint8_t> arm_bytes = vtil::arm64::assemble("mov x0, x1", 0x1000);
auto arm_insns = vtil::arm64::disasm(arm_bytes.data(), 0x1000, arm_bytes.size());

Each disassembler returns instruction objects with copied metadata (mnemonic, operands, groups/register usage, and encoding details), suitable for analysis or diagnostics.

Register mapping helpers

Register detail tables are exposed through registers maps and helpers such as resolve_mapping, extend, andremap from register_map.

// Example: normalize sub-register to base register.
auto base = vtil::amd64::registers.extend(X86_REG_EAX);   // -> X86_REG_RAX

// Example: inspect mapping information.
auto map = vtil::x86::registers.resolve_mapping(X86_REG_AL);
// map.base_register, map.offset, map.size

// Example: remap base register to a narrower view.
auto al = vtil::amd64::registers.remap(X86_REG_RAX, 0, 1); // -> X86_REG_AL
Integration with register_desc

VTIL architecture register wrappers are consumed byVTIL-Architecture/arch/register_desc.hpp viaregister_cast<x86_reg> and register_cast<arm64_reg>, which bridge Capstone/Keystone register enums into VTIL register descriptors.

Header Files