`
wodamazi
  • 浏览: 1416563 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
注册自定义的异常处理函数

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

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

分享到:
评论

相关推荐

    exam01_register_login.ipynb

    a) 用户输入功能编码时验证是否合法(异常处理) b) 实现注册功能、登录功能以及退出功能选择 2. 自定义注册函数register(……),返回bool值 a) 控制台接受用户的输入的账号和两次密码(密码不显) b) 对数据进行...

    qt和python交互Demo(含异常处理)

    2 PyRegistBaseCallBackDll,注册回调函数的动态库 3 PyRegistCommonCallBackDll,具体的回调函数,动态库 4 支持参数传入,返回值输出 5 支持自定义搜索路径 6 增加了一个文件编码检测的示例 7 增加了python.exe对...

    JavaScript详解(第2版)

     13.6.4 表单和onFocus、onBlur事件处理函数   13.6.5 表单和onChange事件处理函数   13.6.6 表单和onSubmit事件处理函数   13.6.7 HTML事件处理函数和JavaScript事件方法   13.6.8 onError事件   ...

    Visual C++ 2005入门经典.part08.rar (整理并添加所有书签)

    6.3.3 MFC中的异常处理 6.4 处理内存分配错误 6.5 函数重载 6.5.1 函数重载的概念 6.5.2 何时重载函数 6.6 函数模板 6.7 使用函数的示例 6.7.1 实现计算器 6.7.2 从字符串中删除空格 6.7.3 计算表达式的值 6.7.4 ...

    Visual C++ 2005入门经典.part04.rar (整理并添加所有书签)

    6.3.3 MFC中的异常处理 6.4 处理内存分配错误 6.5 函数重载 6.5.1 函数重载的概念 6.5.2 何时重载函数 6.6 函数模板 6.7 使用函数的示例 6.7.1 实现计算器 6.7.2 从字符串中删除空格 6.7.3 计算表达式的值 6.7.4 ...

    Visual C++ 2005入门经典.part07.rar (整理并添加所有书签)

    6.3.3 MFC中的异常处理 6.4 处理内存分配错误 6.5 函数重载 6.5.1 函数重载的概念 6.5.2 何时重载函数 6.6 函数模板 6.7 使用函数的示例 6.7.1 实现计算器 6.7.2 从字符串中删除空格 6.7.3 计算表达式的值 6.7.4 ...

    Visual C++ 2005入门经典.part09.rar (整理并添加所有书签)

    6.3.3 MFC中的异常处理 6.4 处理内存分配错误 6.5 函数重载 6.5.1 函数重载的概念 6.5.2 何时重载函数 6.6 函数模板 6.7 使用函数的示例 6.7.1 实现计算器 6.7.2 从字符串中删除空格 6.7.3 计算表达式的值 6.7.4 ...

    Visual C++ 2005入门经典.part06.rar (整理并添加所有书签)

    6.3.3 MFC中的异常处理 6.4 处理内存分配错误 6.5 函数重载 6.5.1 函数重载的概念 6.5.2 何时重载函数 6.6 函数模板 6.7 使用函数的示例 6.7.1 实现计算器 6.7.2 从字符串中删除空格 6.7.3 计算表达式的值 6.7.4 ...

    Visual C++ 2005入门经典.part05.rar (整理并添加所有书签)

    6.3.3 MFC中的异常处理 6.4 处理内存分配错误 6.5 函数重载 6.5.1 函数重载的概念 6.5.2 何时重载函数 6.6 函数模板 6.7 使用函数的示例 6.7.1 实现计算器 6.7.2 从字符串中删除空格 6.7.3 计算表达式的值 6.7.4 ...

    brew中文版手册,好东西哦!

    使用函数调用时函数表现的任何异常行为。 除非存在副作用,否则不显示该标题。 版本 引入此函数的版本。 另请参阅 相关函数或数据结构的交叉参考。 A 注意: 仅当参数表包含混合类型时,参数列表才显示 ...

    python入门到高级全栈工程师培训 第3期 附课件代码

    02 什么是异常处理及异常处理的两种方式对比 03 多分支与万能异常 04 异常处理的其他内容 05 什么时候用异常处理 06 什么是socket 07 套接字发展及分类 08 基于tcp协议的套接字编程 09 socket底层工作原理解释 10 ...

    Windows编程技术

    3.2.5 字符串处理函数 39 3.3 集合类 39 3.3.1 列表类CList 40 3.3.2 数组类CArray 43 3.3.3 映射类CMap 45 3.4 时间处理类 47 3.4.1 COleDateTime类 47 3.4.2 COleDateTimeSpan类 51 3.5 异常处理类 52 3.5.1 异常...

    delphi 开发经验技巧宝典源码

    4.7 异常处理函数 83 0127 将错误编号转换为错误信息字符串 83 0128 使用ExceptAddr函数获得异常被抛出的地址 83 0129 格式化异常处理信息 84 4.8 图形图像相关函数 85 0130 将TColor类型的颜色值转换为...

    delphi 开发经验技巧宝典源码06

    4.7 异常处理函数 83 0127 将错误编号转换为错误信息字符串 83 0128 使用ExceptAddr函数获得异常被抛出的地址 83 0129 格式化异常处理信息 84 4.8 图形图像相关函数 85 0130 将TColor类型的颜色值转换为...

    JavaScript王者归来part.1 总数2

     13.3.2 事件处理函数的注册   13.3.3 把对象注册为事件处理程序   13.3.4 事件模块和事件类型   13.3.5 关于Event接口   13.3.5.1 Event接口的属性和方法   13.3.5.2 UIEvent接口的属性   13.3.5.3 ...

    PHP和MySQL WEB开发(第4版)

    7.3 用户自定义异常 7.4 Bob的汽车零部件商店应用程序的异常 7.5 异常和PHP的其他错误处理机制 7.6 进一步学习 7.7 下一章 第二篇 使用MySQL 第8章 设计Web数据库 8.1 关系数据库的概念 8.1.1 表格 8.1.2 列 8.1.3 ...

Global site tag (gtag.js) - Google Analytics