注册自定义的异常处理函数
来源:互联网 发布:设计一门编程语言 编辑:程序博客网 时间:2024/05/22 23:56
2011-9-11
SetUnhandledExceptionFilter()函数来注册一个自己的未处理异常过滤函数,下面是一个code实例
/*
Demonstrates how to use SEH so that unhandled exception filter
can trap unhandled instructions.
*/
#include <windows.h>
#include <stdio.h>
LONG WINAPI MyUnFilter (struct _EXCEPTION_POINTERS *lpExceptionInfo);
void main (void)
{
LPBYTE lpBuff = NULL;
// 注册自己的异常处理函数
SetUnhandledExceptionFilter (MyUnFilter);
*lpBuff = 54;
}
// 异常处理函数,可以自己实现所需的功能
LONG WINAPI MyUnFilter (struct _EXCEPTION_POINTERS *lpExceptionInfo)
{
static int s_SigCount = 0;
DWORD dwExceptCode = lpExceptionInfo -> ExceptionRecord ->
ExceptionCode;
LONG lResult;
if (dwExceptCode == EXCEPTION_ACCESS_VIOLATION)
{
printf ("access violation caught by MyUnFilter\n");
++s_SigCount;
// test case to keep this from going on forever (since we're not
// fixing the AV)
if (s_SigCount < 5)
lResult = EXCEPTION_CONTINUE_EXECUTION;
else
lResult = EXCEPTION_EXECUTE_HANDLER;
}
else
lResult = EXCEPTION_CONTINUE_SEARCH;
return lResult;
}
暂时就先不考虑这个顶层过滤函数,从这个示例看,只能在进程内实现注册自己的异常处理函数,不清楚如何能够实现进程之间或是系统级实现注册自己的异常处理函数。当然可以通过修改注册表来实现定义自己使用的JIT(Just-In-Time Debugging,紧急调试)调试器,关于JIT调试器的配置信息在注册表:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AeDebug. 可以自己编写JIT程序,然后修改AeDbug键下的Debugger选项设置为:<路径>\OwnJIT.exe –p %ld –e %ld. 后面的参数UnhandledExceptionFilter为启动JIT而设置的。-p后的是发生错误的进程ID,-e后面的是事件的句柄,这些参数是通过UnhandledExceptionHandl传递过来的。
如果使用这种方式进行潜入或破坏的话,马上就会被发现,因为注册表被修改是一眼就能发现的。
- 注册自定义的异常处理函数
- 自定义的异常处理
- WCF的自定义异常处理
- springmvc的自定义异常处理
- 用户自定义的异常处理
- struts2的异常处理已经自定义异常
- 自定义异常类(SpringMVC的异常处理)
- 异常处理+异常+处理异常+自定义异常
- oracle的异常处理函数
- 构造函数的异常处理
- hibernate 注册自定义函数
- SparkSQL注册自定义函数
- 自定义异常处理的功能实现
- 自定义异常处理的功能实现
- 事务对于自定义异常的处理
- 自定义Application的未捕获异常处理
- 自定义SimpleMappingExceptionResolver实现个性化的异常处理
- 自定义dialog的异常情况处理
- POJ3169 Layout——差分约束系统+SPFA
- Ubuntu下安装、配置FTP服务
- HCI- First Things First
- Linux查看程序端口占用情况
- POJ1849 Two——贪心
- 注册自定义的异常处理函数
- UI Design Framework
- 第五代呼叫中心之SOA(六)
- 第五代呼叫中心之SOA(七)
- 中秋充电有感
- 第五代呼叫中心之SOA(八)
- 插件开发之:Common Navigator View (CNV) 通用导航试图
- How to use Common Navigator in RCP
- 第五代呼叫中心之SOA(九)