PLDI‘21-Path-Sensitive Sparse Analysis without Path Conditions-基于程序依赖图的路径敏感稀疏分析

news2024/11/17 22:48:19

请添加图片描述
这篇文章是港科大团队在PLDI 2021会议上发表的文章。在这之前,作者在PLDI 2018发表Pinpoint。这篇文章在Pinpoint上改进。在Pinpoint的设计中,存储摘要的时候仍然需要缓存大量的路径条件,以及在应用摘要时进行大量的克隆,导致逻辑公式大小进行指数级的增长。

而在PLDI 2021中,作者进一步提出,我们可以不用构建Value Flow Graph了!直接在程序依赖图(Program Dependence Graph)上就可以达到相同的路径敏感检测效果。相比PLDI’18

  • 该方法不需要缓存摘要中的路径条件。因为可以在遍历程序依赖图的时候直接将其转换成逻辑公式,即程序依赖图就已经编码了路径条件

  • 该方法克隆数比较少。程序依赖图的结构,能够在转换逻辑公式的时候进行大量的优化,降低函数克隆数,加速SMT的预处理。

实验效果:

  • 能够在个人PC机上跑百万行代码规模的路径敏感分析。12GB的内存,半小时内完成百万行分析

  • 作者对比了两款工具(Pinpoint和Infer),消耗的内存只有他们的10%,但是能够提升10倍的速度。

1. 与Pinpoint对比

(1). 计算路径条件 (Computing)

(2). 求解路径条件 (Solving)

(3). 缓存路径条件 (Caching)

以如下代码为例子,对比Pinpoint三项指标的性能开销时

请添加图片描述

作者的方法(fusion)和Pinpoint(conventional)的对比如下:

请添加图片描述

作者在程序依赖图上能够有效地编码相当多的信息:

请添加图片描述

2. 程序依赖图

作者论文中以一个简单语言作为叙述对象,如下所示,比较简单。唯一需要注意的是identity,return,if-then-else。

  • if-then-else语句。表示这个程序是Gated Single Assignment形式的。Gated Single Assignment公众号前几篇文章有讨论,它被应用在许多缺陷检测工具中,例如:FSE’10 利用符号分析检测缓冲区溢出,ICSE’08 - 路径敏感bug-finding工具Calysto

  • identity和return语句。将单个函数内对非局部变量的修改使用MOD/REF)显示化到程序中。

  • 作者将代码中循环展开,所以不存在循环语句

请添加图片描述

程序依赖图用于模块化地表示单个函数内的数据依赖关系,控制依赖关系,程序依赖图的的定义如下:

  • G = (V, Ed, Ec)
  • V表示程序依赖图上节点的集合。每个节点根据讨论的上下文,可以表示为一个语句,也可以表示为这个语句定义的变量
  • Ed表示节点间的数据依赖边。source定义了某个变量,target是使用该变量的语句
  • Ec表示节点间的控制依赖边。source为一条语句,target为if语句,表示source的执行依赖于if语句。

构建控制依赖边,现成的算法比较多,这里不介绍。下面是PDG上构建数据依赖边的规则:

请添加图片描述

这些规则比较简单,唯一需要注意的是左下角的规则,它是用来对未定义的库函数构建默认的数据依赖边。

3. 传统的稀疏分析算法

作者先介绍了传统的稀疏分析算法(即Pinpoint中的算法),然后提出PLDI 2021中作者提出的方法,一对比,就能看出很明显的差异。

下面是Pinpoint中提出的稀疏分析算法:

请添加图片描述

该算法用于分析一条感兴趣的控制流路径,该路径由语句列表所组成。

  • 对每条语句进行遍历,第4行就是对语句执行transfer function
  • 然后根据当前语句的数据依赖后继边,将数据传播到后继节点。(第6行)
  • 第7-8行是用于保存路径用的,可以进行trace
  • 第9行,由于有新的后记节点引入,所以需要把当前语句和后续语句之间的数据依赖条件也进行逻辑与
  • 第11行实际上是路径收集的初始化步骤:当行没有前缀路径存在的时候,初始化一条2个节点组成的路径
  • 第12行,对所有路径的约束进行逻辑与,并进行约束求解

