CN105808429A - 一种面向线性约束代码的有界可达性验证方法 - Google Patents
一种面向线性约束代码的有界可达性验证方法 Download PDFInfo
- Publication number
- CN105808429A CN105808429A CN201610122074.1A CN201610122074A CN105808429A CN 105808429 A CN105808429 A CN 105808429A CN 201610122074 A CN201610122074 A CN 201610122074A CN 105808429 A CN105808429 A CN 105808429A
- Authority
- CN
- China
- Prior art keywords
- cfg
- path
- code
- instrument
- bounded
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 28
- 238000012795 verification Methods 0.000 title claims abstract description 22
- 230000008569 process Effects 0.000 claims abstract description 6
- 239000000284 extract Substances 0.000 claims description 2
- 230000037361 pathway Effects 0.000 claims description 2
- 230000007704 transition Effects 0.000 claims 1
- 238000005516 engineering process Methods 0.000 abstract description 6
- 239000012634 fragment Substances 0.000 description 3
- 238000010200 validation analysis Methods 0.000 description 3
- 238000004880 explosion Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
Abstract
本发明公开了一种面向线性约束代码的有界模型验证方法,包括如下步骤:步骤1:构建代码的控制流程图CFG状态模型;步骤2:结合步骤1中构建的CFG状态模型,从程序的起始状态起,验证代码的CFG状态模型在有界步数K之内是否可达,直到K步之内的所有路径遍历结束或者某条路径可达为止;最后给出验证结果。本发明使用了SAT,SMT和IIS反馈等技术对代码模型的可达性验证过程进行了优化,可以有效缩短代码的验证时间和减少待寻找路径的数目,较现有的DFS算法的可达性验证效率更高,可以帮助软件测试人员更高效地进行代码的验证工作。
Description
技术领域
本发明属于软件工程及形式化方法领域,尤其涉及一种面向线性约束代码的有界可达性验证方法。
背景技术
模型检验是形式化方法的一种。模型检验将系统行为表示成形式化模型,然后对需验证的性质用时态逻辑等规约进行描述。验证过程就是遍历系统形式化模型状态空间以检验性质规约是否满足。模型检验的优点是整个验证过程全自动无须人机交互,当性质不满足的时候,模型检验能够提供反例来定位设计错误,并且当结束未发现问题时,保证系统对于被检验规约的正确性。
模型检验面临的主要难点是状态空间爆炸,当系统复杂而庞大的时候,状态数会呈指数型上升,模型检验的效率会非常低下。
发明内容
针对现有技术中存在状态空间爆炸的问题,本发明提出一种面向线性约束代码的有界模型验证方法,判断线性约束代码在K步之内是否可满足给定目标规约,从而给出程序在K步之内是否正确的结果。
一种面向线性代码的有界可达性验证方法,其特征在于,该方法包括如下步骤:
S1:获取程序代码的含路径约束控制流程图(CFG)模型
所述获取程序代码的CFG模型包括以下步骤:
S11:获取用户输入的C程序源文件和验证条件(验证可到达行数、有界步数K和可满足约束条件)
S12:抽象出C程序源文件的CFG状态模型,并将信息填充到自定义的CFG数据结构中
S2:针对S11获取的验证条件和S12中构建的CFG状态模型,从程序的起始状态起,验证代码的CFG状态模型在有界步数K之内是否可达
所述验证代码的CFG模型在有界步数K之内是否可达包括以下步骤:
S21:根据S12中给出的CFG状态模型,对其进行有界值为K的图形结构编码,编码的形式是逻辑命题集,利用SAT工具对其进行求解,如果命题集不可解,则输出不可达,意味着不存在可在图形结构上抵达目标行的路径;若有解,则存在相关路径,输出SAT工具求解结果,解码得到CFG图形结构上抵达目标行的路径
S22:将S21中得到的路径上路径约束进行编码输入到线性SMT工具中,如果约束条件满足则输出起始状态到终止状态可达;如果约束条件不满足,则将其交于IIS分析;
S23:IIS将S22中对应的约束提取出不可约不可解集合,将相应集合中约束回归映射到CFG结构中获得相应的不可行路径片段,并反馈至SAT工具中在后续遍历中规避含相关片段的路径,然后转到步骤S21,直到SAT工具报告无解或者线性SMT工具不再输出约束条件不满足。
本发明的有益效果如下:使用代码分析工具将C程序代码抽象成对应的CFG状态模型,使用SAT约束求解和线性SMT约束求解两项技术来判定代码在有界步数K内是否可达,同时通过IIS技术获得不可满足的最小约束集合,然后将这个最小约束集合回归成CFG上不可行片段,并将相关不可行片段转化后加入到SAT约束求解器,在路径求解中对相关不可行路径进行规避以加速整个验证过程。本发明能够针对线性代码进行有界步数的可达性验证,有效减少了验证的时间。由于K步内路径数目有穷,此过程一定终止。
附图说明
图1是本发明实施例的CFG状态模型图。
具体实施方式
下面结合实施例和说明书附图对本发明做进一步说明。
本实施例通过一个线性程序的代码进行详细说明。
首先是通过步骤S1获取该线性代码的带路径约束CFG模型。其具体过程如下:
S11步骤,获取用户输入的代码源文件,即上述代码,和验证条件(目标验证行数16和有界步数40)
S12步骤,根据输入的代码源文件,将其抽象为如图1所示的对应的CFG状态模型,该模型存储了基本块之间的关系,基本块和定向边缘上的信息分别为赋值等操作和跳转信息,因此该状态模型完整的表达了程序代码中的各项信息。另外,根据输入的验证行数16,映射到要验证的CFG状态为s8。
步骤S1之后是CFG状态模型的有界可达性验证过程,也就是前述步骤S2:针对S11获取的验证条件和S12中构建的CFG状态模型,从程序的起始状态起,验证代码的CFG模型在有界步数K之内是否可达。本实施例中,使用SAT工具来实现对CFG状态模型结构图的遍历;使用SMT工具来实现对寻找到的图像路径上的约束进行求解;使用IIS技术反馈不可达的路径至SAT工具中,重复上述步骤,直到所有K(40)步之内的路径遍历结束或者某条路径可达为止。最后给出验证结果。
具体分析过程根据如下步骤实现:
S21:针对图1的状态结构模型进行图形结构编码(编码过长,不给出具体的编码),起点是s0,终点是s8,输入到SAT工具中。在SAT工具运行过程中会找出大量的路径,为了体现验证过程,本实施例选择s0^s1^s2^s4^s6^s7^s1^s8这一条路径来进行验证。
S22:SMT工具输入的是不等式组,根据S21得出的路径,抽取相应的约束条件组并输入到SMT工具中,具体到本实施例中,如下所示:
X=0;
Y=0;
X=2;
X+Y<=20;
X>10;
Y>4;
X+Y>20;
SMT工具通过计算发现这组不等式不可解,因而这条路径是不可达的,交于IIS处理。
S23:IIS技术用于回馈某条路径到SAT中,SAT工具便不会再寻找该路径。对于步骤S22中给出的路径,通过IIS抽取矛盾的不等式组,IIS判断出最小的不可约矛盾组是X=2和X>10,因此这组矛盾不等式所对应的路径s0^s1^s2^s4将被封锁,下次SAT工具不会给出包含该路径的路径。
在上述步骤循环S21->S22->S23->S21…并结束之后,本发明方法最终将给出一个代码是否可达的结果。在本实施例中,最终在遍历了18条路径之后,找出了代码运行到最后终点是否可达的结果。路径如下:
s0^s1^s2^s3^s7^s1^s2^s3^s7^s1^s2^s3^s7^s1^s2^s4^s5^s6^s7^s1^s2^s4^s5^s6^s7^s1^s2^s4^s5^s6^s7^s1^s8
本发明已以较佳实施例公开如上,但它们并不是用来限定本发明,凡不脱离本发明之精神和范围内,自当可作各种变化或润饰,因此本发明的保护范围应当以本申请的权利要求保护范围所界定的为准。
Claims (4)
1.一种面向线性约束代码的有界模型验证方法,其特征在于,包括以下步骤:
S1:获取程序代码和验证条件;
S2:抽象出程序代码的带路径约束CFG状态模型;
S3:从程序的起始状态起,对所述CFG图形结构在界值为K内的分支结构进行编码;
S4:对K值内行为进行遍历,路径约束编码并求解,给出验证结果。
2.根据权利要求1所述的验证方法,其特征在于:
所述验证条件包括:目标代码所在行数、有界步数K和待满足约束条件;
抽象出所述CFG状态模型后,将信息填充到CFG数据结构中。
3.根据权利要求2所述的验证方法,其特征在于:所述有界步数K指程序代码抽象为所述CFG状态模型后,状态迁移的次数。
4.根据权利要求1所述的验证方法,其特征在于,步骤S4进一步包括,验证所述CFG状态模型在有界步数K之内是否可达:
S41:所述图形结构K步内分支的编码形式是逻辑命题集,利用SAT工具对其进行求解,如果命题集不可解,则输出不可达,意味着不存在可在图形结构上抵达目标行的路径;若有解,则存在相关路径,输出SAT工具求解结果,解码得到CFG图形结构上抵达目标行的路径;
S42:将S41中得到的路径上路径约束进行编码输入到线性SMT工具中,如果约束条件满足则输出起始状态到终止状态可达;如果约束条件不满足,则将其交于IIS分析;
S43:IIS提取出不可约不可解集合,映射到所述CFG图形结构中获得相应的路径,并反馈至SAT工具中,然后转到步骤S41,直到SAT工具报告无解或者线性SMT工具不再输出约束条件不满足。由于K步内路径数目有穷,此过程一定终止。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610122074.1A CN105808429A (zh) | 2016-03-03 | 2016-03-03 | 一种面向线性约束代码的有界可达性验证方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610122074.1A CN105808429A (zh) | 2016-03-03 | 2016-03-03 | 一种面向线性约束代码的有界可达性验证方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105808429A true CN105808429A (zh) | 2016-07-27 |
Family
ID=56466652
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610122074.1A Pending CN105808429A (zh) | 2016-03-03 | 2016-03-03 | 一种面向线性约束代码的有界可达性验证方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105808429A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106294148A (zh) * | 2016-08-08 | 2017-01-04 | 清华大学 | 基于扩展符号变迁系统的c语言程序软件验证方法及装置 |
CN111444112A (zh) * | 2020-04-27 | 2020-07-24 | 南京大学 | 一种基于共享不可行路径池的代码并行验证方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103336884A (zh) * | 2013-05-30 | 2013-10-02 | 南京大学 | 一类非线性混成系统的建模与面向路径的可达性分析方法 |
CN103400025A (zh) * | 2013-07-04 | 2013-11-20 | 南京大学 | 一种混成系统的可达性分析方法 |
CN105224736A (zh) * | 2015-09-22 | 2016-01-06 | 南京大学 | 一种基于约束求解的智能电网系统鲁棒性验证方法 |
-
2016
- 2016-03-03 CN CN201610122074.1A patent/CN105808429A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103336884A (zh) * | 2013-05-30 | 2013-10-02 | 南京大学 | 一类非线性混成系统的建模与面向路径的可达性分析方法 |
CN103400025A (zh) * | 2013-07-04 | 2013-11-20 | 南京大学 | 一种混成系统的可达性分析方法 |
CN105224736A (zh) * | 2015-09-22 | 2016-01-06 | 南京大学 | 一种基于约束求解的智能电网系统鲁棒性验证方法 |
Non-Patent Citations (1)
Title |
---|
DINGBAO XIE ETC.: "SAT–LP–IIS joint-directed path-oriented bounded reachability analysis of linear hybrid automata", 《FORMAL METHODS IN SYSTEM DESIGN》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106294148A (zh) * | 2016-08-08 | 2017-01-04 | 清华大学 | 基于扩展符号变迁系统的c语言程序软件验证方法及装置 |
CN111444112A (zh) * | 2020-04-27 | 2020-07-24 | 南京大学 | 一种基于共享不可行路径池的代码并行验证方法和装置 |
CN111444112B (zh) * | 2020-04-27 | 2023-12-12 | 南京大学 | 一种基于共享不可行路径池的代码并行验证方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106708719B (zh) | 业务功能的测试方法和装置 | |
CN108427632B (zh) | 自动测试方法及装置 | |
CN102624574B (zh) | 一种对协议实现进行安全测试的方法及装置 | |
CN109948276B (zh) | 失效分析方法、装置、设备和存储介质 | |
CN108733404B (zh) | 一种针对fpga固件的精准逆向工程方法 | |
EP3264274A1 (en) | Input discovery for unknown program binaries | |
CN112380046B (zh) | 计算结果校验方法、系统、装置、设备及存储介质 | |
US9043746B2 (en) | Conducting verification in event processing applications using formal methods | |
Yao et al. | Formal modeling and systematic black-box testing of sdn data plane | |
CN105512130A (zh) | 数据源融合的方法和装置 | |
CN104750608A (zh) | 一种程序中基于动态符号执行的自动错误定位方法 | |
CN105808429A (zh) | 一种面向线性约束代码的有界可达性验证方法 | |
CN103336884A (zh) | 一类非线性混成系统的建模与面向路径的可达性分析方法 | |
CN103678123A (zh) | 一种适用于处理器系统单粒子软错误脆弱点识别方法 | |
Wang et al. | Detecting SQL vulnerability attack based on the dynamic and static analysis technology | |
Bhurke et al. | Methods of Formal Analysis for ICS Protocols and HART-IP CPN modelling | |
CN102663190A (zh) | Pptl符号模型检测方法 | |
CN103400025A (zh) | 一种混成系统的可达性分析方法 | |
Barnat et al. | Executing model checking counterexamples in Simulink | |
CN104750610A (zh) | 基于占优度的消息传递并行程序变异体约简方法 | |
CN103812730A (zh) | 一种多小区ttcn协议一致性测试平台系统 | |
CN105577424A (zh) | 一种基于数据溯源图的数据资产质量监测方法 | |
CN104657139B (zh) | 用于故障注入的可视化命令流生成系统及方法 | |
Feng et al. | Bintaint: a static taint analysis method for binary vulnerability mining | |
US10769333B1 (en) | System, method, and computer program product for debugging one or more observable failures in a formal verification |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160727 |
|
RJ01 | Rejection of invention patent application after publication |