baryl 0.0.2

Public SDK for Baryl, a full-system emulation and introspection engine
/* automatically generated by rust-bindgen 0.72.1 */

use crate::abi::ProgressFn;

pub const BARYL_ARCH_ABI_VERSION: u32 = 8;
pub const BARYL_ARCH_MIN_ABI_VERSION: u32 = 8;
pub const BARYL_ARCH_X86_64: u32 = 1;
pub const BARYL_ARCH_VM_DESCRIPTOR: u32 = 1;
pub const X64_EXCP_DE: u32 = 0;
pub const X64_EXCP_DB: u32 = 1;
pub const X64_EXCP_NMI: u32 = 2;
pub const X64_EXCP_BP: u32 = 3;
pub const X64_EXCP_OF: u32 = 4;
pub const X64_EXCP_BR: u32 = 5;
pub const X64_EXCP_UD: u32 = 6;
pub const X64_EXCP_NM: u32 = 7;
pub const X64_EXCP_DF: u32 = 8;
pub const X64_EXCP_TS: u32 = 10;
pub const X64_EXCP_NP: u32 = 11;
pub const X64_EXCP_SS: u32 = 12;
pub const X64_EXCP_GP: u32 = 13;
pub const X64_EXCP_PF: u32 = 14;
pub const X64_EXCP_MF: u32 = 16;
pub const X64_EXCP_AC: u32 = 17;
pub const X64_EXCP_MC: u32 = 18;
pub const X64_EXCP_XF: u32 = 19;
pub const X64_PF_ERR_PRESENT: u32 = 1;
pub const X64_PF_ERR_WRITE: u32 = 2;
pub const X64_PF_ERR_USER: u32 = 4;
pub const X64_PF_ERR_RESERVED: u32 = 8;
pub const X64_PF_ERR_INSN_FETCH: u32 = 16;
pub const BARYL_BLOCK_HASH_C1: i64 = -4658895280553007687;
pub const BARYL_BLOCK_HASH_C2: i64 = -7723592293110705685;
pub const BARYL_BLOCK_HASH_SHIFT1: u32 = 30;
pub const BARYL_BLOCK_HASH_SHIFT2: u32 = 27;
pub const BARYL_X64_PTE_PRESENT: u32 = 1;
pub const BARYL_X64_PTE_WRITE: u32 = 2;
pub const BARYL_X64_PTE_USER: u32 = 4;
pub const BARYL_X64_PTE_EXEC: u32 = 8;
pub const BARYL_ARCH_VTABLE: u32 = 1;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct ArchRef {
    pub ctx: *mut ::core::ffi::c_void,
    pub vtable: *const ArchVtable,
}
impl Default for ArchRef {
    fn default() -> Self {
        let mut s = ::core::mem::MaybeUninit::<Self>::uninit();
        unsafe {
            ::core::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
            s.assume_init()
        }
    }
}
pub type CpuExcFn = ::core::option::Option<
    unsafe extern "C" fn(
        obj: *mut ::core::ffi::c_void,
        ctl: *mut ::core::ffi::c_void,
        ctx: *const CpuExceptionContext,
    ),
>;
pub type AddrSpaceFn = ::core::option::Option<
    unsafe extern "C" fn(obj: *mut ::core::ffi::c_void, ctl: *mut ::core::ffi::c_void, root: u64),
>;
pub type MappingFn = ::core::option::Option<
    unsafe extern "C" fn(
        obj: *mut ::core::ffi::c_void,
        addr: *const GuestAddr,
    ) -> ::core::ffi::c_int,
