一种基于浮点格式感知模糊测试的浮点异常检测方法技术

技术编号:36692066 阅读:19 留言:0更新日期:2023-02-27 20:00
本发明专利技术公开了一种基于浮点格式感知模糊测试的浮点异常检测方法,其包括:步骤S1:静态分析和插桩;利用静态分析技术识别并得到程序中所有的浮点操作以及程序的控制流图信息,定义并插桩相应的检测函数;为每个浮点操作插入了ErrBits函数,所述ErrBits函数用于度量一个测试输入距离触发潜在浮点异常的距离;步骤S2:浮点格式感知的模糊测试;针对步骤S1插桩后的代码,对其进行结合浮点异常距离极小化和分支覆盖信息为指导的模糊测试来检测程序中潜在的浮点异常。本发明专利技术具有原理简单、操作简便、误报率较低、可伸缩性较好的等优点。可伸缩性较好的等优点。可伸缩性较好的等优点。

【技术实现步骤摘要】
一种基于浮点格式感知模糊测试的浮点异常检测方法


[0001]本专利技术主要涉及到软件系统的安全检测
,特指一种基于浮点格式感知模糊测试的浮点异常检测方法。

技术介绍

[0002]随着信息化的发展,计算机应用日益广泛与深入,软件系统的安全性和可靠性也越来越受到重视。在现代计算机系统中,浮点运算普遍存在,在一些涉及大量科学和工程计算的软件中都存在着浮点运算,由于浮点数是实数的近似,是实数的一个有限真子集,它的精度和表示范围有限,这就导致浮点运算过程中可能会产生异常。
[0003]根据IEEE

754浮点标准,浮点运算中所出现的浮点异常被分为五种类型,分别是上溢出、下溢出、被零除、无效运算和不精确异常。在涉及国防、航空航天、金融、交通、医疗等安全攸关领域的系统控制软件中,一旦在浮点运算中出现浮点异常,将会导致计算程序故障,进而引起灾难性的后果。
[0004]例如,在1996年6月,由欧洲航天局所研发的一架“阿丽亚娜5号
”ꢀ
(Ariane5)一次性无人运载火箭在发射后约40秒时发生了爆炸,造成了数亿美元的损失。经调查显示,造成火箭爆炸的原因在于助推系统的软件错误,在该系统中将一个64位浮点数转化为一个16位有符号整数时引起了数据精度的丢失,导致运算结果出错,最终致使火箭发射不久后发生爆炸。从该案例可以看出,浮点运算的可信性很大程度上影响着软件系统的可靠性。因此,在软件真正运行之前检测程序中潜在的浮点异常对于保证软件系统的可靠性至关重要。
[0005]数值程序浮点异常检测方法的目的是,在软件发生故障之前检测潜在的浮点异常以保证软件的可靠性。现有的浮点异常检测方法主要采用静态分析方法,主要包括以下2个步骤:
[0006]S1:对数值程序中不同类型的浮点运算构造相应的浮点约束,使得违法该约束时的测试输入是触发浮点异常的输入。
[0007]S2:基于S1构造了浮点约束的程序源代码,开展静态分析(如符号执行),分析得到程序中潜在的浮点异常。
[0008]上述现有分析方法主要采用静态分析的方法,在检测数值程序中的浮点异常时由于过近似容易导致一些误报。
[0009]上述现有分析方法的可伸缩性有限,现有分析方法一般先对源程序进行浮点约束的构造,然后利用SMT求解器来求解。但是实际数值程序中可能有成千上万的浮点运算,并且使用SMT求解器来求解浮点约束是非常昂贵的,一般可伸缩性有限。

技术实现思路

[0010]本专利技术要解决的技术问题就在于:针对现有技术存在的技术问题,本专利技术提供一种原理简单、操作简便、误报率较低、可伸缩性较好的基于浮点格式感知模糊测试的浮点异常检测方法。
[0011]为解决上述技术问题,本专利技术采用以下技术方案:
[0012]一种基于浮点格式感知模糊测试的浮点异常检测方法,其包括:
[0013]步骤S1:静态分析和插桩;利用静态分析技术识别并得到程序中所有的浮点操作以及程序的控制流图信息,定义并插桩相应的检测函数;为每个浮点操作插入了ErrBits函数,所述ErrBits函数用于度量一个测试输入距离触发潜在浮点异常的距离;
[0014]步骤S2:浮点格式感知的模糊测试;针对步骤S1插桩后的代码,对其进行结合浮点异常距离极小化和分支覆盖信息为指导的模糊测试来检测程序中潜在的浮点异常。
[0015]作为本专利技术方法的进一步改进:所述步骤S1的流程包括:
[0016]步骤S11:识别浮点操作;通过静态分析识别目标程序中所有浮点操作;
[0017]步骤S12:进行代码插桩;基于LLVM框架,将异常检测函数和ErrBits函数插桩到原始程序中的浮点操作后,根据不同类型的浮点操作插桩相应的异常检测函数。
[0018]作为本专利技术方法的进一步改进:所述步骤S1中,基于程序的控制流信息,对程序进行插桩以记录运行时的分支覆盖信息。
[0019]作为本专利技术方法的进一步改进:所述步骤S2的流程包括:
[0020]步骤S21:输入为步骤S1插桩后的程序和初始测试输入,输出为BuggyS,是触发目标程序中浮点异常的测试用例集;
[0021]步骤S22:当模糊测试运行时间没有超过预定义阈值时限时,首先,从种子队列中选择一个输入s,对其进行变异并生成变异后的输入s

;然后,运行该变异后的输入s

并监控其执行状态,收集距离浮点异常信息以及程序分支覆盖信息;
[0022]步骤S23:如果所述变异的输入s

