本來昨天搞定了異常處理之后決定狂喜一天,誰知道今天用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) 閱讀(1896)
評論(2) 編輯 收藏 引用 所屬分類:
JIT