注册自定义的异常处理函数

注册自定义的异常处理函数

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传递过来的。

如果使用这种方式进行潜入或破坏的话,马上就会被发现,因为注册表被修改是一眼就能发现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值