CN115268853A - 一种基于约束求解器的自动形式验证方法与装置 - Google Patents

一种基于约束求解器的自动形式验证方法与装置 Download PDF

Info

Publication number
CN115268853A
CN115268853A CN202211000086.9A CN202211000086A CN115268853A CN 115268853 A CN115268853 A CN 115268853A CN 202211000086 A CN202211000086 A CN 202211000086A CN 115268853 A CN115268853 A CN 115268853A
Authority
CN
China
Prior art keywords
state machine
correctness
constraint
code
loop
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202211000086.9A
Other languages
English (en)
Inventor
赵永望
沈韬立
许浩
任奎
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CN202211000086.9A priority Critical patent/CN115268853A/zh
Publication of CN115268853A publication Critical patent/CN115268853A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/24Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于约束求解器的自动形式验证方法与装置。针对C/C++源代码,编译为LLVMIR中间语言,在LLVMIR上自动构建符号执行模型,针对给定的源代码正确性属性形式化描述,使用符号执行的方式综合代码模型与代码属性,生成SMT约束,最后验证代码是否满足正确性属性,本发明使用约束求解器验证C/C++代码的正确性属性,通过符号执行编码C/C++代码为约束,根据使用约束求解器接口编写的代码正确性属性,可以验证不含无界循环的C/C++代码的正确性;针对引入无界循环代码的处理,通过使用循环不变式或有限展开循环,可以有限制地将循环编码为约束。

Description