下面是Pinpoint的函数间分析算法:
请添加图片描述

  • S1表示的是值流摘要 (Value Flow Summary)。具体可参考Pinpoint论文。值流摘要是3元组:请添加图片描述
  • 有如下4类值流摘要:请添加图片描述
  • S2表示Pinpoint中提到的Return Value Summary。
  • 对于函数间的Value Flow Path,第6行判断是否存在某段Value Flow Summary
  • 如果存在,那么直接应用摘要中存储的Summary Tranfer Function,传递数据即可。
  • 主要关注的就是instantiate这个函数,它用于克隆摘要中的路径条件

4. 基于程序依赖图的稀疏分析算法

Pinpoint中提到的方法需要缓存大量的路径条件,进行大量的条件克隆。作者的方法在这两方面进行了改进。

作者可以在程序依赖图上遍历感兴趣的控制流路径之后,直接生成逻辑公式。下面是函数内逻辑公式生成规则:
请添加图片描述

看起来比较直观。规则(1)(2)(3)用于切片,实际上就是求数据依赖和控制依赖的传递闭包,其中Xd用于切掉没必要的节点。(4)(5)(6)就是将程序语句转换为逻辑公式,看起来也比较容易理解。这里不细展开。

下面是函数间逻辑公式生成的规则,也比较简单,就是将形参-实参,返回值和reciever作逻辑相等。
请添加图片描述

优化后的算法如下,可以看到,Value Flow Summary不再需要缓存大量的路径条件,因为可以直接遍历得到。Return Value Summary也可以直接去掉。同时,不需要再进行大量的路径条件克隆。
请添加图片描述
下面是整个算法大的执行框架,它由于直接在程序依赖图上进行SMT求解,可以进行很多求解前的预处理优化,具体相关的优化,这里不详细展开,论文也没有细讲。
请添加图片描述

5. 实验

实验环境

  • Intel Xeon CPU E5-2698 v4 @ 2.20GHz
  • 256GB, Ubuntu-16.04
  • 每个静态分析器15个线程
  • SMT求解10秒超时
  • 每次分析时,设置阈值:100GB内存,12小时超时时间

Trade-Off:

  • 数组联合体的所有成员互为别名
  • 不处理全局变量
  • 不处理异常, long jump, 内联汇编
  • 不处理C式函数指针,C++利用CHA构造调用图
  • 调用图与控制流图上的环都展开2次

测试集如下:
请添加图片描述
相比Pinpoint的性能:
请添加图片描述
对比分析能力:
请添加图片描述
相比Infer的实验数据:
请添加图片描述
具体还有很多细节可以参考PLDI 2018 Pinpoint与PLDI 2021。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Memtiter-benchmark源码解析1client类功能解析

client类功能解析 client.h m_event_base 为libevent loop 的事件循环类 define MAIN_CONNECTION m_connections[0] client.cpp client 构造函数初始化 client.cpp Line 55 conn 构造一个新对象 connect()函数 从m_config中读取出服务器ip地址和端口,通过sc->…

利用mAP评估目标检测模型

在本文[1]中,我们将了解如何使用 precision 和召回率来计算平均精度 (mAP)。mAP 将真实边界框与检测到的框进行比较并返回分数。分数越高,模型的检测越准确。 之前我们详细研究了混淆矩阵、模型准确性、精确度和召回率。我们也使用 Scikit-learn 库来计算…

MindSpore模型快速调优攻略笔记分享(下)

3.MindSpore云上调试调优 ModelArts云上调试调优 详细教程: https://support.huaweicloud.com/prepare-modelarts/modelarts 08 0002.html MindSpore IDE插件效率提升 通过智能代码块推荐、代码自动补全等特性,提升MindSpore脚本开发效率,对接ModelA…

2023年无线运动耳机排行榜最新公布、公认最好的运动耳机推荐

随着人们日益对健康的重视,”全民健身“正在全国,乃至全世界蔓延开来,其中跑步锻炼凭借着门槛低,益处多成为了大部分人的健身的首选。而随着跑步大军的壮大,国内蓝牙耳机市场也是一片火热。其中蓝牙无线运动耳机凭借着…

快速了解ZigBee的协议栈

带大家来一起快速的看懂ZigBee的协议栈的运行流程。 1.读任何程序都需要从main函数入手,那我们先来看Zmain.c中的main函数。 问题:在main中我们会看到很多的函数,我们究竟要看哪个函数呢? 回答:这么多的函数中其实我们只需要关注…

Horn:2层BLS签名聚合协议

