SEH

  1:基础

1:当一个线程出错时,操作系统会回调一个用户定义的回调函数

//操作系统回调的函数_except_handler
EXCEPTION_DISPOSITION __cdecl _except_handler( 
		struct _EXCEPTION_RECORD *ExceptionRecord,	
		void * EstablisherFrame,
		struct _CONTEXT *ContextRecord,				//上下文寄存器信息
		void * DispatcherContext); 

typedef struct _EXCEPTION_RECORD {
	DWORD ExceptionCode;							//异常编码
	DWORD ExceptionFlags;
	struct _EXCEPTION_RECORD *ExceptionRecord;
	PVOID ExceptionAddress;							//异常出错地址
	DWORD NumberParameters;							
	DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD; 

用户在回调函数中看到上下文信息,异常编码,出错地址,便能做相应的处理
2:此回调函数指针被放在一个EXCEPTION_REGISTRATION结构中,而这个结构指针被放在TEB前4个字节中(SEH是基于线程的),在Win32平台上,FS寄存器总指向当前TEB,所以,FS:[0]就是这个EXCEPTION_REGISTRATION结构的指针



http://blog.csdn.net/masefee/article/details/4817730

http://blog.csdn.net/ykdsg/article/details/6308083

http://gmd20.blog.163.com/blog/static/16843923201211352411279/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值