Point-to Analysis指针分析(1)

news2024/11/25 17:22:01

Point-to Analysis指针分析(1)_音程的博客-CSDN博客

前言

指针分析是一个非常复杂的工作,这些工作很多方向,比如是否是上下文敏感分析或上下文不敏感分析,显然,这难易度是不一样地。比如下图。对于同一段代码,敏感性分析如蓝色,不敏感分析如红色。

在这里插入图片描述

 相比之下,不敏感分析不在乎语句的顺序,比如2,4两个语句换一下位置,得到的结果还是一样的,同时也不要求结果是否精确。

不敏感分析特点:安全。
即确保召回那个唯一正确的值就好,而不管精确不精确,是不是多了。

下面我们要讨论的就是不敏感分析。所以有些语句我们是不会管的,比如:

在这里插入图片描述
即,我们只管那些赋值的,和指针相关的语句。从而将此工作得到了大大简化。

 Anderson’s pointer analysis

这个指针分析的算法很有名,是分析C语言的,但是思想都是通用的,下面开始介绍。

基础

解释:我们暂时先不看第一列和第三列,其他的应该很好理解。 

  • loc(b)表示b的地址。
  • pts(a):point-to sets(a),表示a的可能指向集合,千万注意是可能指向,别忘了我们是做不敏感分析。即如果a=&b,a=&c,那么有pts(a)={loc(b),loc(c)}
  • ∈,⊇,这个和数学中集合的概念一致,就是属于和子集关系的意思。
  • 以第2行为例,有pts(a) ⊇ ptrs(b),为什么?举个例子你就明白了,如果有:a=&d,b=&c,a=b。那么pts(b)={loc(c)},pts(a)={loc(c),loc(d)}。所以明白了为什么pts(a)可能比pts(b)集合更大了吧,因为a=b把b的指向全部给了a,但是a可能还有其他的指向啊!

约束图

现在我们要做一些前期工作,并且要开始看上面那个表的第一列和第三列。举例来说,如果有代码:

p = &a;
   
q = &b;

*p = q;
     
r = &c;
     
s = p;
    
t = *p;
      
*s = r;
       

我们按照上面表的第3列翻译成下面,叫做约束:

p  ⊇ {a}, q  ⊇ {b}, *p ⊇ q, r ⊇ {c}, s ⊇ p, t ⊇ *p, *s ⊇ r

我们可以开始根据上面的表格创建初始约束图,其中基本(base)约束和(simple)约束是创建初始约束图的基础。初始约束图的创建分为如下三步:

  • 首先为程序中的每个变量建立一个节点
  • 后根据基本(base)约束标注节点的指向集
  • 每一个初始的简单约束(simple)建立一条有向边

可以得到如下图:

在这里插入图片描述

 解释:正如名字,上面只是约束图,而且只是一个初始约束图,图中的边也并不是指针的指向关系,而是约束关系。拿上图的边edge(p,s)为例,其表示p所指向的,s都将指向。

实战

下面用一个例子来进行实战整个Anderson算法。


int i, j, k;
int *a = &i;
          
int *b = &k;
       
a = &j;
           
int *p = &a;
           
int *q = &b;
         
p = q;
        
int *c = *q;
      

可以得到如下的约束:

   a ⊇ {i, j}, b ⊇ {k}, p ⊇ {a}, q ⊇ {b}, p ⊇ q, c ⊇ *q

从而得到如下初始约束图:

在这里插入图片描述

上面的work_queue工作队列就是下面伪代码中的W。伪代码如下:
(我们已经完成了1,2步了)。

在这里插入图片描述

 

 开始执行循环,从队列中取出a。
由于找不到关于a的复杂约束,复杂约束是什么?除了简单约束和基本约束就是复杂约束,具体可以参照开头的那个表格。
由于找不到a出发的边,所以此循环结束,如下。

在这里插入图片描述

取出b,
找不到关于b的复杂约束
找不到b出发的边
此循环结束,如下。

在这里插入图片描述 

取出p,
找不到复杂约束
找不到p出发的边。
此循环结束,如下。

