一种自动形式化验证c语言高层属性的系统及方法

文档序号:37821907发布日期:2024-04-30 17:31阅读:9来源:国知局
一种自动形式化验证c语言高层属性的系统及方法

本发明涉及c语言高层属性安全,具体涉及自动形式化验证c语言高层属性的系统及方法。


背景技术:

1、c语言是一种通用的编程语言,由于具有高效、灵活、功能丰富、表达力强和较高的可移植性等特点,在程序设计中备受青睐,应用于许多重点领域。如果c语言程序设计出现漏洞,或将产生重大损失。形式化验证方法可以很好的检验和验证c语言代码的漏洞,但传统的形式化验证方法主要依赖于手工验证,工作量大,效率较低,并且对使用形式化验证方法的程序员要求较高。

2、形式化验证方法是使用数学的公式、定理和系统来验证一个系统的正确性。形式化验证过程可以证明一个系统不存在某个缺陷或符合某个或某些属性。软件测试无法证明系统不存在缺陷,也不能证明它符合一定的属性。系统无法被证明或测试为无缺陷,这是因为不可能形式地规定什么是“没有缺陷”。所有可以做的,就是证明一个系统没有任何可以想到的缺陷,并且满足所有的功能规范和安全属性。


技术实现思路

1、本发明的目的在于提供一种自动形式化验证c语言高层属性的系统及方法,解决上述c语言代码面临的安全问题以及传统形式化验证工作量大、验证效率低的问题。

2、本发明通过下述技术方案实现:

3、一种自动形式化验证c语言高层属性的系统,包括:

4、源码属性处理器:用于将c的源码和描述高层属性的属性规范文档转换到一起成抽象语法树,并且进入中间语言生成器;

5、中间语言生成器:将收到含属性规范的抽象语法树,并转换分析成便于程序分析的中间语言代码;

6、属性与代码分析器:接收到中间语言代码后,首先构建中间语言代码的控制流图,并且生成属性变量与代码函数的依赖关系表,然后选择一条目标属性,记为目标属性迭代点,过滤掉与该属性变量无关的函数;

7、函数属性路径生成器:得到属性与代码分析器得到的一条目标属性和有关函数以后,将目标属性转换为可达逻辑属性,然后根据需要建模的函数集进行比较,如果还有需要建模的函数集,则根据中间语言代码生成的控制流图,生成相应的函数路径约束。然后将目标属性的逻辑表达式设置为前置假设条件和后置假设条件,形成逻辑公式输出到符号求解器中;

8、符号求解器:将形成的逻辑公式进行计算,验证是否满足目标属性,如果全部满足就说明目标属性通过验证输出结果到文档。如果有某个函数的某条路径违反了目标属性,则存在误报的可能,需要进入抽象验证器中进行验证;

9、抽象验证器:从目标属性中抽取抽象谓词,检查目标抽象属性是否满足如果满足就将验证结果输出,然后回到目标属性迭代点选取下一条目标属性进行验证,直到所有目标属性验证完毕,如果不满足就生成违反的反例。

10、本发明一种自动形式化验证c语言高层属性的系统及方法,将将代码与高层属性导入生成抽象语法树,中间语言生成器将其进行关键提取与遍历,然后生成程序流图导入到属性与代码分析器,对于高层属性文档描述的高层属性进行提取,对函数进行变量提取,生成变量的依赖表,将函数输出到函数属性路径生成器,生成相应的逻辑公式,再将目标属性生成逻辑公式,再将其相关性进行合并,给符号求解器进行求解然后进行计算,如果都能计算成功,这说明这个属性在代码里被满足,如果有违反了属性则存在误报的可能将结果输出到抽象验证器中生成对应的抽象谓词域,通过不动点迭代生成抽象状态机,最后得到抽象状态图后可以验证目标属性通过任意可达路径是否正确。

11、一种自动形式化验证c语言高层属性的系统及方法,其特征在于包括以下步骤:

12、步骤001:根据高层属性描述文档与c源码进行交互,形成一个抽象语法树;