一种基于约束求解器的自动形式验证方法与装置
技术领域
本发明属于计算机软件验证技术领域,是一种基于约束求解器的自动形式验证方法与装置。
背景技术
在软件工程领域,工程师需要确保开发的软件系统满足所有预期需求,且没有未预期的bug。用于确保源代码正确性的方法有很多,比如基于测试的方法,如单元测试或模糊测试,通过人为或机器构建的输入触发程序的异常,这样的方法可以高效发现bug,但不能保证程序没有bug;基于静态分析的方法,适用范围广,但是bug误报率高。
形式化验证作为一种高安全可靠性的技术受到重视。它根据某个或某些形式规约或属性,使用形式化的、严密的数学语言论证计算机软件系统正确性。形式化验证不同于测试,可对描述的所有可能输入情况进行建模和验证。交互式定理证明是形式化验证的其中一种方法,指的是使用严格的高阶逻辑语言描述源代码的建模并转换为数学命题,并在计算机的辅助下验证数学命题的正确性。在工程师与计算机的交互中,产生了机器可检查的证明过程。然而,在手动编写证明的过程中,所需要的工作量是极大的。由于交互式定理证明的高证明成本,寻求一种高准确性、低证明成本的机器证明技术是研究的热点。
约束求解器SMT是一种判定一阶逻辑公式可满足性问题的工具,涉及算术,位向量,数组,量词,未解释函数等理论。SMT求解器自动判定命题的正确性,可以显著提高形式化验证的自动化程度,减少证明负担。因此,目前的问题在于如何将程序源代码转化为SMT求解器可求解的一阶逻辑约束。
本发明的技术问题在于:
目前,利用约束求解器进行程序验证相关已有大量工作,如CBMC和CPAchecker等。CBMC是一个C/C++程序的有界模型检测器,它使用MiniSat约束求解器验证内存安全(包括数组边界检查和指针的安全使用检查)、异常检查、未定义行为的各种变体检查以及用户指定的断言。CBMC通过在程序中添加断言的方式验证相关条件的正确性,没有将验证属性与源码分离。CPAchecker是一个基于可配置程序分析的程序验证工具,它将程序状态空间抽象为有限大小的状态空间,遍历所有可达的状态空间以获取验证结果。
综上,现有技术难以在不修改源码的情况下验证具体的程序状态,仍需要一种精确的方法使用约束求解器对C/C++源码进行属性验证。
发明内容
为了解决上述技术问题,本发明提供了一种基于约束求解器的自动形式验证方法与装置,针对C/C++源代码,编译为LLVM IR中间语言,在LLVM IR上自动构建符号执行模型,针对给定的源代码正确性属性形式化描述,使用符号执行的方式综合代码模型与代码属性,生成SMT约束,最后验证代码是否满足正确性属性。本发明是通过以下技术方案来实现的:
本发明公开了一种基于约束求解器的自动形式验证方法,包括:
S1)获取需要验证的C/C++源码与该源码对应的正确性属性形式化描述,该形式化描述使用便于进行SMT约束求解的编程语言编写;
S2)将需要验证的C/C++源码编译为LLVM IR中间语言;
S3)在生成的LLVM IR中间语言上进行处理,基于S1)所述形式化描述所使用的编程语言自动化地构建易于进行符号执行的代码实现模型;
S4)使用符号执行的方法,在代码实现模型中选取需要验证的主函数作为符号执行的起点,将该函数的参数作为符号执行的符号值,在构建的代码实现模型上自动化地构建运行后的状态机模型;
S5)综合S4)所述符号执行运行后的状态机模型与S1)所述正确性属性形式化描述,生成状态机模型满足正确性属性的SMT约束;
S6)求解SMT约束,得出验证结果,若验证结果不满足将给出反例。
作为进一步地改进,本发明所述的S1)所述源码对应的正确性属性形式化描述,包括描述对于所述状态机模型操作行为与程序返回值的预期结果,和/或描述在状态机模型操作过程中需要保持的安全属性。如不可进行数组越界读取等。
作为进一步地改进,本发明所述的S3)中易于进行符号执行的代码实现模型具体为:使用与S1)所述正确性属性形式化描述相同的编程语言编写,其内容与S2)所述LLVM IR语言中的指令一一对应,并在指令中添加状态机为操作数,LLVM IR指令中读指令与写指令在代码实现模型中实际为对状态机进行读写。使用符号执行的方式运行代码实现模型,可自动化构建后续所述运行后的状态机模型。
作为进一步地改进,本发明所述的S4)在构建的代码实现模型上自动化地构建运行后的状态机模型,具体包括:
当针对不存在无界循环的源码,使用顺序执行的方式构建;
当针对存在无界循环的源码,若该无界循环带有循环不变式,使用循环不变式代替循环部分代码,跳过循环部分代码的构建;若该无界循环不带有循环不变式,将循环部分代码展开特定次数,只执行展开的循环部分代码的构建。
作为进一步地改进,本发明所述的S4)中的状态机模型,包含程序执行指令的位置,逻辑内存建模,主函数入参集合与主函数返回值四部分,符号执行运行后的状态机模型执行指令的位置,逻辑内存和返回值均与主函数入参集合相关。
作为进一步地改进,本发明所述的S5)中状态机模型满足正确性属性的SMT约束,指程序执行前后的状态机模型是否同时满足正确性属性预期结果的一阶逻辑公式。
作为进一步地改进,本发明所述的S6)中验证结果不满足将给出反例,指的是不满足正确性属性的一组函数入参集合的具体值。
本发明还公开了一种基于约束求解器的自动形式验证装置,包括:
获得单元:用于获取需要验证的C/C++源码与该源码对应的正确性属性形式化描述,该形式化描述使用便于进行SMT约束求解的编程语言编写;
Clang编译器:用于将需要验证的C/C++源码编译为LLVM IR中间语言;;
构建代码实现模型单元:用于在生成的LLVM IR中间语言上进行处理,基于S1)所述形式化描述所使用的编程语言自动化地构建易于进行符号执行的代码实现模型;
构建状态机模型单元:用于使用符号执行的方法,在代码实现模型中选取需要验证的主函数作为符号执行的起点,将该函数的参数作为符号执行的符号值,在构建的代码实现模型上自动化地构建运行后的状态机模型;
SMT约束生成单元:用于综合符号执行运行后的状态机模型与正确性属性形式化描述,生成状态机模型满足正确性属性的SMT约束;
约束求解器:求解SMT约束,得出验证结果,若验证结果不满足将给出反例。
综上,本发明的有益效果如下:
本发明使用约束求解器验证C/C++代码的正确性属性,通过符号执行编码C/C++代码为约束,根据使用约束求解器接口编写的代码正确性属性,可以验证不含无界循环的C/C++代码的正确性;
针对引入无界循环代码的处理,通过使用循环不变式或有限展开循环,可以有限制地将循环编码为约束;
针对C++异常处理的编码,可以验证含异常处理的C++代码,通过编码invoke指令判断异常类型可以正常验证。
附图说明
图1为本发明一种实施例公开的基于约束求解器的自动形式验证方法与系统流程图;
图2为本发明一种实施例公开的针对无界循环的处理方法流程图。
具体实施方式
本发明公开了一种基于约束求解器的自动形式验证方法与装置,方法具体为:
S1)获取需要验证的C/C++源码与该源码对应的正确性属性形式化描述,该形式化描述使用便于进行SMT约束求解的编程语言编写;
S2)将C/C++源码编译为LLVM IR中间语言;
S3)在生成的LLVM IR中间语言上进行处理,基于S1)形式化描述所使用的编程语言自动化地构建易于进行符号执行的代码实现模型;
S4)使用符号执行的方法,在代码实现模型上选取需要验证的主函数作为符号执行的起点,将该函数的参数作为符号执行的符号值,在实现模型上自动化地构建运行后的状态机模型;
S5)综合S4)符号执行运行后的状态机模型与S1)正确性属性形式化描述,生成状态机模型满足正确性属性的SMT约束;
S6)求解SMT约束,得出验证结果,若验证结果不满足将给出反例;
S1)源码对应的正确性属性形式化描述,包括描述对于状态机模型操作行为与程序返回值的预期结果,和/或描述在状态机模型操作过程中需要保持的安全属性。如不可进行数组越界读取等。
S3)中易于进行符号执行的代码实现模型具体为:使用与S1)正确性属性形式化描述相同的编程语言编写,其内容与S2)LLVM IR语言中的指令一一对应,并在指令中添加状态机为操作数,LLVM IR指令中读指令与写指令在代码实现模型中实际为对状态机进行读写。使用符号执行的方式运行代码实现模型,可自动化构建后续运行后的状态机模型。
S4)状态机模型与S5)SMT约束定义如下:
定义状态机模型
Figure BDA0003807122460000051
其中,
Figure BDA0003807122460000052
表示程序执行指令的位置,以Γ作为程序运行到的最终位置;以
Figure BDA0003807122460000053
表示逻辑内存建模,整块内存可以表示为n个内存块γ的集合,其中,γ遵循BNFγ::=Int|Array|Struct,表示每个内存块可有整型,数组,结构体三种类型,Int类型指的是各种不同位数的类型集合,比7如布尔类型可以规约为1位的Int类型,Array和Struct类型可以继续向下递归定义内容,包含任意类型;
Figure BDA0003807122460000054
表示给出的代码正确性属性;x表示主函数main的入参集合;另外,以
Figure BDA0003807122460000055
表示主函数main的返回值。
给出初始状态机
Figure BDA0003807122460000056
以x为符号执行的符号值,以符号执行方法考虑函数的顺序验证。本方法在验证时只考虑单核的情况,不考虑中断,不考虑CPU乱序执行,并且认为程序是有限的可终止的。因此,可以认为只在遇到LLVM IR指令store时发生了状态机的修改
Figure BDA0003807122460000061
最终可得出状态机
Figure BDA0003807122460000062
需验证以下关系是否成立:
Figure BDA0003807122460000063
Figure BDA0003807122460000064
Figure BDA0003807122460000065
表示x满足给定的正确性属性,
Figure BDA0003807122460000066
中下标true表示返回值
Figure BDA0003807122460000067
给定的函数运行状态是正常返回的,false则表示未正常返回的。该一阶逻辑公式即S5)状态机模型满足正确性属性的SMT约束。
在S5)状态机模型满足正确性属性的SMT约束中添加对于不变式验证的支持,即函数运行前后保持不变的性质。
扩展状态机模型为
Figure BDA0003807122460000068
Figure BDA0003807122460000069
表示函数的不变式。给出初始状态机
Figure BDA00038071224600000610
与最终状态机
Figure BDA00038071224600000611
需验证以下关系是否成立:
Figure BDA00038071224600000612
Figure BDA00038071224600000613
LLVM IR指令中,普通的函数调用使用call指令,符合上述状态机定义。但是在C++异常处理的情景中即try catch块中,使用了invoke to指令改变控制流,需要对模型做出扩展。作为本发明的进一步改进,针对非正常返回的情况,需要分别针对catch获得的异常进行验证:
Figure BDA00038071224600000614
Figure BDA00038071224600000615
Figure BDA0003807122460000071
ite(I=catch e2,...
ite表示if-then-else,
Figure BDA0003807122460000072
表示在获取异常e后函数应表现的正确行为属性。
本发明假设程序是有限的可终止的,针对引入无界循环while的代码,本发明有两种改进方案:
针对带有循环不变式的无界循环,形如while(C){A;assume P}的形式,其中C为循环条件,P为循环不变式,本发明可使用循环不变式替代循环本身,直接以
Figure BDA0003807122460000073
作为循环部分代码的验证条件。
针对不带有循环不变式的无界循环,形如while(C){A}的形式,本发明以有限次数N作为验证时循环执行的次数,以
Figure BDA0003807122460000074
作为循环部分代码的验证条件。
S6)验证结果不满足将给出反例,指的是不满足正确性属性的一组函数入参集合的具体值。
本发明还公开了一种基于约束求解器的自动形式验证装置,包括:
获得单元:用于获取需要验证的C/C++源码与该源码对应的正确性属性形式化描述,该形式化描述使用便于进行SMT约束求解的编程语言编写;
Clang编译器:用于将需要验证的C/C++源码编译为LLVM IR中间语言;;
构建代码实现模型单元:用于在生成的LLVM IR中间语言上进行处理,基于S1)形式化描述所使用的编程语言自动化地构建易于进行符号执行的代码实现模型;
构建状态机模型单元:用于使用符号执行的方法,在代码实现模型中选取需要验证的主函数作为符号执行的起点,将该函数的参数作为符号执行的符号值,在构建的代码实现模型上自动化地构建运行后的状态机模型;
SMT约束生成单元:用于综合符号执行运行后的状态机模型与正确性属性形式化描述,生成状态机模型满足正确性属性的SMT约束;
约束求解器:求解SMT约束,得出验证结果,若验证结果不满足将给出反例。
下面结合说明书附图,通过具体实施案例对本发明的技术方案作进一步的详细描述。
一种基于约束求解器的自动形式验证方法与装置,图1为本发明一种实施例公开的基于约束求解器的自动形式验证方法与系统流程图,包括如下步骤:
步骤S1),获取待验证的C++代码与正确性属性形式化描述。待验证的C++代码如下所示,数组a的初始化与函数入参x相关且数组成员各不相同,之后代码对数组a进行了选择排序。
Figure BDA0003807122460000081
经过如上选择排序后的数组,数组中的成员应从小到大排列,若需验证排序是否有效,需要验证以下性质:
Figure BDA0003807122460000082
在正确性属性形式化描述中,使用Python Z3 API,为简化验证,可以验证以下性质是否成立:
Forall([idx],Implies(ULT(idx,9),ULT(@a[idx],@a[idx+1])))
此处idx在Z3中定义为64位位向量的变量;Forall,Implies,ULT均为Python Z3API,可直接调用;@a为LLVM IR符号执行模型中的数组a。该性质的含义是数组每个成员都小于后一名成员。为了验证该性质,需要获得数组@a。此处的代码不存在数组越界问题,因此数组越界的验证被简化了。
步骤S2),使用Clang编译器,将C/C++源码编译为LLVM IR中间语言,如下所示:
%1=load i32,i32getelementptr inbounds([10x i32],[10x i32]@a,i640,i641),align 4,!dbg !33,!tbaa !38
%2=load i32,i32getelementptr inbounds([10x i32],[10x i32]@a,i640,i64 0),align 16,!dbg !42,!tbaa !38
%3=icmp ult i32%1,%2,!dbg !43
%4=zext i1%3to i32,!dbg !44
%5=load i32,i32getelementptr inbounds([10x i32],[10x i32]@a,i640,i642),align 8,!dbg !33,!tbaa !38
%6=zext i1%3 to i64,!dbg !42
步骤S3),在生成的LLVM IR上进行处理中间语言,基于Python编程语言自动化地构建易于进行符号执行的代码实现模型。根据定义的状态机模型,所述代码实现模型应该是对构建的状态机S进行读写的模型。本发明自动化地处理输入的LLVM IR代码,将LLVM IR指令一对一地转换为对状态机S的操作指令,如下所示:
regs[″%1″]=S.load(type(′i32′),getelementptr(type(′i32′),type(′[10xi32]′),′@a′,type(′[10x i32]′),intconst(0,64,),type(′i64′),intconst(1,64,),type(′i64′),),type(′i32′),)
regs[″%2″]=S.load(type(′i32′),getelementptr(type(′i32′),type(′[10xi32]′),′@a′,type(′[10x i32]′),intconst(0,64,),type(′i64′),intconst(0,64,),type(′i64′),),type(′i32′),)
regs[″%3″]=ult(type(′i1′),regs[″%1″],type(′i32′),regs[″%2″],type(′i32′),)
本发明为常见的LLVM IR指令语义进行了编码,包括算术运算,内存操作,跳转与特殊的异常处理指令等。异常处理引入的invoke to指令是一种更复杂的跳转指令,它的路径条件需要判断抛出异常的类型,根据类型匹配跳转目标块。
步骤S4),使用符号执行的方法构建状态机模型。给定需要验证的函数起始位置,作为符号执行的起点,函数入参x是符号执行中的符号值,在Z3中定义为32位位向量的变量。符号执行按照顺序执行对状态机S的操作指令,通过LLVMIR临时寄存器保存算术运算结果,使用load store指令读写状态机S的信息,遇到条件跳转指令br时需要使用Z3判断路径条件condition,分别计算true分支和false分支的结果,最后合并分支结果。
步骤S5),综合S4)所述符号执行运行后的状态机模型与S1)所述正确性属性形式化描述,生成状态机模型满足正确性属性的SMT约束。具体来说,本发明可自动化地将正确性属性与状态机S关联,在本实例中,验证如下约束:
Implies(r==0,Forall([idx],Implies(ULT(idx,9),ULT(S(@a,idx),S(@a,idx+1)))))
步骤S6),使用约束求解器求解SMT约束,得出验证结果。
S5)所述约束中,与状态机S相关的部分可以由符号执行获得并展开为具体的与符号值x相关的约束,方便约束求解器求解。求解时对整个约束取反,若找不到可以满足的值,则认为该约束是永真的,可以通过验证,反之给出反例。本实例可以通过验证,若代码或属性存在bug无法通过验证,约束求解器会给出x的一组解作为反例,如[x1=3,x2=2,x3=1,…]。
实施例2:
所述对无界循环代码的两种处理方法,采用对LLVM IR中指令插桩的方式,结合符号执行策略的调整,简化对循环的展开方法,图2为本发明一种实施例公开的针对无界循环的处理方法流程图。
步骤S2)中,使用Clang编译器,将C/C++源码编译为LLVM IR中间语言后,对于无界循环代码还需要进行进一步处理,添加更多跳转信息:
br i1%3,label%4,label%6;preds=%0 postds=%5
其中,preds是原有的跳转路径信息,postds是本发明添加的可能跳转路径,方便仅编码循环不变式的相关信息并跳出循环。
步骤S4)中,使用符号执行的方法构建状态机模型。带有循环不变式的无界循环,仅需要编码循环不变式相关代码,不需要循环其他信息,符号执行策略是直接读取添加的可能跳转路径并强制跳转;不带有循环不变式的无界循环,需要展开固定次数。给定次数N,本发明维护一个循环次数计数变量loopcount,重复进入循环时loopcount自增,当loopcount与N相等时,符号执行策略是强制跳转到添加的可能跳转路径,通常为退出循环的路径代码。
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (8)