在这里插入图片描述 

取出q,
找到复杂约束,c ⊇ *q。q的指向有b,从而加入边edge(b,c)。而且加入b到工作队列中。
找到q出发的边edge(q,p),所以pts§={a,b},由于pts§改变了,增加了一个元素,所以p再次加入到工作队列中。
此循环结束。

在这里插入图片描述 

取出b,
没有复杂约束
找到b出发的边,所以pts©={k},由于pts©改变了,所以c加入到工作队列中。
此循环结束。

在这里插入图片描述 

取出p,
没有复杂约束
没有从p出发的边
此循环结束。

在这里插入图片描述

取出c,
找到复杂约束c ⊇ *q,但是复杂约束的形式和算法中的不一样,所以for循环结束。
找不到c出发的边
此循环结束。

由于工作队列为空,此算法结束。
将旁边的那些集合比如{i,j}统统连上,即edge(a,i),edge(a,j)…。就变成了我们最终要的指针指向关系了。

在这里插入图片描述

这样我们就完成了指针分析。 

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

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

相关文章

SAP之Suse For SAP 12 sp5安装教程(超详细)

本文将详细介绍如何在VM环境下安装Suse For SAP 12 sp5。 关于VM创建Suse Linux虚拟机的教程参考另一个博客-SAP之VM创建SUSE虚拟机。本文建立在VM已经创建好了Suse虚拟机的前提下。 一、首先进入到安装界面,选择“Installation”,按“Enter” 二、勾选…

第七章 无线与移动网络

无线网络 无线网络基本结构 无线主机;运行端系统设备无线链路;通过无线通信链路连接到一个基站或者另一条无线主机基站;无线网络基础设施的一个关键部分,负责向与之关联的无线主机发送数据和接收主机发送的数据网络基础设施&…

ROS使用(9)tf2

许多tf2教程可用于C和Python。本教程经过了精简,以完成C或Python。如果你想同时学习C和Python,你应该分别学习一次C和一次Python的教程。 工作区设置 Introduction to tf2.tf2的 介绍 本教程将给予你一个很好的想法tf2可以为你做什么。 它在一个使用tur…

自学大数据第十天~Hbase

随着数据量的增多,数据的类型也不像原来那样都是结构化数据,还有非结构化数据; Hbase时google 的bigtable的开源实现, BigtableHbase文件存储系统GFSHDFS海量数据处理MRMR协同管理服务chubbyzookeeper虽然有了HDFS和MR,但是对于数据的实时处理是比较困难的,没有办法应对数据的爆…

实现3D动画

一、transform Transform是形变的意思(通常也叫变换),transformer就是变形金刚 常见的函数transform function有: 平移:translate(x, y) 缩放:scale(x, y) 旋转:rotate(deg) 倾斜:sk…

病毒丨3601lpk劫持病毒分析

作者:黑蛋 一、病毒简介 文件名称: 1f3e836b4677a6df2c2d34d3c6413df2c5e448b5bc1d5702f2a96a7f6ca0d7fb 文件类型(Magic): PE32 executable (GUI) Intel 80386, for MS Windows 文件大小: 52.50KB SHA256: 1f3e836b4…

面试字节,三面HR天坑,想不到自己也会阴沟里翻船....

阎王易见,小鬼难缠。我一直相信这个世界上好人居多,但是也没想到自己也会在阴沟里翻船。我感觉自己被字节跳动的HR坑了。 在这里,我只想告诫大家,offer一定要拿到自己的手里才是真的,口头offer都是不牢靠的&#xff0…

可实现电控调光、宽视场角,FlexEnable曲面液晶解析

曲面显示屏、可变焦液晶透镜,这些似乎是属于未来AR/VR的趋势,而实际上已经有公司在提供此类技术,而这将有望对AR/VR产生重要影响。AR/VR光学专家Karl Guttag指出,其在CES 2023看到了一家专注于柔性显示、传感器的有机电子公司&…

传统机器学习(五)—分类、回归模型的常见评估指标

