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::arch::{CpuExceptionContext, GuestAddr};

pub const BARYL_ENLIGHTEN_ABI_VERSION: u32 = 6;
pub const BARYL_ENLIGHTEN_MIN_ABI_VERSION: u32 = 6;
pub const BARYL_OS_ANY: u32 = 0;
pub const BARYL_OS_WINDOWS: u32 = 1;
pub const BARYL_OS_LINUX: u32 = 2;
pub const BARYL_OS_MACOS: u32 = 3;
pub const BARYL_COMM_MAX: u32 = 16;
pub const BARYL_MODULE_MAX: u32 = 64;
pub const BARYL_OFFSET_NONE: i32 = -1;
pub const BARYL_CRASH_NONE: u32 = 0;
pub const BARYL_CRASH_ACCESS: u32 = 1;
pub const BARYL_CRASH_ILLEGAL: u32 = 2;
pub const BARYL_CRASH_ARITH: u32 = 3;
pub const BARYL_CRASH_PRIVILEGE: u32 = 4;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct EnlRef {
    pub ctx: *mut ::core::ffi::c_void,
    pub vtable: *const EnlightenVtable,
}
impl Default for EnlRef {
    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()
        }
    }
}
#[repr(C)]
#[derive(Debug, Default, Copy, Clone)]
pub struct Process {
    pub taskhead: u64,
    pub mm_va: u64,
    pub dtb: u64,
    pub pid: u64,
    pub ppid: u64,
    pub created_at: u64,
    pub name: [::core::ffi::c_char; 16usize],
}
#[repr(C)]
#[derive(Debug, Default, Copy, Clone)]
pub struct Thread {
    pub taskhead: u64,
    pub pid: u64,
    pub tid: u64,
    pub name: [::core::ffi::c_char; 16usize],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct Module {
    pub base_va: u64,
    pub size: u64,
    pub name: *mut ::core::ffi::c_char,
    pub file: *mut ::core::ffi::c_char,
}
impl Default for Module {
    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()
        }
    }
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct SymbolizedBlock {
    pub process: [::core::ffi::c_char; 16usize],
    pub module: [::core::ffi::c_char; 64usize],
    pub offset: u64,
}
impl Default for SymbolizedBlock {
    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()
        }
    }
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct GuestCrash {
    pub kind: u32,
    pub code: u32,
    pub fault_addr: u64,
    pub pc: u64,
    pub hash: u64,
    pub site: SymbolizedBlock,
}
impl Default for GuestCrash {
    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()
        }
    }
}
#[repr(C)]
#[derive(Debug, Default, Copy, Clone)]
pub struct EnlightenVtable {
    pub ready: ::core::option::Option<unsafe extern "C" fn(enl: EnlRef) -> ::core::ffi::c_int>,
    pub processes: ::core::option::Option<
        unsafe extern "C" fn(enl: EnlRef, out: *mut Process, cap: u64) -> u64,
    >,
    pub process_by_cr3: ::core::option::Option<
        unsafe extern "C" fn(enl: EnlRef, cr3: u64, out: *mut Process) -> ::core::ffi::c_int,
    >,
    pub process_by_name: ::core::option::Option<
        unsafe extern "C" fn(
            enl: EnlRef,
            name: *const ::core::ffi::c_char,
            out: *mut Process,
        ) -> ::core::ffi::c_int,
    >,
    pub threads: ::core::option::Option<
        unsafe extern "C" fn(enl: EnlRef, proc_: *const Process, out: *mut Thread, cap: u64) -> u64,
    >,
    pub current_thread: ::core::option::Option<
        unsafe extern "C" fn(enl: EnlRef, out: *mut Thread) -> ::core::ffi::c_int,
    >,
    pub kernel_modules: ::core::option::Option<
        unsafe extern "C" fn(enl: EnlRef, out: *mut Module, cap: u64) -> u64,
    >,
    pub user_modules: ::core::option::Option<
        unsafe extern "C" fn(enl: EnlRef, proc_: *const Process, out: *mut Module, cap: u64) -> u64,
    >,
    pub module_at: ::core::option::Option<
        unsafe extern "C" fn(
            enl: EnlRef,
            proc_: *const Process,
            va: u64,
            out: *mut Module,
            off: *mut u64,
        ) -> ::core::ffi::c_int,
    >,
    pub resolve_symbol: ::core::option::Option<
        unsafe extern "C" fn(
            enl: EnlRef,
            proc_: *const Process,
            spec: *const ::core::ffi::c_char,
            out: *mut u64,
        ) -> ::core::ffi::c_int,
    >,
    pub free_modules:
        ::core::option::Option<unsafe extern "C" fn(enl: EnlRef, mods: *mut Module, n: u64)>,
    pub symbolize: ::core::option::Option<
        unsafe extern "C" fn(
            enl: EnlRef,
            key: *const GuestAddr,
            out: *mut SymbolizedBlock,
        ) -> ::core::ffi::c_int,
    >,
    pub classify_fault: ::core::option::Option<
        unsafe extern "C" fn(
            enl: EnlRef,
            ctx: *const CpuExceptionContext,
            out: *mut GuestCrash,
        ) -> ::core::ffi::c_int,
    >,
    pub record_crash: ::core::option::Option<
        unsafe extern "C" fn(
            enl: EnlRef,
            crash: *const GuestCrash,
            dir: *const ::core::ffi::c_char,
        ) -> ::core::ffi::c_int,
    >,
}