1.一种基于约束求解器的自动形式验证方法,其特征在于:包括:
S1)获取需要验证的C/C++源码与该源码对应的正确性属性形式化描述,该形式化描述使用便于进行SMT约束求解的编程语言编写;
S2)将需要验证的C/C++源码编译为LLVMIR中间语言;
S3)在生成的LLVMIR中间语言上进行处理,基于S1)所述形式化描述所使用的编程语言自动化地构建易于进行符号执行的代码实现模型;
S4)使用符号执行的方法,在代码实现模型中选取需要验证的主函数作为符号执行的起点,将该函数的参数作为符号执行的符号值,在构建的代码实现模型上自动化地构建运行后的状态机模型;
S5)综合S4)所述符号执行运行后的状态机模型与S1)所述正确性属性形式化描述,生成状态机模型满足正确性属性的SMT约束;
S6)求解SMT约束,得出验证结果,若验证结果不满足将给出反例。
2.根据权利要求1所述基于约束求解器的自动形式验证方法,其特征在于:S1)所述源码对应的正确性属性形式化描述,包括描述对于所述状态机模型操作行为与程序返回值的预期结果,和/或描述在状态机模型操作过程中需要保持的安全属性。
3.根据权利要求1所述基于约束求解器的自动形式验证方法,其特征在于:所述的S3)中易于进行符号执行的代码实现模型具体为:使用与S1)所述正确性属性形式化描述相同的编程语言编写,其内容与S2)所述LLVMIR语言中的指令一一对应,并在指令中添加状态机为操作数,LLVMIR指令中读指令与写指令在代码实现模型中实际为对状态机进行读写。
4.根据权利要求1或2或3所述基于约束求解器的自动形式验证方法,其特征在于:所述的S4)所述中在构建的代码实现模型上自动化地构建运行后的状态机模型,具体包括:
当针对不存在无界循环的源码,使用顺序执行的方式构建;
当针对存在无界循环的源码,若该无界循环带有循环不变式,使用循环不变式代替循环部分代码,跳过循环部分代码的构建;若该无界循环不带有循环不变式,将循环部分代码展开特定次数,只执行展开的循环部分代码的构建。
5.根据权利要求4所述基于约束求解器的自动形式验证方法,其特征在于:所述的在S4)中的状态机模型,包含程序执行指令的位置,逻辑内存建模,主函数入参集合与主函数返回值四部分,符号执行运行后的状态机模型执行指令的位置,逻辑内存和返回值均与主函数入参集合相关。
6.根据权利要求1或2或3或5所述基于约束求解器的自动形式验证方法,其特征在于:所述的S5)中状态机模型满足正确性属性的SMT约束,指程序执行前后的状态机模型是否同时满足正确性属性预期结果的一阶逻辑公式。
7.根据权利要求6所述基于约束求解器的自动形式验证方法,其特征在于:所述的S6)中验证结果不满足将给出反例,指的是不满足正确性属性的一组函数入参集合的具体值。
8.一种基于约束求解器的自动形式验证装置,其特征在于,包括:
获得单元:用于获取需要验证的C/C++源码与该源码对应的正确性属性形式化描述,该形式化描述使用便于进行SMT约束求解的编程语言编写;
Clang编译器:用于将需要验证的C/C++源码编译为LLVMIR中间语言;;
构建代码实现模型单元:用于在生成的LLVMIR中间语言上进行处理,基于S1)所述形式化描述所使用的编程语言自动化地构建易于进行符号执行的代码实现模型;
构建状态机模型单元:用于使用符号执行的方法,在代码实现模型中选取需要验证的主函数作为符号执行的起点,将该函数的参数作为符号执行的符号值,在构建的代码实现模型上自动化地构建运行后的状态机模型;
SMT约束生成单元:用于综合符号执行运行后的状态机模型与正确性属性形式化描述,生成状态机模型满足正确性属性的SMT约束;
约束求解器:求解SMT约束,得出验证结果,若验证结果不满足将给出反例。
CN202211000086.9A 2022-08-19 2022-08-19 一种基于约束求解器的自动形式验证方法与装置 Pending CN115268853A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211000086.9A CN115268853A (zh) 2022-08-19 2022-08-19 一种基于约束求解器的自动形式验证方法与装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211000086.9A CN115268853A (zh) 2022-08-19 2022-08-19 一种基于约束求解器的自动形式验证方法与装置

