本来昨天搞定了异常处理之后决定狂喜一天,谁知道今天用release编译了一下之后竟然挂了!资料找了半天发现是Windows XP之后提供的一项保护SAFESEH搞的鬼。于是需要将自己的异常处理函数添加进PE头的SAFESEH列表中。方法如下:
添加一个asm文件,写如下内容:
1 .386
2 .model flat
3
4 VL_JIT_X86_EXCEPTION_HANDLER proto
5 .safeseh VL_JIT_X86_EXCEPTION_HANDLER
6
7 end
然后在这个文件的属性里面添加命令行/safeseh,并将函数在代码中做成extern "C"就可以了:
1 /*******************************************************************************
2 Vczh Library++ 2.0
3 JIT::X86汇编异常处理器
4 开发者:陈梓瀚
5
6 接口:
7 类:
8 函数:
9 *******************************************************************************/
10
11 #ifndef VL_JIT_x86EXCEPTIONHANDLER
12
13 #include <windows.h>
14
15 extern "C"
16 {
17 EXCEPTION_DISPOSITION __cdecl VL_JIT_X86_EXCEPTION_HANDLER
18 (
19 struct _EXCEPTION_RECORD *ExceptionRecord,
20 void * EstablisherFrame,
21 struct _CONTEXT *ContextRecord,
22 void * DispatcherContext
23 );
24 }
25
26 #define VL_JIT_x86EXCEPTIONHANDLER
27 #endif
这两部合起来就成功将自己的异常处理函数标记成安全的了。
继续狂喜。
posted on 2009-03-04 08:40
陈梓瀚(vczh) 阅读(1882)
评论(2) 编辑 收藏 引用 所属分类:
JIT