传统机器学习—分类、回归模型的常见评估指标 一、分类模型的常见评估指标 1.1 混淆矩阵 混淆矩阵,在无监督学习中被称为匹配矩阵(matching matrix),之所以叫混淆矩阵,是因为我们能够很容易从图表中看到分类器有没有将样本的类别给混淆了。…

E4--光纤接口通信测试应用2023-04-17

1.场景 使用两块开发板A和B,通过光纤接口将在A板上ROM中存储的图片数据转发到B板并显示在B板连接的显示屏上,实现光纤接口通信。 具体场景是,由于A735T片上资源有限,因此ROM IP存储了一张1024*600(LVDS屏幕&#xff0…

【Linux】调试器---gdb的使用

文章目录一.背景知识二.安装gdb三.gdb的用法使用须知gdb的常用指令1.进入调试2.退出调试操作3.显示源代码4.设置断点breakPoint5.查看断点信息/禁用断点/开启断点/删除断点6.运行程序,开始调试run7.查看变量8.其它重要命令一.背景知识 程序的发布方式有两种&#x…

【并发】Volatile作用详解

volatile保证变量的可见性禁止指令重排不保证原子性如何保证原子性volatile volatile关键字可以保证变量的可见性。 被volatile修饰的变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。 无法保证原子性 保证变量的可见性 当多个线程访问同一个…

217页企业大数据能力平台建设技术方案(word可编辑)

1.1.1.1 建设方案架构 数据治理平台覆盖了从标准、设计、采集、开发到使用,再到交付的全数据治理流程,为组织提供了一站式数据治理运营平台,可满足数据共享交换、数据开发、数据运营多种应用场景,并通过构建数据工厂,实…

基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域数据分析能力与项目科研水平

目录 专题一、空间数据获取与制图 专题二、ArcGIS专题地图制作 专题三、空间数据采集与处理 专题四、遥感数据处理与应用 专题五、DEM数据处理与应用 专题六、采样数据处理与应用 专题七、土地利用处理与应用 专题八、土地利用景观格局分析 专题九、土壤数据处理与应用…

【音视频第12天】GCC论文阅读(3)

A Google Congestion Control Algorithm for Real-Time Communication draft-alvestrand-rmcat-congestion-03论文理解 看中文的GCC算法一脸懵。看一看英文版的,找一找感觉。 目录Abstract1. Introduction1.1 Mathematical notation conventions2. System model2.1 …

代码随想录第17天 | 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

654.最大二叉树 /*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val (valundefined ? 0 : val)* this.left (leftundefined ? null : left)* this.right (rightundefined ? null : right)* }*/ /*** param {numbe…

2.docker-本地镜像发布

1.发布到阿里云 前往 容器镜像服务 (aliyun.com) 进入容器镜像服务 1.创建命名空间 2.创建镜像仓库 3.进入仓库管理页面获得脚本 # 需要输入密码,终端输出 Login Succeeded 则为登录成功 docker login --username用户名 registry.cn-hangzhou.aliyuncs.com# 标记 docker tag …

TCP 协议的相关特性

TCP 协议的相关特性🔎TCP协议的特点🔎TCP协议段格式🔎TCP协议的相关特性确认应答(ACK)超时重传三次握手四次挥手三次挥手与四次握手的注意事项🔎结尾TCP(Transmission Control Protocol) 传输控制协议 🔎TCP协议的特点…

Hbase伪分布安装配置

Hbase安装配置 文章目录Hbase安装配置Hbase安装前提下载Hbase压缩包软件版本兼容性Hadoop和HbaseHbase和JDK软件安装软件位置创建数据保存和日志保存文件夹修改配置文件修改hbase-site.xml文件修改hbase-env.sh文件修改~/.bashrc文件启动hbase并验证权限问题Permission denied修…

外源6-BA在缓解多花黄精种子出苗过程中的代谢及转录组学变化

文章标题:Transcriptomics and metabolomics changes triggered by exogenous 6-benzylaminopurine in relieving epicotyl dormancy of Polygonatum cyrtonema Hua seeds 发表期刊:Frontiers in Plant Science 影响因子:6.627 作者单位&a…