Implementing SEH in Rust and why you shouldn't do it
a day ago
- SEH是Windows的异常处理模型;x64/ARM64使用基于表的版本。
- 在Rust中,SEH用于安全访问驱动程序的用户态内存以及处理可续异常。
- 通过LLVM实现SEH并不可行,因为Rust缺乏内联LLVM支持。
- 使用gas宏和__C_specific_handler的汇编方法可行,但需要仔细管理标签范围。
- Rust内联汇编可以复制SEH,但在SEH异常时资源清理(Drop)不会被自动调用。
- 使用/EHa的C++在SEH期间能正确析构对象;Rust缺乏这一点会导致资源泄漏。
- 最佳实践:在C++中使用/EHa实现SEH包装器,并从Rust调用它们。