Publications (1)

Publication Number Publication Date
CN115268853A true CN115268853A (zh) 2022-11-01

Family

ID=83752682

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211000086.9A Pending CN115268853A (zh) 2022-08-19 2022-08-19 一种基于约束求解器的自动形式验证方法与装置

Country Status (1)

Country Link
CN (1) CN115268853A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116069669A (zh) * 2023-03-07 2023-05-05 中国科学技术大学 全自动分布式一致性的分析方法、系统、设备及存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116069669A (zh) * 2023-03-07 2023-05-05 中国科学技术大学 全自动分布式一致性的分析方法、系统、设备及存储介质

Similar Documents

Publication Publication Date Title
Pretschner Model-based testing
Vemu et al. CEDA: Control-flow error detection using assertions
US7320114B1 (en) Method and system for verification of soft error handling with application to CMT processors
Goddard Software FMEA techniques
US6625759B1 (en) Method and apparatus for verifying the fine-grained correctness of a behavioral model of a central processor unit
Snooke et al. Model-driven automated software FMEA
JP7204955B2 (ja) プログラマブルロジックコントローラプログラムを分析する方法、コンピュータプログラム及び装置
Fadiheh et al. Symbolic quick error detection using symbolic initial state for pre-silicon verification
Yang et al. Specification-based test repair using a lightweight formal method
Perry et al. Fault-tolerant typed assembly language
CN115268853A (zh) 一种基于约束求解器的自动形式验证方法与装置
CN111679964B (zh) 基于边界模型检测技术的微内核操作系统接口的形式化验证方法
Jones et al. Self-consistency checking
Angione et al. An innovative Strategy to Quickly Grade Functional Test Programs
Jayakumar et al. Property-based fault injection: A novel approach to model-based fault injection for safety critical systems
Solouki et al. An experimental evaluation of control flow checking for automotive embedded applications compliant with iso 26262
Ding et al. Reliability evaluation of functionally equivalent simulink implementations of a pid controller under silent data corruption
Molnár et al. Model checking-based software-FMEA: Assessment of fault tolerance and error detection mechanisms
Glamm et al. Automatic verification of instruction set simulation using synchronized state comparison
Hansen et al. Formal methods for modelling and analysis of single-event upsets
Sri et al. A Holistic Approach to CPU Verification using Formal Techniques
Troubitsyna Enhancing dependability via parameterized refinement
Reinbacher et al. Challenges in embedded model checking—a simulator for the [mc] square model checker
Peleska Integrated and automated abstract interpretation, verification and testing of c/c++ modules
Alsmadi et al. Evaluate and Improve GUI Testing Coverage Automatically

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination