Safe SEH is better than abstinence
parent
c0af678c5b
commit
9b44451682
|
@ -2,10 +2,12 @@
|
||||||
LINK_FLAGS = /nologo /DEBUG shell32.lib
|
LINK_FLAGS = /nologo /DEBUG shell32.lib
|
||||||
CL_FLAGS = /nologo /Zi /O2 /W3 /DFACTOR_DEBUG
|
CL_FLAGS = /nologo /Zi /O2 /W3 /DFACTOR_DEBUG
|
||||||
!ELSE
|
!ELSE
|
||||||
LINK_FLAGS = /nologo /safeseh:no shell32.lib
|
LINK_FLAGS = /nologo /safeseh shell32.lib
|
||||||
CL_FLAGS = /nologo /O2 /W3
|
CL_FLAGS = /nologo /O2 /W3
|
||||||
!ENDIF
|
!ENDIF
|
||||||
|
|
||||||
|
ML_FLAGS = /nologo /safeseh
|
||||||
|
|
||||||
EXE_OBJS = vm\main-windows-nt.obj vm\factor.res
|
EXE_OBJS = vm\main-windows-nt.obj vm\factor.res
|
||||||
|
|
||||||
DLL_OBJS = vm\os-windows-nt.obj \
|
DLL_OBJS = vm\os-windows-nt.obj \
|
||||||
|
@ -47,6 +49,7 @@ DLL_OBJS = vm\os-windows-nt.obj \
|
||||||
vm\profiler.obj \
|
vm\profiler.obj \
|
||||||
vm\quotations.obj \
|
vm\quotations.obj \
|
||||||
vm\run.obj \
|
vm\run.obj \
|
||||||
|
vm\safeseh.obj \
|
||||||
vm\strings.obj \
|
vm\strings.obj \
|
||||||
vm\to_tenured_collector.obj \
|
vm\to_tenured_collector.obj \
|
||||||
vm\tuples.obj \
|
vm\tuples.obj \
|
||||||
|
@ -60,6 +63,9 @@ DLL_OBJS = vm\os-windows-nt.obj \
|
||||||
.c.obj:
|
.c.obj:
|
||||||
cl $(CL_FLAGS) /Fo$@ /c $<
|
cl $(CL_FLAGS) /Fo$@ /c $<
|
||||||
|
|
||||||
|
.asm.obj:
|
||||||
|
ml $(ML_FLAGS) /Fo$@ /c $<
|
||||||
|
|
||||||
.rs.res:
|
.rs.res:
|
||||||
rc $<
|
rc $<
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ LONG factor_vm::exception_handler(PEXCEPTION_RECORD e, void *frame, PCONTEXT c,
|
||||||
return ExceptionContinueExecution;
|
return ExceptionContinueExecution;
|
||||||
}
|
}
|
||||||
|
|
||||||
LONG exception_handler(PEXCEPTION_RECORD e, void *frame, PCONTEXT c, void *dispatch)
|
extern "C" LONG exception_handler(PEXCEPTION_RECORD e, void *frame, PCONTEXT c, void *dispatch)
|
||||||
{
|
{
|
||||||
return current_vm()->exception_handler(e,frame,c,dispatch);
|
return current_vm()->exception_handler(e,frame,c,dispatch);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ typedef char symbol_char;
|
||||||
|
|
||||||
#define FACTOR_DLL NULL
|
#define FACTOR_DLL NULL
|
||||||
|
|
||||||
LONG exception_handler(PEXCEPTION_RECORD e, void *frame, PCONTEXT c, void *dispatch);
|
extern "C" LONG exception_handler(PEXCEPTION_RECORD e, void *frame, PCONTEXT c, void *dispatch);
|
||||||
|
|
||||||
// SSE traps raise these exception codes, which are defined in internal NT headers
|
// SSE traps raise these exception codes, which are defined in internal NT headers
|
||||||
// but not winbase.h
|
// but not winbase.h
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
.386
|
||||||
|
.model flat
|
||||||
|
exception_handler proto
|
||||||
|
.safeseh exception_handler
|
||||||
|
end
|
Loading…
Reference in New Issue