use serde::{Deserialize, Serialize};
use super::VmiOs;
use crate::{Va, VmiDriver, VmiError, VmiVa};
pub trait VmiOsImage<'a, Driver>: VmiVa + 'a
where
Driver: VmiDriver,
{
type Os: VmiOs<Driver = Driver, Image<'a> = Self>;
fn base_address(&self) -> Va;
fn architecture(&self) -> Result<Option<VmiOsImageArchitecture>, VmiError>;
fn exports(&self) -> Result<Vec<VmiOsImageSymbol>, VmiError>;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum VmiOsImageArchitecture {
X86,
Amd64,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct VmiOsImageSymbol {
pub name: String,
pub address: Va,
}