论文摘要
随着计算机系统的广泛应用,计算机软件的高可信性质受到了越来越多的关注。面向软件源程序的形式验证是保障软件高可信性质的一种有效方法,受到了大量的关注和广泛的研究。但是,由于软件程序逻辑复杂、规模庞大,如何提高软件源程序验证的精度特别是可扩展性仍是当前研究所面临的主要问题。本文提出了一种面向C程序的时序安全性质验证方法,即切片执行方法。它本质上是一种轻量级的符号执行,能够自动抽象出顺序和并发C程序的有限状态模型,并基于模型检验方法进行验证。切片执行融合了程序切片、程序语义抽象、符号化状态表示、反例制导的抽象精化、偏序缩减等多种有效的状态空间缩减技术,大大缩减了抽象模型的状态空间,从而提高了软件源程序形式验证的可扩展性。切片执行的主要特点是面向时序安全性质的验证,能够以接近标准流敏感数据流分析的代价,达到路径敏感程序模拟的验证精度;同时切片执行支持包括循环在内的程序结构,支持全自动的模型抽象和性质验证。切片执行构建在基于变量抽象的程序保守近似语义的基础上,它符号化地执行变量抽象下的相关语句,计算用于描述程序保守近似语义的部分最强后置条件和部分最弱前置条件,抽象出C程序的有限状态模型,并基于模型检验方法验证抽象模型是否满足给定的时序安全性质。基于本文提出的搜索复用框架,切片执行不断根据产生的伪反例路径精化变量抽象的抽象准则,直到性质被验证或找到真实反例路径。面向并发C程序验证,切片执行集成了本文提出的有状态动态偏序缩减方法,大大缩减搜索的状态空间。切片执行还集成了一种轻量级判定过程,用于对C程序验证过程中的验证公式进行高效判定。具体地,本文的创新点包括如下五个方面:1、提出了切片执行的基本概念和方法。基于对程序验证基本规律的分析,我们提出了变量抽象方法,只考虑程序中与待验证性质相关的变量和语句。基于变量抽象,我们定义了部分最强后置条件,进而定义了程序的保守近似语义。基于这两个概念,我们提出了切片执行的概念,它是一种轻量级的符号执行过程。2、提出了面向时序安全性质验证的搜索复用框架并将其应用于切片执行。搜索复用框架也是一种反例路径制导的抽象精化(CEGAR)框架,基于伪反例路径进行模型精化。相比传统的CEGAR框架,搜索复用框架的最大特点是能够在不同精度的抽象模型之间进行充分的信息复用,从而避免了大量不必要的重复搜索,有效降低了验证开销。3、提出了部分最弱前置条件的概念并将其应用于切片执行。部分最弱前置条件是程序保守近似语义的另一种表示方法,同样基于变量抽象定义。在切片执行过程中,可以用部分最弱前置条件部分地取代部分最强后置条件,以生成更弱的一阶逻辑公式来描述抽象模型的同一个状态,从而在不影响模型精度的前提下有效缩减生成模型的状态空间。4、提出了面向有状态模型检验的有状态动态偏序缩减方法,并将其集成到切片执行过程中。我们将切片执行方法扩展到了对并发C程序的验证。为了进一步进行状态空间缩减,我们提出了有状态动态偏序缩减方法,并将其自然地集成到切片执行框架中,用于指导切片执行,使其避免搜索多条具有相同偏序关系的并发进/线程交迭执行路径。我们进行了多个实验,包括两个实用并发程序片段和一个并发SSL程序。实验结果表明,切片执行和有状态动态偏序缩减这两种正交的状态空间缩减方法的集成,大大缩减了并发程序抽象模型的状态空间,特别是降低了验证的空间开销。5、提出了面向切片执行验证公式的轻量级判定过程。我们定义了一类整数线性一阶逻辑判定公式,此类判定公式支持C程序中常用的整数线性运算。我们优化了判定过程,并扩充了对整数除法、取余和位运算的支持。实验表明,扩充后的判定过程能够对面向C程序的切片执行所产生的绝大多数验证公式进行高效判定。在基于SSL程序的切片执行实验中我们发现,采用该判定方法后,验证效率比使用定理证明工具Simplify提高了10.5倍。我们还基于开放源代码的MAGIC项目,实现了基于切片执行的C程序验证工具原型,并基于openssl-0.9.6c等实用程序针对上述每个创新点都进行了实验。我们在实验时采用了与BLAST和MAGIC相同的硬件平台,并针对相同的验证用例,验证了相同的性质集合。经过充分的实验数据对比,我们发现切片执行在验证效率上具有一定的优势。
论文目录
相关论文文献
- [1].安全分析程序验证和确认法规标准综述[J]. 原子能科学技术 2013(S2)
- [2].物理质团法关于可压流计算的程序验证[J]. 航空动力学报 2019(06)
- [3].量子程序验证[J]. 软件学报 2018(04)
- [4].基于瞬态基准实验的CAACS程序验证[J]. 核科学与工程 2017(06)
- [5].并行程序验证的调度策略[J]. 计算机工程与应用 2009(11)
- [6].非线性循环不变式的自动生成[J]. 计算机应用 2008(07)
- [7].安全协议实施安全性分析综述[J]. 山东大学学报(理学版) 2018(01)
- [8].面向多核处理器的低级并行程序验证[J]. 电子学报 2009(S1)
- [9].VASR-CBMC:基于变量子图的多线程程序验证[J]. 计算机应用研究 2018(08)
- [10].多区间上非线性程序的终止性判定[J]. 四川大学学报(工程科学版) 2011(03)
- [11].基于KeY的程序分析和验证[J]. 软件 2016(03)
- [12].采用CPAChecker的动态程序验证[J]. 西安电子科技大学学报 2019(01)
- [13].面向方面的模块化推理框架研究[J]. 山东大学学报(理学版) 2011(09)
- [14].渐进式标记-清扫垃圾收集机制验证[J]. 小型微型计算机系统 2009(09)
- [15].《C程序设计》在汉字编码教学中的应用[J]. 吕梁教育学院学报 2020(02)
- [16].一个基于Mathematica平台的程序安全性自动验证工具[J]. 计算机与现代化 2011(07)
- [17].一个关于程序时间性质的验证框架[J]. 计算机应用与软件 2010(05)
- [18].区间上非线性程序的终止性判定[J]. 软件学报 2010(12)
- [19].广义归纳法对程序性质的证明能力探究[J]. 软件导刊 2014(11)
- [20].人为解与人为解方法[J]. 聊城大学学报(自然科学版) 2010(01)
- [21].基于k近邻最弱前置条件的程序多路径验证方法[J]. 计算机学报 2015(11)
- [22].人为解方法及其在流体力学程序验证中的应用[J]. 计算机应用与软件 2012(11)
- [23].SPRING发布NCSIMUL 8.6[J]. 现代制造 2009(38)
- [24].基于分离逻辑的程序验证技术[J]. 软件学报 2009(08)
- [25].压水堆蒸汽发生器三维两相热工水力分析程序开发与验证[J]. 压力容器 2020(01)
- [26].二维拉氏辐射流体力学人为解构造方法[J]. 爆炸与冲击 2019(01)
- [27].μC/GUI在STM32F103上的移植[J]. 工业控制计算机 2017(03)
- [28].云计算环境中服务器能耗管理机制的应用研究[J]. 计算机技术与发展 2013(11)
- [29].程序模型检查器综述[J]. 计算机科学 2009(04)
- [30].分离逻辑的技术基础与研究现状[J]. 广州大学学报(自然科学版) 2019(02)
标签:切片执行论文; 模型检验论文; 时序安全性质论文; 程序验证论文; 变量抽象论文; 部分最强后置条件论文; 部分最弱前置条件论文; 有状态动态偏序缩减论文;