1. 引言 Horn为2层BLS签名聚合协议,使得在以太坊共识层,为每个slot,聚合来自整个validator set的所有签名,即使这个validator set成员多达100万个。相比于现有的只能聚合1/32的validator set来说,有了大幅改进。 现有…

企业营销的内容之痛,腾讯云SaaS工具的破局之道

引言 过去数十年间,国内企业经历了快速发展的红利期,规模的增长、价值的创造,涌现了大批国内领先、世界知名的企业与组织。而如今,传统的粗放式经营模式已经不再适用,数字化转型时代下,如何利用 SaaS 技术…

C#语言实例源码系列-实现Linq操作Xml

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中…

Python基于PyTorch实现BP神经网络ANN回归模型项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 在人工神经网络的发展历史上,感知机(Multilayer Perceptron,MLP)网络曾对人工神…

外包三年半太差劲,才幡然醒悟要跳槽

前几天有个读者过来说,“程序猿,外包干了三年半,感觉和外界差距有点大,现在被动醒悟,希望你能帮我制定一下学习路线。” 如果不是女朋友和我提分手,我估计现在还没醒悟。大专生,18年通过校招进…

算法训练 —— 数组(1)

目录 一、二分查找的基本原理 二、二分查找的基本写法 三、二分查找的相关例题 1. LeetCode704.二分查找 2. LeetCode35.搜索插入位置 3. LeetCode34.在排序数组中查找的第一个和最后一个位置 4. LeetCode69.x的平方根 5. LeetCode367.有效的完全平方数 一、二分查找…

华为手表开发:WATCH 3 Pro(2)生成密钥和证书请求文件,生成签名和配置签名

华为手表开发:WATCH 3 Pro(2)生成密钥和证书请求文件,生成签名和配置签名初环境与设备生成密钥生成签名初 希望能写一些简单的教程和案例分享给需要的人 环境与设备 系统:window 设备:HUAWEI WATCH 3 Pr…

12.28日报

今天主要进行了资产盘点工作; 写了一个数据库的增删改查的接口框架; 遇到的问题与解决: Insert没使用过,查阅资料,对其初步了解 postMan使用不熟练,搜索配置方法,多练习 网关服务 基本原理…

大话设计模型 Task06:桥接、职责链、中介

目录一、桥接模式问题描述问题分析模式定义代码实现二、职责链模式问题描述问题分析模式定义代码实现三、中介模式问题描述问题分析模式定义优缺点代码实现四、命令模式(后补)问题描述问题分析模式定义代码实现五、享元模式(后补)…

面向制造业的文档管理

面向制造业的文档管理 借助DocuWare领先的文档管理和工作流程自动化解决方案,各行业制造商(从金属制造和机器零件到生物技术和制药)都可以获得具有成本效益的可持续解决方案,通过自动化工作流程,简化生产和管理流程。…

文件压缩与远程拷贝_Tar_Scp_Rsync

Tar 压缩文件类型分为:gzip,bzip2,xz.利用tar工具来解压,压缩。 tar common:#tar [option ] file_name -c 创建一个压缩包 -t 查看内容 -x 提取 -f 文件名(必须用) -v 详细过程 -j bzip2 -z gzip -J xz Meth: tar -czvf arch_n…

示波器应用(一)

程序同学有没有一种感觉,有时候看到游戏场景有一种难以言表的不舒服,但是又不知道画面到底为什么不舒服。美术同学看到好的作品想要”借鉴“,但是又无从下手。那么下面这套工具将会非常适合进行画面分析以及画面仿色。让程序看懂画面信息&…

Ansys Speos | 进行智能手机镜头杂散光分析

本例的目的是研究智能手机Camera系统的杂散光。杂散光是指光向相机传感器不需要的散光光或镜面光,是在光学设计中无意产生的,会降低相机系统的光学性能。 在本例中,光学透镜系统使用Ansys Zemax OpticStudio (ZOS)进行设计,并使用…

微信小程序会议OA-后台数据交互(首页)05

1.后台准备 1.1 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…

Charles -抓不到包常见原因之证书过期失效处理方法

当出现环境配置正常但却无法抓包的时候&#xff0c;可能是因为证书失效了&#xff0c;这种情况移除旧证书&#xff0c;安装新的证书即可。 一、判断是否证书过期 iOS手机&#xff1a; 进入&#xff1a;设置 > 通用 > VPN与设备管理 > Charles Proxy CA... > 更多…