pub mod amd64;
use vmi_core::{Va, VmiError, VmiState, driver::VmiRead};
use crate::{ArchAdapter, WindowsOs, pe::PeImage};
#[derive(Debug, Clone)]
pub struct Frame {
pub instruction_pointer: Va,
pub stack_pointer: Va,
pub params: [u64; 4],
pub machine_frame: bool,
}
#[derive(Debug, Clone)]
pub enum Unwound {
Frame(Frame),
End,
MachineEnd,
}
pub trait Unwinder<Driver>
where
Driver: VmiRead,
Driver::Architecture: ArchAdapter<Driver>,
{
type Context;
fn unwind(
&self,
vmi: &VmiState<WindowsOs<Driver>>,
image_base: Va,
image: &impl PeImage,
context: &mut Self::Context,
) -> Result<Unwound, VmiError>;
}