>;
#[repr(C)]
#[derive(Debug, Default, Copy, Clone)]
pub struct ArchCallbacks {
    pub on_cpu_exception: CpuExcFn,
    pub on_address_space_change: AddrSpaceFn,
}
#[repr(u32)]
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum X64GPR {
    Rax = 0,
    Rcx = 1,
    Rdx = 2,
    Rbx = 3,
    Rsp = 4,
    Rbp = 5,
    Rsi = 6,
    Rdi = 7,
    R8 = 8,
    R9 = 9,
    R10 = 10,
    R11 = 11,
    R12 = 12,
    R13 = 13,
    R14 = 14,
    R15 = 15,
}
pub type X64Gpr = [u64; 16usize];
#[repr(u32)]
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum X64Seg {
    Es = 0,
    Cs = 1,
    Ss = 2,
    Ds = 3,
    Fs = 4,
    Gs = 5,
}
#[repr(C)]
#[derive(Debug, Default, Copy, Clone)]
pub struct X64Segment {
    pub base: u64,
    pub limit: u32,
    pub flags: u32,
    pub selector: u32,
    pub _reserved: u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct RegLayout {
    pub version: u32,
    pub gpr: *mut X64Gpr,
    pub rip: *mut u64,
    pub rflags: *mut u64,
    pub seg: *mut X64Segment,
    pub ldtr: *mut X64Segment,
    pub tr: *mut X64Segment,
    pub gdtr: *mut X64Segment,
    pub idtr: *mut X64Segment,
    pub cr: *mut u64,
    pub dr: *mut u64,
    pub efer: *mut u64,
    pub lstar: *mut u64,
    pub kernel_gs_base: *mut u64,
}
impl Default for RegLayout {
    fn default() -> Self {
        let mut s = ::core::mem::MaybeUninit::<Self>::uninit();
        unsafe {
            ::core::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
            s.assume_init()
        }
    }
}
pub type RegLayoutX64 = RegLayout;
#[repr(C)]
#[derive(Debug, Default, Copy, Clone)]
pub struct CpuExceptionContext {
    pub vector: u32,
    pub error: u32,
}
#[repr(C)]
#[derive(Debug, Default, Copy, Clone, PartialEq, Eq, Hash, zerocopy :: FromZeros)]
pub struct GuestAddr {
    pub va: u64,
    pub cr3: u64,
}
pub type GuestAddrX64 = GuestAddr;
#[repr(C)]
#[derive(Debug, Default, Copy, Clone)]
pub struct MemAttr {
    pub perms: u32,
    pub _reserved: u32,
}
pub type MemAttrX64 = MemAttr;
#[repr(C)]
#[derive(Debug, Default, Copy, Clone)]
pub struct ArchVtable {
    pub translate: ::core::option::Option<
        unsafe extern "C" fn(
            arch: ArchRef,
            va: u64,
            cr3: u64,
            phys_out: *mut u64,
            attr_out: *mut MemAttr,
        ) -> ::core::ffi::c_int,
    >,
    pub read_virt: ::core::option::Option<
        unsafe extern "C" fn(
            arch: ArchRef,
            va: u64,
            cr3: u64,
            buf: *mut u8,
            len: u64,
        ) -> ::core::ffi::c_int,
    >,
    pub write_virt: ::core::option::Option<
        unsafe extern "C" fn(
            arch: ArchRef,
            va: u64,
            cr3: u64,
            buf: *const u8,
            len: u64,
        ) -> ::core::ffi::c_int,
    >,
    pub tlb_invalidate: ::core::option::Option<unsafe extern "C" fn(arch: ArchRef)>,
    pub virt_scan_for_pattern: ::core::option::Option<
        unsafe extern "C" fn(
            arch: ArchRef,
            cr3: u64,
            start: u64,
            end: u64,
            stride: u64,
            pat: *const u8,
            pat_len: u64,
            obj: *mut ::core::ffi::c_void,
            progress: ProgressFn,
        ) -> u64,
    >,
    pub virt_scan_for_u64: ::core::option::Option<
        unsafe extern "C" fn(
            arch: ArchRef,
            cr3: u64,
            start: u64,
            end: u64,
            stride: u64,
            target: u64,
            obj: *mut ::core::ffi::c_void,
            progress: ProgressFn,
        ) -> u64,
    >,
    pub virt_scan_for_u32: ::core::option::Option<
        unsafe extern "C" fn(
            arch: ArchRef,
            cr3: u64,
            start: u64,
            end: u64,
            stride: u64,
            target: u32,
            obj: *mut ::core::ffi::c_void,
            progress: ProgressFn,
        ) -> u64,
    >,
    pub virt_walk_mappings: ::core::option::Option<
        unsafe extern "C" fn(
            arch: ArchRef,
            cr3: u64,
            pa: u64,
            obj: *mut ::core::ffi::c_void,
            fn_: MappingFn,
            progress: ProgressFn,
        ) -> u64,
    >,
}
pub type ArchVtableX64 = ArchVtable;