MicroSEH is a tiny library that implements Structured Exception Handling (SEH) in Rust and can catch and handle hardware exceptions.
Hardware exceptions are a very powerful tool for specific use cases. One such use case is to detect and handle illegal instructions at runtime.
It turns out that implementing SEH in pure Rust has its own issues (as seen in this article from NAMAZSO)
This library uses a different, simpler approach, which is to use a C
stub that calls back into Rust, wrapping
the call in a __try __except
block.
Add this to your Cargo.toml
:
[dependencies]
microseh = "0.2"
Minimal Example: Dereference a null pointer without crashing the program, and return the handled exception.
fn guarded() -> Result<(), Box<dyn Error>> {
microseh::try_seh(|| unsafe {
std::ptr::read_volatile::<i32>(0 as _);
})?;
}
SEH is a Microsoft extension to the C language, so it's only available on Windows with MSVC.