面向错误检测的指针分析技术研究

来源 :东南大学 | 被引量 : 1次 | 上传用户:mabimabide
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
指针分析是一种静态程序分析技术,它的目标是静态确定一个指针变量能够指向哪些地址(变量或函数的存储位置),也就是静态确定一个指针变量在程序运行时所有可能的值。指针分析以程序源代码(或某种中间代码表示)作为输入,输出该程序所包含的指针指向信息。由于指针(引用)在C/C++(Java)程序中被广泛使用,许多静态程序分析技术需要根据指针指向信息来解析程序中包含的间接引用,指针分析的结果直接影响其它静态程序分析技术的有效性,指针分析作为许多静态程序分析技术的使能技术一直是一项重要的议题。对于动态性较弱、使用指针较少、规模较小的程序,现有的指针分析技术已经较为成熟,可以很好地分析处理这些程序。然而,对于规模更大、动态性更强的程序,如大规模程序和并发程序,现有的指针分析算法还存在许多问题,需要进一步地研究:(1)如何在不影响指向信息精度的条件下,提高指针分析算法的效率和可扩展性;(2)如何提高指针分析算法的精度,同时尽可能地保证算法的效率和可扩展性;(3)如何设计适用于并发程序的指针分析算法等。错误检测是软件工程的研究热点之一。对于C/C++程序,为了检测程序中普遍存在的内存错误,如内存泄露(memory leak)、同一块内存空间的多次释放和空指针解引用(null pointer dereference)等,错误检测算法需要根据指针指向信息来解析程序中包含的间接引用,错误检测算法的有效性直接依赖底层指针分析算法的精度、效率和可扩展性。与顺序程序类似,对于并发程序,为了检测程序中普遍存在的错误,如数据争用(data race)等,错误检测算法同样需要根据指针指向信息来解析程序中包含的间接引用。对错误检测算法来说,理想的目标是借助于一个指向信息精度好、算法效率高和可扩展性好的指针分析算法去解析程序中包含的间接引用信息。考虑到错误检测的需求,本文对指针分析进行了深入研究,研究内容主要包含两个方面:基于包含的流不敏感指针分析算法和多线程指针分析算法。对基于包含的流不敏感指针分析算法的研究主要是围绕如何设计有效的在线循环检测技术,因为在线循环检测技术能够在不影响指向信息精度的条件下,显著地提高基于包含的指针分析算法的效率和可扩展性。本文针对现有的在线循环检测技术LCD(lazy cycle detection)存在的不足进行改进,提出了三种在线循环检测技术(ELCD、BootCD和ADD);对多线程指针分析算法的研究主要是在因果数据流分析的基础上,设计了一种基于Petri网的多线程指针分析技术。论文的主要成果表现在以下几个方面:(1)针对LCD算法存在的不足,对LCD的循环效果进行改进,提出了ELCD (extended lazy cycle detection)算法;与LCD相比,ELCD基于更精细的循环效果来检测约束图中潜在的循环,它定义的循环效果不仅依赖一条有向边的两个结点的指向集信息,同时还依赖这条边的目的结点的后继结点的指向集信息。基于更精细的循环效果,ELCD算法能够明显减少LCD算法触发的那些循环检测结果是约束图中不存在循环的循环检测过程的数目。实验结果表明ELCD算法能够在不影响LCD算法的指向信息精度的情况下提高LCD算法的效率。(2)为了进一步地提高LCD循环检测的质量(即减少LCD算法触发的那些循环检测结果是约束图中不存在循环的循环检测过程的数目),提出了BootCD (bootstrapped online cycle detection)算法;BooCD算法基于bootstrapping这样一个想法,首先利用一种高效的但不精确的指针分析算法进行一次指针分析,然后基于这些指针指向信息辅助后续指针分析算法进行在线循环检测,从而提高了后续指针分析算法的效率。具体来说,BootCD混合Steensgaard指针指向信息,定义并构造了一个新的有向图,称为bootstrapping约束图,它是andersen约束图的超图,BootCD借助bootstrapping约束图中的循环边集信息在andersen约束图中进行在线循环检测。实验结果表明,与LCD相比,BootCD显著地提高了在线循环检测的质量,减少了整个分析时间,提高了基于包含指针分析的效率。(3)提出了两种新的概念——bootstrapping约束图(bootstrapping constraint graph)和约束等价(constraint equivalence),同时设计了bootstrapping约束图的构造方法和约束等价的变量对信息的求解方法;bootstrapping约束图是BootCD算法的基础,而约束等价的作用是:(a)能够简化bootstrapping约束图(即减少bootstrapping约束图中的结点和有向边);(b)能够优化bootstrapping约束图的构造过程, 这显著地减少了BootCD离线分析的时间开销和内存耗费(即构造bootstrapping约束图和计算bootstrapping约束图的循环边集所需的时间开销和内存耗费),有助于提高BootCD算法的有效性和效率。(4)为了进一步地提高LCD在线循环检测的效率,提出了一种新的在线循环检测技术ADD (ancesto_descendant_dominator);与BootCD相比,ADD同样是基于bootstrapping这样一个想法;ADD与BootCD的区别是用于bootstrap在线循环检测的信息不同;BootCD利用bootstrapping约束图及其循环边信息来boostrapping,而ADD使用离线约束图(offline constraint graph)的结构信息来bootstrapping。具体来说,ADD首先构造离线约束图,计算并合并离线约束图中包含的循环;此时,离线约束图变成一个有向无环图(DAG);然后,在这个DAG中,为每个结点定义并计算Ancestor集和Descendant集,这些信息被用于辅助后续指针分析过程进行在线循环检测;最后,基于离线约束图中包含的必经结点信息,ADD能够识别指针等价的顶层变量对信息;合并这些顶层变量对信息能够减少后续在线分析过程中结点间指向信息传播的开销,有助于进一步提高ADD的效率。初步的实验结果表明,与LCD相比,ADD明显地提高了在线循环检测的效率,减少了整个分析时间,提高了基于包含指针分析的效率。(5)在因果数据流分析的基础上,设计了一种基于Petri网的多线程指针分析技术;具体来说,首先使用1-safe petri网来表示程序的并发控制流结构,然后研究petri网的偏序执行(partially ordered execution),其中指针指向信息沿着具有因果关系的事件进行传播;多线程程序的指针分析问题被转化成petri网的标识覆盖(marking coverability)问题。基于Petri网的多线程指针分析为深入研究多线程程序的指针分析提供了一种可能的思路。
其他文献
  试验选用新鲜构树叶片,在不同pH、温度、纤维素酶浓度处理下,提取叶片叶蛋白并测定其蛋白含量,运用正交分析法优化纤维素酶提取构树叶蛋白工艺.结果表明,各因素对提取率
