winstrument 1.0.0

A tiny Rust library to set undocumented Windows process instrumentation callback
use ntapi::ntobapi::NtClose;
use winstrument::windows::CONTEXT;

fn instrumentation_callback(ctx: &mut CONTEXT) {
    let ssn = unsafe { (ctx.Rip as *mut u32).byte_sub(0x10).read_unaligned() };
    println!("Hello, world!");
    println!("SSN: {:x}", ssn);
    println!("RAX: {:x}", ctx.Rax);
    println!("RBX: {:x}", ctx.Rbx);
    println!("RCX: {:x}", ctx.Rcx);
    println!("RDX: {:x}", ctx.Rdx);
    println!("RSP: {:x}", ctx.Rsp);
    println!("RBP: {:x}", ctx.Rbp);
    println!("RSI: {:x}", ctx.Rsi);
    println!("RDI: {:x}", ctx.Rdi);
    println!("R8:  {:x}", ctx.R8);
    println!("R9:  {:x}", ctx.R9);
    println!("R10: {:x}", ctx.R10);
    println!("R11: {:x}", ctx.R11);
    println!("R12: {:x}", ctx.R12);
    println!("R13: {:x}", ctx.R13);
    println!("R14: {:x}", ctx.R14);
    println!("R15: {:x}", ctx.R15);
    println!("RIP: {:x}", ctx.Rip);
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    winstrument::init(instrumentation_callback)?;

    unsafe {
        _ = NtClose(0x1337 as _);
    }

    winstrument::free()?;
    Ok(())
}