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