当前位置: 首页 > 专利查询>东南大学专利>正文

一种基于离线约束图的指针分析方法技术

技术编号:15103932 阅读:58 留言:0更新日期:2017-04-08 14:22
本发明专利技术公开了一种基于离线约束图的指针分析方法,包括两个阶段:离线分析阶段和在线分析阶段。在离线分析阶段,ADD首先构造离线约束图,其次在离线约束图中为每个结点定义并计算祖先集和后裔集,然后计算离线约束图对应的支配树,基于支配结点信息计算指针等价的顶层变量对信息。在线分析阶段,ADD一方面利用结点的祖先集和后裔集进行在线循环检测,另一方面利用指针等价的顶层变量对信息来降低分析过程中结点间指向信息的传播开销。与现有的基于包含的指针分析方法LCD相比,ADD能够在不影响指向信息精度的前提下提高指针分析的效率。

【技术实现步骤摘要】

本专利技术属于静态程序分析领域,涉及一种指针分析方法。
技术介绍
指针分析是一种静态程序分析技术,它的目标是静态确定一个指针变量能够指向哪些地址(变量或函数的存储位置),也就是静态确定一个指针变量在程序运行时所有可能的值。指针分析以程序源代码(或某种中间代码表示)作为输入,输出该程序所包含的指针指向信息。由于指针(引用)在C/C++(Java)程序中被广泛使用,许多静态程序分析技术需要根据指针指向信息来解析程序中包含的间接引用,指针分析的结果直接影响其它静态程序分析技术的有效性,指针分析作为许多静态程序分析技术的使能技术一直是一项重要的议题。目前软件系统和工业级源代码库的规模越来越大(如数百万代码行甚至数千万代码行),对于动态性较弱、使用指针较少、规模较小的程序,现有的指针分析技术已经较为成熟,可以很好地分析处理这些程序。然而,对于规模更大、动态性更强的程序,现有指针分析算法还存在许多问题,需要进一步地研究:(1)如何在不影响指向信息精度的条件下,提高指针分析算法的效率和可扩展性;(2)如何提高指针分析算法的精度,同时尽可能地保证算法的效率和可扩展性;(3)如何设计适用于并发程序的指针分析算法等。在设计一个指针分析算法时,首先需要对程序的元素(如程序语句,函数,结构体等)进行建模,这些建模策略也被称为分析维度;如流敏感性,上下文敏感性,域敏感性等。从理论上来说,精确的指针分析是非常困难的:当允许动态内存分配时,过程内流敏感指向分析是不可判定的;当不允许动态内存分配时,过程内流敏感指向分析是PSPACE-完全问题;当不允许动态内存分配时,对于包含任意数目指针间接访问操作符的程序来说,流不敏感指向分析是NP-Hard问题。这些复杂性结论表明现有的指针分析算法都是近似算法,都需要在算法的精度、效率和可扩展性之间进行折衷。流敏感性和上下文敏感性是两个独立的分析维度;流敏感性关注的是分析算法如何处理函数内的控制流信息:流敏感分析和流不敏感分析;上下文敏感性侧重的是分析算法如何处理函数间的调用信息:上下文敏感分析和上下文不敏感分析。一个指针分析算法根据其处理函数内的控制流信息时所采取的策略可以被划分为流敏感分析或流不敏感分析;同时根据其处理函数间调用信息时所使用的策略可以被划分为上下文敏感分析或上下文不敏感分析。因此,同时考虑流敏感性和上下文敏感性,现有的指针分析算法将被划分成以下四类:流不敏感上下文不敏感算法、流不敏感上下文敏感算法、流敏感上下文不敏感算法、流敏感上下文敏感算法。总的来说,基于合并的流不敏感上下文不敏感算法(Steensgaard指针分析)具有较好的效率和可扩展性(scalability),但是指针分析的精度很差;基于包含的流不敏感上下文不敏感、流敏感上下文不敏感算法和流敏感上下文敏感算法具有更好的精度,但是指针分析过程的效率和可扩展性将会变得很差。为了在算法的精度、效率和可扩展性之间获得一个较好的折衷,基于包含的流不敏感上下文不敏感算法一直是指针分析领域的研究热点之一。对基于包含的流不敏感(上下文不敏感)指针分析算法的研究主要是围绕如何设计有效的在线循环检测技术,因为在线循环检测技术能够在不影响指向信息精度的条件下,显著地提高基于包含的指针分析算法的效率和可扩展性。对基于包含的流不敏感(上下文不敏感)指针分析算法来说,在线循环检测过程需要被多次触发;因此,在设计在线循环检测技术时就存在一个难点:如何确定在线循环检测的频度来控制指针分析算法的开销,也就是说,在约束求解的过程中,决定什么时候触发循环检测。在确定在线循环检测的频度时存在两个极端:一方面,如果每添加一条有向边到约束图中,约束求解算法就触发一次循环检测;在这种情形下,很多循环检测过程是不必要的,因为约束图此时并没有形成循环,过早触发循环检测将产生大量不必要的时间开销用于搜索约束图;另一方面,如果约束求解算法没有及时触发循环检测,也就是说,有向边不断地被加入到约束图中,约束图存在很多未被检测出来的循环;在这种情形下,结点的指向信息将沿着这些循环被冗余传播。没有及时触发循环检测将会影响算法的效率以及会减少循环检测和合并本身所带来的收益。因此,在设计一个在线循环检测技术来改进基于包含的指针分析算法时,设计者需要在循环检测的开销和指向信息沿着未被检测出来的循环被冗余传播的开销之间做出权衡,从而提高基于包含的指针分析算法的效率和可扩展性。不同的在线循环检测技术代表了对基于包含的指针分析算法的不同改进。Hardekopf等人提出了一种有趣的在线循环检测技术LCD(lazycycledetection),Hardekopf等人基于这种在线循环检测技术实现了一个基于包含的指针分析算法,称为LCD算法。LCD基于如下策略进行在线循环检测:在沿着有向边进行指向信息传播之前,LCD首先判断这条有向边的源结点和目的结点是否具有相同的指向集;如果这两个结点具有相同的指向集,LCD认为此时约束图中存在一个循环,并触发深度优先搜索过程去寻找约束图中存在的循环。LCD来源于这样一个想法:因为在指针分析算法终止时,同一个循环中的结点将具有相同的指向集;所以,当有向边的两个结点具有相同的指向集时,约束图中很可能存在循环。LCD的优点在于:与其它在线循环检测技术相比,LCD采用的循环检测策略是惰性的,也就是说,只有在约束图中非常可能存在循环的情况下,LCD才会触发循环检测。这种在线循环检测策略极大地降低了在线循环检测过程本身的开销,实验结果表明,与其它在线循环检测技术相比,LCD的实际效果很好。LCD的缺陷在于:(1)这种在线循环检测策略的有效性依赖于这样一个假设:有向边的两个结点具有相同的指向集通常是因为这两个结点在同一个循环中。如果上述假设经常不成立,LCD的在线循环检测策略将导致LCD在约束图中不存在循环的情况下去搜索约束图,这将极大地影响指针分析算法的效率;(2)对SPEC2000测试集,绝大多数LCD触发的深度优先搜索过程是没有发现循环的(平均99.7%),也就是说,LCD触发的深度优先搜索过程绝大多数是多余的,只有极少数的优先搜索过程能够发现并合并循环。因此,LCD的效率可以被进一步地提高,如果可以显著地减少上述LCD触发的多余的深度优先搜索过程。由于在线循环检测策略能够显著地提高基于包含的流不敏感指针分析算法的效率和可扩展性,因此,如何设计更有效的在线循环检测策略(包括如何进一步改进LCD)仍然是个热点,值得进一步深入研究。专利技术内本文档来自技高网...

