CN112286831A - 多重循环的数据流分析方法、系统、设备及存储介质 - Google Patents
多重循环的数据流分析方法、系统、设备及存储介质 Download PDFInfo
- Publication number
- CN112286831A CN112286831A CN202011595969.XA CN202011595969A CN112286831A CN 112286831 A CN112286831 A CN 112286831A CN 202011595969 A CN202011595969 A CN 202011595969A CN 112286831 A CN112286831 A CN 112286831A
- Authority
- CN
- China
- Prior art keywords
- data stream
- analyzed
- loop
- cycle
- state diagram
- 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
Images
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
Abstract
本发明公开了一种多重循环的数据流分析方法、系统、设备及存储介质,包括:对待分析数据流的值依赖图进行全局循环摘要提取;以提取的全局循环摘要为基础构建状态图;根据状态图求解待分析数据流的循环执行次数,该方法、系统、设备及存储介质能够准确求解数据流的循环执行次数。
Description
技术领域
本发明属于软件分析中的静态分析领域,涉及一种多重循环的数据流分析方法、系统、设备及存储介质。
背景技术
数据流分析指在控制流图的基础上通过迭代分析得到感兴趣的数据流结果,包括可达定义分析、活跃变量分析、可用表达式分析等。这些分析是建立在划分好基本块和流图的基础上,通过在控制流图中的迭代、传递和合并完成对流图中不动点状态的计算。
Stanford大学的YichenXie及其合作者关于溢出漏洞检测中循环次数求解问题,提出了模拟运行的方案。在处理循环时,程序模拟运行被检测程序的循环内代码,在循环变量符合循环终止条件时停止运行循环,统计循环运行次数,其缺点在于:采用模拟执行的方式计算循环不动点,效率十分低,大部分循环的执行状况在进行程序静态分析时无法被模拟执行完全。以此方案进行的缺陷检测,无法解决含有较复杂循环的缓冲区溢出漏洞检测问题,检测时间长、精度差、缺陷漏报率高。
另外,Marple中对每个循环都设置一个固定的迭代次数,简单推测循环可能的执行次数,这种方法计算速度非常快,解决了模拟运行会陷入死循环的问题。其缺点在于:指定循环次数仅能满足效率需求,错误率非常高,给循环内变量取值计算引入很多的误差。
使用静态分析技术检测缓冲区溢出漏洞一般遵循以下步骤:(1) 选取合适的分析模型对目标代码进行建模 (2) 在模型中寻找脆弱性结点(可能发生溢出漏洞的结点)(3)在结点附近作进一步分析,提取信息生成判断约束,使用约束求解工具 判断溢出是否发生。生成判断溢出是否发生的约束需要进行区间的结果。
在值依赖图上进行的区间分析可以很好地处理流敏感信息,对不含跳转的程序得出精确的结果。在实际程序中,大部分运行过程是在循环中完成的,以上区间分析过程无法对循环进行处理。现有的数据流区间分析方法处理循环是困难的,一般只能跳过或者模拟一定次数的运算。对于多重嵌套的循环,此类近似方法也失去了效果,其主要问题在于无法准确求解循环的执行次数。
发明内容
本发明的目的在于克服上述现有技术的缺点,提供了一种多重循环的数据流分析方法、系统、设备及存储介质,该方法、系统、设备及存储介质能够准确求解数据流的循环执行次数,实现数据流分析。
为达到上述目的,本发明所述的多重循环的数据流分析方法包括:
对待分析数据流的值依赖图进行全局循环摘要提取;
以提取的全局循环摘要为基础构建状态图;
根据状态图求解待分析数据流的循环执行次数,根据待分析数据流的循环执行次数进行数据流分析。
提取的全局循环摘要包括值依赖图的值依赖条件中所有条件变量以及与条件变量相关的节点与边形成的约束条件。
所述状态图中记录有循环层层数变化进行状态转移时的约束条件、触发条件以及条件变量在状态转移后的赋值。
对待分析数据流的值依赖图进行全局循环摘要提取之前还包括:获取对待分析数据流的值依赖图,对待分析数据流的值依赖图进行简化。
对值依赖图进行简化的具体过程为:
对值依赖图中的所有条件变量筛选,仅保留与值依赖条件中条件变量相关的节点及边,删除与值依赖条件中条件变量无关的节点及边。
以提取的全局循环摘要为基础构建状态图的具体过程为:
提取全局循环摘要中记录的所有循环变量值转化路径,以各条循环变量值转化路径作为状态节点构建状态图。
根据状态图求解待分析数据流的循环次数的具体过程为:根据状态图生成循环摘要,使用SMT约束求解器求解待分析数据流的循环执行次数。
待分析数据流的值依赖图中,循环变量值转化路径的控制条件中的变量,在任意一次循环执行过程的前后改变量均已知。
一种多重循环的数据流分析系统包括:
提取模块,用于对待分析数据流的值依赖图进行全局循环摘要提取;
构建模块,用于以提取的全局循环摘要为基础构建状态图;
求解模块,用于根据状态图求解待分析数据流的循环执行次数,根据待分析数据流的循环执行次数进行数据流分析。
一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述多重循环的数据流分析方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现所述多重循环的数据流分析方法的步骤。
本发明具有以下有益效果:
本发明所述的多重循环的数据流分析方法、系统、设备及存储介质在具体操作时,以提取的全局循环摘要为基础构建状态图,该状态图可以直观精确的显示出循环过程,然后根据状态图求解待分析数据流的循环执行次数,以准确、高效率预测循环的执行次数,从而大幅提升循环的区间分析精度及缓冲区溢出缺陷检测精度,最后根据待分析数据流的循环执行次数进行数据流分析。
进一步,对值依赖图中的循环条件变量信息筛选,仅保留与值依赖条件中条件变量相关的节点及边,删除与值依赖条件中条件变量无关的节点及边,以剔除与控制流无关的信息,提高处理的速度。
附图说明
构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明的流程图;
图2为本发明的结构示意图。
具体实施方式
下面将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
以下详细说明均是示例性的说明,旨在对本发明提供进一步的详细说明。除非另有指明,本发明所采用的所有技术术语与本申请所属领域的一般技术人员的通常理解的含义相同。本发明所使用的术语仅是为了描述具体实施方式,而并非意图限制根据本发明的示例性实施方式。
需要说明的是,值依赖图(ValueDependencyGraph,VDG)是一种表示程序中值流向和依赖关系的图模型,为有向图。值依赖图作为一个过程或程序的抽象表现,在静态分析过程中被建立并维护为一个抽象数据结构。值依赖图表示程序内所有变量的可能流向,以及该流向对应的控制流条件。建立值依赖流图使得程序间变量关系和程序抽象结构更为规范和可读,为后续进行数据流分析提供了极大的便利。
状态图(Statechart Diagram)为描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应。通常创建一个UML状态图是为了以下的研究目的:研究类、角色、子系统、或组件的复杂行为。
状态图用于显示状态机(它指定对象所在的状态序列)、使对象达到这些状态的事件和条件、以及达到这些状态时所发生的操作。
状态机用于对模型元素的动态行为进行建模,更具体地说,就是对系统行为中受事件驱动的方面进行建模。状态机专门用于定义依赖于状态的行为,其行为不会随着其元素状态发生变化的模型元素不需要用状态机来描述其行为。
SMT约束求解器为SMT(Satisfiability Modulo Theory)可满足性问题的自动化求解工具,它可以处理包含一些特定理论(定长位向量、线性算数运算、未解释函数等)的一阶谓词逻辑。近年来SMT 求解器的快速发展给程序静态分析和程序验证带来了新的机遇,它能够支持逻辑的可满足性,极大地提高了程序分析的精度和分析效率。
参考图1,本发明所述的多重循环的数据流分析方法包括:
1)对待分析数据流的值依赖图进行全局循环摘要提取;
所述提取的全局循环摘要包括值依赖图的值依赖条件中所有条件变量以及与条件变量相关的节点与边形成的约束条件。
步骤1)的具体过程为:
11)获取对待分析数据流的值依赖图;
12)对待分析数据流的值依赖图进行简化;
具体的,对值依赖图中的所有条件变量筛选,仅保留与值依赖条件中条件变量相关的节点及边,删除与值依赖条件中条件变量无关的节点及边,使得后续状态图中的节点数量进一步减少。
13)对待分析数据流的值依赖图进行全局循环摘要提取。
2)以提取的全局循环摘要为基础构建状态图;
具体的,提取全局循环摘要中记录的所有循环变量值转化路径,以各条循环变量值转化路径作为状态节点构建状态图。
状态图中记录有循环层层数变化进行状态转移时的约束条件、触发条件以及条件变量在状态转移后的赋值。
本发明适合分析控制流较为简单的多层循环,即循环内所有循环变量的值转化路径的控制条件中的变量,在任意一次循环执行过程前后改变量为同一常量,循环摘要的所有值转化路径,以判断所述值依赖图是否符合分析条件,当值依赖图不符合分析条件下,则终止循环分析的过程。
3)根据状态图生成循环摘要,使用SMT约束求解器求解待分析数据流的循环执行次数,根据待分析数据流的循环执行次数进行数据流分析。
具体的,将从最内层循环跳出的约束图路径寻找出,在转化为smt-lib形式的约束,输入JavaSMT求解器进行求解,得跳出循环所需的循环次数,即可得到多层变量的估计循环执行次数,该循环执行次数可直接用于在值依赖图上进行的循环展开分析。
参考图2,本发明所述的多重循环的数据流分析系统包括:
提取模块,用于对待分析数据流的值依赖图进行全局循环摘要提取;
构建模块,用于以提取的全局循环摘要为基础构建状态图;
求解模块,用于根据状态图求解待分析数据流的循环执行次数。
一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述多重循环的数据流分析方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现所述多重循环的数据流分析方法的步骤。
实施例一
本实施例中,示例计算机程序代码为:
对于此类发生在内部的双重循环,能否求解循环次数关系到能否准确解出数组下标变量的值:
抽取出其中i、j所在的值传递路径,构建状态图并求解约束,得到循环执行次数的精确估值,根据此循环次数信息进行变量区间分析,检测出此处可能的缓冲区溢出缺陷(第14行):
最后需要说明的是,本发明通过对值依赖图进行简化处理,进行全局循环信息摘要提取,若符合分析条件,以简化后的值依赖图中的循环变量转化路径构建状态图,能够直观精确地显示出值依赖图循环状态转化的信息,最终利用状态图得到的从最内层循环跳出的总约束,进行SMT求解以求得精确循环执行次数,具有准确、快速预测循环执行次数、生成循环摘要的优势。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。
Claims (11)
1.一种多重循环的数据流分析方法,其特征在于,包括:
对待分析数据流的值依赖图进行全局循环摘要提取;
以提取的全局循环摘要为基础构建状态图;
根据状态图求解待分析数据流的循环执行次数,根据待分析数据流的循环执行次数进行数据流分析。
2.根据权利要求1所述的多重循环的数据流分析方法,其特征在于,提取的全局循环摘要包括值依赖图的值依赖条件中的所有条件变量以及与条件变量相关的节点与边形成的约束条件。
3.根据权利要求1所述的多重循环的数据流分析方法,其特征在于,所述状态图中记录有循环层层数变化进行状态转移时的约束条件、触发条件以及条件变量在状态转移后的赋值。
4.根据权利要求1所述的多重循环的数据流分析方法,其特征在于,对待分析数据流的值依赖图进行全局循环摘要提取之前还包括:获取对待分析数据流的值依赖图,对待分析数据流的值依赖图进行简化,对简化后的值依赖图进行全局循环摘要提取。
5.根据权利要求4所述的多重循环的数据流分析方法,其特征在于,对值依赖图进行简化的具体过程为:
对值依赖图中的所有条件变量进行筛选,仅保留与值依赖条件中条件变量相关的节点及边,删除与值依赖条件中条件变量无关的节点及边。
6.根据权利要求1所述的多重循环的数据流分析方法,其特征在于,以提取的全局循环摘要为基础构建状态图的具体过程为:
提取全局循环摘要中记录的所有循环变量值转化路径,以各条循环变量值转化路径作为状态节点构建状态图。
7.根据权利要求1所述的多重循环的数据流分析方法,其特征在于,根据状态图求解待分析数据流的循环次数的具体过程为:根据状态图生成循环摘要,使用SMT约束求解器求解待分析数据流的循环执行次数。
8.根据权利要求1所述的多重循环的数据流分析方法,其特征在于,待分析数据流的值依赖图中,循环变量值转化路径的控制条件中的变量,在任意一次循环执行过程的前后改变量均已知。
9.一种多重循环的数据流分析系统,其特征在于,包括:
提取模块,用于对待分析数据流的值依赖图进行全局循环摘要提取;
构建模块,用于以提取的全局循环摘要为基础构建状态图;
求解模块,用于根据状态图求解待分析数据流的循环执行次数,根据待分析数据流的循环执行次数进行数据流分析。
10.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现权利要求1-8任一项所述多重循环的数据流分析方法的步骤。
11.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-8任一项所述多重循环的数据流分析方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011595969.XA CN112286831A (zh) | 2020-12-30 | 2020-12-30 | 多重循环的数据流分析方法、系统、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011595969.XA CN112286831A (zh) | 2020-12-30 | 2020-12-30 | 多重循环的数据流分析方法、系统、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112286831A true CN112286831A (zh) | 2021-01-29 |
Family
ID=74426321
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011595969.XA Pending CN112286831A (zh) | 2020-12-30 | 2020-12-30 | 多重循环的数据流分析方法、系统、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112286831A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220138082A1 (en) * | 2020-07-15 | 2022-05-05 | Copado, Inc. | Applied Computer Technology for High Efficiency and Scalable Value Stream Mapping |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109446066A (zh) * | 2018-09-20 | 2019-03-08 | 北京大学 | C/c++程序中不可达代码的静态检测方法及系统 |
US20190108045A1 (en) * | 2017-10-11 | 2019-04-11 | Barefoot Networks, Inc. | Data plane program verification |
CN110244953A (zh) * | 2019-05-21 | 2019-09-17 | 北京大学 | Java程序的区间分析方法及装置 |
CN110321458A (zh) * | 2019-05-21 | 2019-10-11 | 国家电网有限公司 | 一种基于控制流图的数据流分析方法及装置 |
-
2020
- 2020-12-30 CN CN202011595969.XA patent/CN112286831A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190108045A1 (en) * | 2017-10-11 | 2019-04-11 | Barefoot Networks, Inc. | Data plane program verification |
CN109446066A (zh) * | 2018-09-20 | 2019-03-08 | 北京大学 | C/c++程序中不可达代码的静态检测方法及系统 |
CN110244953A (zh) * | 2019-05-21 | 2019-09-17 | 北京大学 | Java程序的区间分析方法及装置 |
CN110321458A (zh) * | 2019-05-21 | 2019-10-11 | 国家电网有限公司 | 一种基于控制流图的数据流分析方法及装置 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220138082A1 (en) * | 2020-07-15 | 2022-05-05 | Copado, Inc. | Applied Computer Technology for High Efficiency and Scalable Value Stream Mapping |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109739755B (zh) | 一种基于程序追踪和混合执行的模糊测试系统 | |
US7487080B1 (en) | Partitioning a model in modeling environments | |
US9477799B2 (en) | Hierarchical determination of metrics for component-based parameterized SoCs | |
US20070294655A1 (en) | Automatically generating an input sequence for a circuit design using mutant-based verification | |
US20130080993A1 (en) | Embedded system performance | |
Fernandez-Amoros et al. | A scalable approach to exact model and commonality counting for extended feature models | |
CN104090798A (zh) | 动静态结合的中断驱动程序数据竞争检测方法 | |
Bansal et al. | Holist: An environment for machine learning of higher-order theorem proving (extended version) | |
CN106529304B (zh) | 一种安卓应用并发漏洞检测系统 | |
CN110321458B (zh) | 一种基于控制流图的数据流分析方法及装置 | |
CN112286831A (zh) | 多重循环的数据流分析方法、系统、设备及存储介质 | |
CN113420520B (zh) | 集成电路装置设计仿真方法、装置、设备和可读存储介质 | |
US9063735B2 (en) | Reconfigurable processor and method for processing loop having memory dependency | |
He et al. | Prioritized Time-point-interval Petri Nets Modelling Multi-processor Real-time Systems and TCTL $ _ {x} $ | |
Sharma et al. | Performance evaluation of real-time systems | |
US8849626B1 (en) | Semantic translation of stateflow diagrams into input/output extended finite automata and automated test generation for simulink/stateflow diagrams | |
CN112631925A (zh) | 一种单变量原子违背缺陷的检测方法 | |
US20080005619A1 (en) | Validation of software execution paths | |
CN105045698A (zh) | 使用python的matplotlib分析芯片验证进度的方法 | |
Andersson et al. | Extracting simulation models from complex embedded real-time systems | |
CN113946343A (zh) | 基于行为树生成自动驾驶代码模型的方法及装置 | |
Hahn et al. | Transient reward approximation for continuous-time Markov chains | |
Jiang et al. | An exploitability analysis technique for binary vulnerability based on automatic exception suppression | |
Barros et al. | Towards an integrated tool support for the analysis of iopt nets using the spin model checker | |
Bartsch et al. | Efficient SAT/simulation-based model generation for low-level embedded software. |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210129 |