Skip to content

mhandb/microseh

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MicroSEH 🔴


MicroSEH is a tiny library that implements Structured Exception Handling (SEH) in Rust and can catch and handle hardware exceptions.

Why?

Hardware exceptions are a very powerful tool for specific use cases. One such use case is to detect and handle illegal instructions at runtime.

Implementation

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.

Usage

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 _);
    })?;
}

Portability

SEH is a Microsoft extension to the C language, so it's only available on Windows with MSVC.

About

Structured Exception Handling (SEH) for Rust

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Rust 89.5%
  • C 10.5%