距离触发浮点异常更近,即本次执行距离浮点异常信息CurSet_ErrBits中存在潜在异常位置的ErrBits值比目前最新的距离浮点异常信息Set_ErrBits中相应的潜在异常位置的ErrBits值小,则利用CurSet_ErrBits的信息更新映射表Set_ErrBits,同时将该变异输入s

视为有趣的种子,并将其添加到种子队列中以供后续进一步变异来生成更多可能有趣的测试输入;或者,在所述变异的输入s

的执行过程中,覆盖了之前没有覆盖到的程序位置,该输入s

也将被视为有趣的种子并添加到种子队列中;
[0023]步骤S24:如果发现此次输入的执行导致目标程序崩溃,那么该输入会被添加到收集触发浮点异常用例集BuggyS中;最后当以浮点格式感知的模糊测试的运行时间达到预定义的时限阈值时,则结束运行过程并输出触发浮点异常测试用例集BuggyS。
[0024]作为本专利技术方法的进一步改进:所述步骤S21中,在开始阶段,将BuggyS 和CurSet_ErrBits初始化为空集,模糊测试种子池初始化为由初始测试输入组成的队列;所述CurSet_ErrBits表示在当前测试输入运行中从所有异常位置到对应的ErrBits的映射。
[0025]作为本专利技术方法的进一步改进:所述步骤S22中,在执行过程中,执行引擎将会维护CurSet_ErrBits和Set_ErrBits两个变量,所述Set_ErrBits是一个全局映射,在每个异常位置保留最小的ErrBits信息。在当前执行结束后,执行引擎将获取到此次执行的浮点异常距离信息CurSet_ErrBits和当前最新的Set_ErrBits信息。
[0026]作为本专利技术方法的进一步改进:所述步骤S23中,对于指数和尾数,包括位翻转变异策略:在位翻转策略下,针对指数位,在一个随机位置翻转一个随机位,并翻转一个随机选择的连续的n位;其中n为2,3,4和8;尾数位的翻转操作与指数位相同,但为n增加了一个
新值,为16。
[0027]作为本专利技术方法的进一步改进:所述步骤S23中,对于指数和尾数,包括算术操作策略:针对指数位,给它加一个整数,该整数从1到32;相反的变异操作是从中减去这个整数;尾数位的算术运算与指数位相同,但这个整数是2
m

1,其中m是从1到33。
[002本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于浮点格式感知模糊测试的浮点异常检测方法,其特征在于,包括:步骤S1:静态分析和插桩;利用静态分析技术识别并得到程序中所有的浮点操作以及程序的控制流图信息,定义并插桩相应的检测函数;为每个浮点操作插入了ErrBits函数,所述ErrBits函数用于度量一个测试输入距离触发潜在浮点异常的距离;步骤S2:浮点格式感知的模糊测试;针对步骤S1插桩后的代码,对其进行结合浮点异常距离极小化和分支覆盖信息为指导的模糊测试来检测程序中潜在的浮点异常。2.根据权利要求1所述的基于浮点格式感知模糊测试的浮点异常检测方法,其特征在于,所述步骤S1的流程包括:步骤S11:识别浮点操作;通过静态分析识别目标程序中所有浮点操作;步骤S12:进行代码插桩;基于LLVM框架,将异常检测函数和ErrBits函数插桩到原始程序中的浮点操作后,根据不同类型的浮点操作插桩相应的异常检测函数。3.根据权利要求2所述的基于浮点格式感知模糊测试的浮点异常检测方法,其特征在于,所述步骤S1中,基于程序的控制流信息,对程序进行插桩以记录运行时的分支覆盖信息。4.根据权利要求1或2或3中任意一项所述的基于浮点格式感知模糊测试的浮点异常检测方法,其特征在于,所述步骤S2的流程包括:步骤S21:输入为步骤S1插桩后的程序和初始测试输入,输出为BuggyS,是触发目标程序中浮点异常的测试用例集;步骤S22:当模糊测试运行时间没有超过预定义阈值时限时,首先,从种子队列中选择一个输入s,对其进行变异并生成变异后的输入s

;然后,运行该变异后的输入s

并监控其执行状态,收集距离浮点异常信息以及程序分支覆盖信息;步骤S23:如果所述变异的输入s

距离触发浮点异常更近,即本次执行距离浮点异常信息CurSet_ErrBits中存在潜在异常位置的ErrBits值比目前最新的距离浮点异常信息Set_ErrBits中相应的潜在异常位置的ErrBits值小,则利用CurSet_ErrBits的信息更新映射表Set_ErrBits,同时将该变异输入s

视为有趣的种子,并将其添加到种子队列中以供后续进一步变异来生成更多可能有趣的测试输入;或者,在所述变异的输入s

的执行过程中,覆盖了之前没有覆盖到的程序位置,该输入s

也将被视为有趣的种子并添加到种子队列中;步骤S24:如果发现此次输入的执行导致目标程序崩溃,那么该输入会被添加到收集触发浮点异常用例集BuggyS中;最后当以浮点格式感知的模糊测试的运行时间达到预定义的时限阈值时,则结束运行过程并输出触发浮点异常测试用例集BuggyS。5.根据权利要求4所述的基于浮点格式感知模糊测试的浮点异常检测方法,其特征在于,所述步骤S21中,在开始阶段,将BuggyS和CurSet_ErrBits初始化为空集,模糊测试种子池初始化为由初始测试输入组成的队列;所述CurSet_ErrBits表示在当前测试输入运行中从所有异常位置到对应的ErrBits的映射。6.根据权利要求4所述的基于浮点格式感知模糊测试的浮点异常检测方法,其特征在于,所述步骤S2...

【专利技术属性】
技术研发人员:陈立前马成虎王戟易昕范广生毛晓光陈振邦董威
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:

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

1