13、步骤002:根据步骤001的抽象语法树转化为控制流图,构建目标属性变量与函数的依赖表;步骤003:选取目标属性对应的c语言代码提取目标属性的控制流图;

14、步骤004:根据步骤002中的依赖表得到变量相关的函数,对于建模表进行检查,对未建模函数进行控制流图转换成函数的逻辑公式;

15、步骤005:借助步骤003与步骤004的得出的结果对逻辑公式的相关性进行调整,得到最终的逻辑公式进行计算;

16、步骤006:将步骤005的验证结果进行整合,如果存在违反目标属性逻辑公式的解,需要利用抽象行为进行进一步分析;

17、步骤007:利用得到的抽象谓词域对目标属性进行提取,最后与得出的函数约束进行合并,并且生成抽象状态机;

18、步骤008:利用抽象状态机对于步骤005计算不满足的属性检查是否任意可达状态能否满足目标属性的逻辑公式,得出是否通过的结论。

19、进一步地根据权利要求3所述的一种自动形式化验证c语言高层属性的系统及方法,其特征在于,所述对高层属性满足正确性的自动形式化验证步骤包括:

20、步骤101:接收到高层属性描述文档总结与c源码形成的抽象语法树,对其进行函数与高层属性的提取;

21、步骤102:将接受到的抽象语法树关键部分抽出,利用程序流图的程序结构进行提取与转换;步骤103:提取之后利用属性与代码分析器进行目标属性变量的提取与所相关的函数路径进行提取。

22、进一步地,根据权利要求3所述的一种自动形式化验证c语言高层属性的系统及方法,其特征在于,所述对于相关变量与函数的逻辑公式计算步骤包括:

23、步骤201:将得到的目标属性变量涉及的程序流程图进行提取转换;

24、步骤202:目标属性相关联的函数进行逻辑公式的转换,并且对相关变量进行记录;

25、步骤203:将步骤201与步骤202所记录的变量等进行相关性的调整,根据变量记录对于两个逻辑公式对应的变量进行相关联,将目标属性的逻辑公式设置好后输出到符号求解其中。

26、进一步地,根据权利要求3所述的一种动形式化验证c语言高层属性的系统及方法,其特征在于所述属性验证及抽象验证步骤:

27、步骤301:接受不满足的符号求解器结果,对于结果进行抽象谓词的提取,生成目标属性的抽象谓词域;

28、步骤302:借助抽象谓词域对函数约束进行调整,然后合并目标属性的约束和相关函数的约束;

29、步骤303:根据得到的结果,利用科打不动点进行分析,可以得到关于此抽象域的抽象状态机;

30、步骤304:根据目标对应的逻辑约束在抽象状态机中进行推理验证,如果得到的逻辑约束发现能够在任意可达状态均能满足,就能得出目标属性验证通过的结果;如果发现没有通过验证,说明之前计算得到的逻辑公式计算结果不存在误报,是正确的结果。

31、本发明与现有技术相比,具有如下的优点和有益效果:

32、1、本发明一种自动形式化验证c语言高层属性的系统,能够以较高程度的自动化,实现对c代码高层属性的形式化验证,其中其中使用源码属性处理器将目标属性文档与c语言代码进行整合输出抽象语法树,属性与代码分析器构建变量与函数之间的关系,同时生成供软件分析用的中间语言代码,函数属性路径生成器就利用得到的结果选取一条目标属性进行验证,对于相应的函数生成程序流程图供之后继续分析,并且生成相对应的逻辑公式,符号求解器整合逻辑公式之间变量的关系并且进行配对然后进行验证,根据得出的结果进行接下来的判断,抽象验证器就是当符号求解器计算出不满足的结果,防止误报的情况产生,就利用目标属性进行抽象域、抽象图进行最后的验证,看目标属性是否在代码中成立,是否存在安全问题;

33、2、本发明一种自动形式化验证c语言高层属性的方法,能够对高层属性进行自动化的转化与验证,证明目标属性是否在c语言代码中符合预期,并且能够证明是否存在不满足的路径点,利用抽象建模等也可以排除结果误报的可能性。

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