本文提出了玉米、番薯集中产区和一般产区的数量标准,探讨了清代至民国时期山东东部地区玉米、番薯的分布特征,阐明了玉米、番薯以竞争的方式取得优势地位的过程,以及南方和
在气候变化和人类活动的影响下,水资源供需失衡、水污染等问题日益突出,水资源问题成为制约社会经济发展、生态环境稳定的重要因素,水资源承载力的研究对实现水资源与人口、社会经济、生态环境协调发展具有重要意义。本文在借鉴国内外相关研究成果的基础上,采用多层次模糊综合评价模型及主成分分析评价模型分别对陇县的水资源承载力进行了研究,主要研究内容及结论如下:(1)构建了陇县水资源承载力评价指标体系,包括水资源系
为研究饲料中添加杆菌肽锌对断奶仔猪的增重效果,选择90头断奶仔猪随机均分为试验组A、试验组B和对照组C,在试验组A饲料中添加杆菌肽锌10mg/kg,试验组B饲料中添加杆菌肽锌30m
音乐艺术是一门综合的艺术,它包容万千、蕴涵丰富,凝结了人类美好且丰富的情感。情感体验无疑是我们欣赏音乐、理解音乐的一把钥匙。情感体验在普通高中音乐欣赏课中亦起着重
在新时期开放创新背景下,作为自然科学类传统实验室——地质类实验室,我们应重新审视其精细化、全局化、定量化的学科特点,努力将高校创新创业的主要载体——实验室,建设成具
<正>文化创造美好,美好需要文化。内蒙古实施"数字文化走进蒙古包"工程,惠及农牧民10万余人;安徽"农民文化乐园"根据群众意愿,统一采购文艺演出送到村;浙江建成农村文化礼堂3
新媒体的发展将是未来媒体发展的新趋势,新媒体和公益相结合,为新媒体的发展注入新的发展形式。通过公益新媒体工作室的运营,从网站主页趋于读图为主的页面呈现、微信公众订
图像作为一种直观、便捷的反映现实世界的媒介,被广泛应用于多媒体、数字医疗、人工智能等领域。在众多的实际应用中,人们需要清晰、高质量的图像,因此去除图像噪声、提高图