我目前正在尝试用 C++ 创建一个编译器,它在运行时生成机器代码。但是,我目前正在尝试启用安全异常处理(使用 /SAFESEH 编译)。我的自定义异常处理程序在调试模式下工作,但是当我在发布模式下运行相同的代码时,我的进程刚刚终止。
我很确定问题是我无法注册我的自定义异常处理程序,因为当我使用 /SAFESEH:NO 编译我的代码时,即使在发布模式下也一切正常。
我的自定义异常处理程序是用我的其他 C++ 代码编写的,我尝试通过将 .asm 文件添加到我的项目中,将其注册为异常处理程序,其内容如下:
.386
.model flat
_MyExceptionHandler@16 proto
.safeseh _MyExceptionHandler@16
end
如此处所述。然后使用 /safeseh 选项(以及其他选项)组装 asm 文件。
我的处理函数目前有以下声明:
extern "C" EXCEPTION_DISPOSITION __stdcall MyExceptionHandler(struct
_EXCEPTION_RECORD *ExceptionRecord, void * EstablisherFrame, struct
_CONTEXT *ContextRecord, void * DispatcherContext);
将此函数注册为异常处理程序的正确方法是什么?
感谢您的任何建议!