代码异常定位与处理方法技术

技术编号:16216345 阅读:84 留言:0更新日期:2017-09-15 22:31
本发明专利技术提供了一种代码异常定位与处理方法,该方法包括:生成用例,然后向路径约束条件中输入错误约束;求解新的路径约束条件,产生触发软件错误的用例;对外部函数进行建模,监控外部函数导致的符号传递;通过符号传递定位代码错误。本发明专利技术提出了一种代码异常定位与处理方法,在不降低代码覆盖率的前提下,提高了错误定位效率,优化了代码错误搜索过程。

Code exception location and processing method

The present invention provides abnormal positioning and processing method of code, the method includes: generating case, then input error constraints to path constraints; path constraints to solve the new generation, trigger software error cases; modeling of the external function, monitoring function caused by external symbol by symbol transmission; transfer location code error. The invention provides an abnormal code positioning and processing method, and improves the error location efficiency and optimizes the code error search process without reducing the code coverage rate.

【技术实现步骤摘要】
代码异常定位与处理方法
本专利技术涉及软件调试,特别涉及一种代码异常定位与处理方法。
技术介绍
软件调试在整个软件开发中占据相当大的开销。尽管软件企业在软件调试中已经投入巨资,但软件发行后仍然会被发现有严重的错误。在发行后再对软件错误进行修补,仍会造成严重的经济损失。研究发现,与软件相关的安全事件,其中大都是由在设计或者编码阶段引入的软件错误引起的。但确定一个静态源码检测到的错误是否是一个真实的错误需要花费大量的精力。对于软件错误的自动化检测和修补,现有技术存在以下方案,即不关心待测程序的内部执行情况,随机的产生用例,观察程序输出是否与预期的相符合,但其缺陷是代码覆盖率低,因此其错误检测能力有限。
技术实现思路
为解决上述现有技术所存在的问题,本专利技术提出了一种代码异常定位与处理方法,包括:生成用例,然后向路径约束条件中输入错误约束;求解新的路径约束条件,产生触发软件错误的用例;对外部函数进行建模,监控外部函数导致的符号传递;通过符号传递定位代码错误。优选地,所述求解新的路径约束条件,产生触发软件错误的用例,进一步包括,检测当前运行路径上的错误的错误约束,在当前运行路径下当错误约束满足时,则触发错误,且得到的解就是保证触发错误的用例。优选地,所述方法还包括:对待测程序进行监控,当关键指令被执行时,主动在路径约束条件中输入错误约束,并对错误约束进行标记。优选地,当所述代码错误为数组越限时,检测数组越限错误,追踪符号传递,当有符号作为索引对数组进行访问时,查询当前栈帧范围,获得数组边界,生成违反数组边界要求的错误约束,并输入到当前的路径约束条件中;当新的路径约束条件满足时,则触发数组越限错误;追踪符号从其他变量传递到数组的索引;数组操作识别,即通过逆向分析,将x86架构下的数组操作通过调整编译选项而使得所有的数组操作都编译为基址变址操作;检测数组的合法范围,如果数组操作在合法范围内则是合法的数组操作,否则数组越限,具体包括先进行反汇编,再反编译,获得具有数据结构信息的中间表达形式,再在中间表达形式的基础上进行数组识别,识别数组后使用栈帧范围来作为数组边界的近似。本专利技术相比现有技术,具有以下优点:本专利技术提出了一种代码异常定位与处理方法,在不降低代码覆盖率的前提下,提高了错误定位效率,优化了代码错误搜索过程。附图说明图1是根据本专利技术实施例的代码异常定位与处理方法的流程图。具体实施方式下文与图示本专利技术原理的附图一起提供对本专利技术一个或者多个实施例的详细描述。结合这样的实施例描述本专利技术,但是本专利技术不限于任何实施例。本专利技术的范围仅由权利要求书限定,并且本专利技术涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本专利技术的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利要求书实现本专利技术。本专利技术的一方面提供了一种代码异常定位与处理方法。图1是根据本专利技术实施例的代码异常定位与处理方法流程图。本专利技术在代码检测系统中,通过产生用例而再现错误,向路径约束条件中输入错误约束,通过求解新的路径约束条件,产生触发软件错误的用例;然后对外部函数进行建模,监控外部函数导致的符号传递,而不增加约束,基于改进的优化路径遍历搜索方法更快地执行到错误路径,从而能够更快地检测到代码错误。代码检测系统检测当前运行路径上的错误的错误约束,在当前运行路径下当错误约束满足时,则触发错误,且得到的解就是能保证触发错误的用例。代码检测系统对待测程序进行监控,当关键指令被执行时,主动在路径约束条件中输入错误约束,并对错误约束进行标记。代码检测系统包括多个错误检测单元,分别支持不同类型的错误检测:数组越限、除零错误、空指针引用错误、函数参数错误。数组越限检测单元用于检测数组越限错误,追踪符号传递,当有符号作为索引对数组进行访问时,查询当前栈帧范围,获得数组边界,生成违反数组边界要求的错误约束,并输入到当前的路径约束条件中;当新的路径约束条件满足时,则触发数组越限错误。该数组越限检测单元还用于符号索引追踪,即追踪符号从其他变量传递到数组的索引;数组操作识别,即通过逆向分析,将x86架构下的数组操作通过调整编译选项而使得所有的数组操作都编译为基址变址操作;和数组边界检测,即检测数组的合法范围,如果数组操作在合法范围内则是合法的数组操作,否则数组越限,具体包括先进行反汇编,再反编译,获得具有数据结构信息的中间表达形式,再在中间表达形式的基础上进行数组识别,识别数组后使用栈帧范围来作为数组边界的近似。除零错误检测单元用于检测除零错误,将div(无符号除)和idiv(带符号除)两种指令视为关键指令,当符号作为除数时,生成错误约束,并输入到路径约束条件中,最后通过求解新路径约束条件,获得可以触发除零错误的用例。代码检测系统。空指针引用错误检测单元用于检测空指针引用错误。当一个符号作为地址被引用时,判断地址是否与符号有关,并输入到路径约束条件中,通过求解新路径约束条件,获得可以触发空指针引用错误的用例。函数参数错误检测单元用于并对需要检测的函数插桩,当关键函数被调用且函数参数与符号相关时则生成错误约束,并输入到路径约束条件中。为了对关键函数进行插桩,代码检测系统利用插桩工具Pin对导出关键函数的映像文件进行插桩,当映像文件加载时,搜索映像文件中关键函数的位置,再对关键函数插桩。当待测程序调用外部函数时,代码检测系统根据外部函数的地址,利用插桩工具提供的API获得外部函数名。然后,根据外部函数的函数名判断该函数是否有对应的函数模型,如果没有,则实际执行该函数。如果有对应的函数模型,判断函数的参数是否与符号相关,如果函数的参数与符号相关,则执行函数模型,追踪符号传递,随后进行实际执行。在路径遍历搜索过程中,首先接受初始用例作为其参数。初始用例的边界设置为0,表明执行初始用例产生的路径约束条件从深度0开始都被否定,以产生新的路径约束条件。将初始用例加入到一个工作列表中;实际执行待测程序,其输入为初始用例,检测初始用例能否触发错误。当工作列表不为空时,则进入顶层循环的动态符号执行;依据是用例的分值,从工作列表中选择一个用例作为当前动态符号执行的输入,分值越高代表优先级越高;对待测程序进行动态符号执行,并生成新的用例集合。对集合中每一个用例进行实际执行,检测是否能够触发待测程序的错误,并对每个新用例进行评分。为了检测内存函数错误,代码检测系统首先将所有的输入标记为可疑点,表示所有的输入都是不可信的,然后追踪可疑点传递,当可疑点数据作为源操作数的时候,将指令的目的操作数也标记为可疑点。当可疑点数据传递到内存函数时,即可疑点数据作为内存函数的参数时,则找到了内存函数错误。在可疑点的数据结构上,采用一个连续的内存空间。给定一个虚拟地址addr,使用这个地址addr,找到可疑点数据结构的字节位置,再找到字节中的位偏移。如果这1位为1,表示对应的地址addr是可疑点数据,如果是0则表示该地址不是可疑点数据。然后对可疑点传递进行追踪。具体包括:注册一个初始化回调函数,对追踪可疑点传递所需要的临时数据结构进行初始化。该临时数据结构存储内存地址和宽度信息、寄存器、指令操作码、指令类型。判断是否是内存读取操作,如果是则根据读取的内存地址和内存操作数本文档来自技高网...
代码异常定位与处理方法

【技术保护点】
一种代码异常定位与处理方法,其特征在于,包括:生成用例,然后向路径约束条件中输入错误约束;求解新的路径约束条件,产生触发软件错误的用例;对外部函数进行建模,监控外部函数导致的符号传递;通过符号传递定位代码错误。

【技术特征摘要】
1.一种代码异常定位与处理方法,其特征在于,包括:生成用例,然后向路径约束条件中输入错误约束;求解新的路径约束条件,产生触发软件错误的用例;对外部函数进行建模,监控外部函数导致的符号传递;通过符号传递定位代码错误。2.根据权利要求1所述的方法,其特征在于,所述求解新的路径约束条件,产生触发软件错误的用例,进一步包括,检测当前运行路径上的错误的错误约束,在当前运行路径下当错误约束满足时,则触发错误,且得到的解就是保证触发错误的用例。3.根据权利要求2所述的方法,其特征在于,所述方法还包括:对待测程序进行监控,当关键指令被执行时,主动在路径约束条件中输入错误约束,并对错误约束进行标记。4.根据权利要求1所述的方法,其...

【专利技术属性】
技术研发人员:赖真霖文君
申请(专利权)人:成都四象联创科技有限公司
类型:发明
国别省市:四川,51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1