在MSDN中讲到过SetUnhandledExceptionFilter这个函数,它是用来设置一个进程的顶端异常处理。
我在程序中使用这个函数运行程序发现,这个函数的确起作用了。但是我在异常链表中为什么没有查找到它的地址呢??
>u UEF!handler
00401000 UEF!handler = <no type information>
>!teb
TEB at 7ffdf000 ExceptionList: 0012ffb0
>dd 0012ffb0 l2
0012ffb0 0012ffe0 004027a8
>dd 0012ffe0 l2
0012ffe0 ffffffff 7c839a88
>ln 004027a8
(004027a8) UEF!_except_handler3 | (00402865) UEF!_seh_longjmp_unwind
>ln 7c839a88
(7c839a88) kernel32!_except_handler3 | (7c839b6e) kernel32!_seh_longjmp_unwind
源代码如下。
#include "stdafx.h"
long WINAPI handler(EXCEPTION_POINTERS* lpExceptionInfo) //{ printf("Exception handled!\n");
return EXCEPTION_EXECUTE_HANDLER;}
int main(int argc,char* argv[]){ printf("Going to assign value to null pointer!\n");
SetUnhandledExceptionFilter(handler); *(int*)0 = 1;
return 0;}