SkillAgentSearch skills...

Microseh

Structured Exception Handling (SEH) for Rust

Install / Use

/learn @sonodima/Microseh
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

<h1 align="center">MicroSEH 🔴</h1> <div align="center"> <a href="https://crates.io/crates/microseh"><img src="https://img.shields.io/crates/v/microseh.svg?color=edae00&style=for-the-badge"/></a> <a href="https://github.com/sonodima/microseh/actions/workflows/ci.yml"> <img src="https://img.shields.io/github/actions/workflow/status/sonodima/microseh/ci.yml?style=for-the-badge&label=CI%20Status"/> </a> <a href="https://crates.io/crates/microseh"><img src="https://img.shields.io/crates/d/microseh?color=pink&style=for-the-badge"/></a> <img src="https://img.shields.io/badge/license-MIT-blue.svg?style=for-the-badge"/> </div> <br>

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 = "1.1"

Minimal Example: Dereference an invalid pointer without crashing the program, and return the handled exception.

fn guarded() -> Result<(), microseh::Exception> {
    microseh::try_seh(|| unsafe {
        // Read from an unallocated memory region. (we create an aligned not-null
        // pointer to skip the checks in read_volatile that would raise a panic)
        core::ptr::read_volatile(core::mem::align_of::<i32>() as *const i32);
    })
}

Accessing Exception Data: You can obtain the address and register dump of an exception.

if let Err(ex) = microseh::try_seh(|| unsafe {
    // *questionable life choices go here*
}) {
    println!("address: {:x}", ex.address());
    println!("rax: {:x}", ex.registers().rax());
}

For additional examples and practical use cases, please visit the examples directory!

Portability

SEH is an extension to the C language developed by Microsoft, and it is exclusively available on Windows when using Microsoft Visual C++ (MSVC).

MicroSEH is compatible with and has been tested on Windows platforms with the following architectures: x86, x86_64 and aarch64.

When building for other unsupported platforms, the library will disable exception handling and panic when try_seh is called.

Usage on Kernel Drivers

This library can compile to no_std and supports running in Windows Kernel Drivers using Microsoft's windows-drivers-rs project.

Cross-Compiling

Cross-compiling for Windows is possible with full support for SEH using the cargo-xwin project.

License

This work is released under the MIT license. A copy of the license is provided in the LICENSE file.

View on GitHub
GitHub Stars74
CategoryDevelopment
Updated21d ago
Forks7

Languages

Rust

Security Score

100/100

Audited on Mar 17, 2026

No findings