基于windows异常处理机制的主动防护方法与流程

文档序号:18796293发布日期:2019-09-29 19:42阅读:401来源:国知局
基于windows异常处理机制的主动防护方法与流程

本发明涉及计算机网络领域,具体的说,是一种减少电脑软件崩溃、提高上网者上网体验的基于windows异常处理机制的主动防护方法。



背景技术:

计算机软件是计算机必不可少的内容,每个软件有自身的功能和应用,由于每个软件有自己的一些构架、内容、实现方式,因此在使用过程中有事会因为异常而崩溃。通常的系统自带和程序自身设置的简单异常处理程序不能满足对程序的保护要求,在程序被入侵或者系统自身和程序本身对异常都无法处理的情况下,程序还是会发生崩溃中断用户体验。



技术实现要素:

本发明的所要解决的技术问题是:提供一种减少电脑软件崩溃、提高上网者上网体验的基于windows异常处理机制的主动防护方法。

本发明通过下述技术方案实现:基于windows异常处理机制的主动防护方法,包括以下步骤:

s1:通过windows的系统dll提供的异常处理模块定位异常位置;

s2:windows的异常捕获机制根据异常位置捕获异常并利用异常分析软件进行自动化分析;

s3:根据分析结果进行同异类自动判断处理;

s4:自动判断处理后,更新dll模块补丁;

s5:重复步骤s1至s4,不断排查异常、完善系统,直至排查完所有的异常。

进一步地,为了更好的实现本发明,特别采用下述设置:所述的步骤s2中,所述的windows的异常捕获机制通过挂钩seh链表捕获发生异常的结构。

进一步地,为了更好的实现本发明,特别采用下述设置:所述的seh链表配合uef链表捕获发生异常的结构,当seh链遍历完毕,seh链尾的系统预设的处理器将遍历uef链。

进一步地,为了更好的实现本发明,特别采用下述设置:所述的步骤s2中,所述的异常分析软件分析异常,得到异常信息,该异常信息包括位置、类型以及时间。

进一步地,为了更好的实现本发明,特别采用下述设置:所述的步骤s3中,自动判断处理包括对异常的主动触发和屏蔽修复。

进一步地,为了更好的实现本发明,特别采用下述设置:在所述的步骤s4中,将更新后的dll模块补丁打包到exe的资源中,程序运行时从调用loadresource等api读取dll模块补丁到内存中,从内存中加载dll模块补丁。

本发明与现有技术相比,具有以下优点及有益效果:本发明的基于windows异常处理机制的主动防护方法,首先通过windows的系统dll提供的异常处理模块定位异常位置;然后使用windows的异常捕获机制根据异常位置捕获异常并利用异常分析软件进行自动化分析;然后,根据分析结果进行同异类自动判断处理;最后自动判断处理,更新dll模块补丁;重复步骤s1至s4,不断排查异常、完善系统,直至排查完所有的异常。采用主动防御方式干扰异常代码执行流程,将处理后的正确结果返还给用户,避免了三方恶意程序入侵或者程序自身设计缺陷导致的应用程序崩溃问题,减少用户发生异常和崩溃的几率,提升程序健壮性和用户对程序的直接体验。

附图说明

图1为本发明的基于windows异常处理机制的主动防护方法的一种流程框图。

具体实施方式

下面结合实施例对本发明作进一步地详细说明,但本发明的实施方式不限于此。

实施例:

本发明通过下述技术方案实现,本发明的基于windows异常处理机制的主动防护方法,包括以下步骤:

s1:通过windows的系统dll提供的异常处理模块定位异常位置;

s2:windows的异常捕获机制根据异常位置捕获异常并利用异常分析软件进行自动化分析;

s3:根据分析结果进行同异类自动判断处理;

s4:自动判断处理后,更新dll模块补丁;

s5:重复步骤s1至s4,不断排查异常、完善系统,直至排查完所有的异常。

本发明的基于windows异常处理机制的主动防护方法,首先通过windows的系统dll提供的异常处理模块定位异常位置;然后使用windows的异常捕获机制根据异常位置捕获异常并利用异常分析软件进行自动化分析;然后,根据分析结果进行同异类自动判断处理;最后自动判断处理,更新dll模块补丁;重复步骤s1至s4,不断排查异常、完善系统,直至排查完所有的异常。采用主动防御方式干扰异常代码执行流程,将处理后的正确结果返还给用户,避免了三方恶意程序入侵或者程序自身设计缺陷导致的应用程序崩溃问题,减少用户发生异常和崩溃的几率,提升程序健壮性和用户对程序的直接体验。

进一步的,在上述实施例的基础上,所述的步骤s2中,所述的windows的异常捕获机制通过挂钩seh链表捕获发生异常的结构。seh是windows系统提供的功能,跟开发工具无关。值得一提的是,vc将seh进行了封装trycatchfinally,c++中也可以用c的封装_try{}_except()_{}和__try{}__finally{}。所以当建立一个c++try块时,编译器就生成一个seh__try块。一个c++catch测试变成一个seh异常过滤器,并且catch中的代码变成seh__except块中的代码。实际上,当写一条c++throw语句时,编译器就生成一个对windows的raiseexception函数的调用,用于throw语句的变量传递给raiseexception作为附加的参数。

进一步的,在上述实施例的基础上,所述的seh链表配合uef链表捕获发生异常的结构,当seh链遍历完毕,seh链尾的系统预设的处理器将遍历uef链。如果seh的filter返回exception_execute_handler,seh中的异常处理块会执行,实现代码的飞越,类似于goto。由于uef是由os或者crt包装过的,当uef返回exception_execute_handler时,os或者crt中的异常处理过程得以执行,一般是exitprocess或者terminateprocess,终止进程。seh和uef返回exception_execute_handler,都会导致stackunwind。

进一步的,在上述实施例的基础上,所述的步骤s2中,所述的异常分析软件分析异常,得到异常信息,该异常信息包括位置、类型以及时间。所述的异常分析软件可以根据用户的需求进行选取,甚至编辑,所述的异常信息可以包括异常的位置、异常的类型以及异常的开始时间、经历时间等信息。

进一步的,在上述实施例的基础上,所述的步骤s3中,自动判断处理包括对异常的主动触发和屏蔽修复。

进一步的,在上述实施例的基础上,在所述的步骤s4中,将更新后的dll模块补丁打包到exe的资源中,程序运行时从调用loadresource等api读取dll模块补丁到内存中,从内存中加载dll模块补丁。

作为本发明的一种优选实施方式,如图1所示,系统的守护进程查询是否有待处理进程运行;若有,则加载windows异常处理捕获模块,若没有,则进入休眠,返回守护进程查询;当windows捕获异常,则生成捕获异常分析文件,进行同类异常自动判断并修复,获得分析数据并将分析数据结合修复情况一起编写到dll中触发异常并更新dll补丁;若未捕获异常则返回判断windows重新判断是否捕获程序异常。

以上所述,仅是本发明的较佳实施例,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化,均落入本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1