【技术保护点】
一种基于离线约束图的指针分析方法,其特征在于,该方法包括如下步骤:(1)根据输入约束集,构造离线约束图;(2)在所述离线约束图中触发一次深度优先搜索,得到一个有向无环图和多个循环,并记录循环信息;(3)在所述有向无环图中,根据结点的拓扑序计算每个结点的祖先集和后裔集;同时在所述有向无环图中,利用Lengauer and Tarjan算法计算该图对应的支配树或支配森林;(4)在所述支配树或支配森林中,计算指针等价的顶层变量对信息;(5)根据输入约束集,构造初始的在线约束图,然后在所述在线约束图中,将与步骤(4)得到的顶层变量对信息对应的结点合并;(6)首先利用同时满足如下条件的结点对优先级队列current进行初始化:(a)结点的指向集为非空;(b)结点含有出边或者含有复杂约束,所述复杂约束为加载约束或存储约束;然后基于工作集算法框架迭代处理current,得到指针指向信息。

【技术特征摘要】
1.一种基于离线约束图的指针分析方法,其特征在于,该方法包括如下步骤:
(1)根据输入约束集,构造离线约束图;
(2)在所述离线约束图中触发一次深度优先搜索,得到一个有向无环图和多个
循环,并记录循环信息;
(3)在所述有向无环图中,根据结点的拓扑序计算每个结点的祖先集和后裔集;
同时在所述有向无环图中,利用LengauerandTarjan算法计算该图对应的支配树
或支配森林;
(4)在所述支配树或支配森林中,计算指针等价的顶层变量对信息;
(5)根据输入约束集,构造初始的在线约束图,然后在所述在线约束图中,将
与步骤(4)得到的顶层变量对信息对应的结点合并;
(6)首先利用同时满足如下条件的结点对优先级队列current进行初始化:(a)
结点的指向集为非空;(b)结点含有出边或者含有复杂约束,所述复杂约束为加载约
束或存储约束;然后基于工作集算法框架迭代处理current,得到指针指向信息。
2.根据权利要求1所述的一种基于离线约束图的指针分析方法,其特征在于,
所述步骤(3)中,计算一个结点p的祖先集的具体流程为:
在所述有向无环图的转置图中,以结点p为根进行深度优先搜索,该搜索过程过
程中遇到的所有结点记为结点p在有向无环图中的祖先集;
计算一个结点p的后裔集的具体流程为:
在所述有向无环图中,以结点p为根进行深度优先搜索,该搜索过程过程中遇到
的所有结点记为结点p在有向无环图中的后裔集。
3.根据权利要求1所述的一种基于离线约束图的指针分析方法,其特征在于,
所述步骤(4)的具体流程为:
在支配树或支配森林中,检查每个点对(m,n)是否为指针等价的顶层变量对,
从而得到指针等价的顶层变量对信息,其中m为为支配树或支配森林的结点,n为支
配树或支配森林的结点;具体判断方法为,如果m与n同时满足下面三个条件,则m
与n是指针等价的顶层变量对,否则不是:
(a)n是m的直接支配结点idom(m);
(b)m与n都是顶层变量;
(c)在离线约束图中,从n到m的所有路径都只涉及顶层变量结点,即从n到

\tm的所有路径不包含取地址变量结点或解引用结点。
4.根据权利要求1所述的一种基于离线约束图的指针分析方法,其特征在于,
所述步骤(6)中,基于工作集算法框架迭代处理优先级队列current,是对优先级队
列current中的结点逐个进行如下处理:
(i)当结点s不存在复杂约束时,直接进入步骤(iii),当结点s存在复杂约束
时,按照如下方式添加新的有向边到在...

【专利技术属性】
技术研发人员:李必信刘飞卢佩西·纳斯热
申请(专利权)人:东南大学
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1