我目前在尝试使用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);
这个函数应该如何正确注册为异常处理程序?
谢谢任何建议!