南京大学【软件分析】08 Pointer Analysis

news2024/11/26 4:41:12

文章目录

  • 1. Motivation
  • 2. Introduction to Pointer Analysis
  • 3. Key Factors of Pointer Analysis
    • 3.1 Heap Abstraction
    • 3.2 Context Sensitivity
    • 3.3 Flow sensitivity
    • 3.4 Analysis scope
  • 4. Concerned Statements

1. Motivation

指针分析存在不精确的问题。对于下面的例子,n的声明类型为Number,使用CHA分析,那么n.get()会返回三个目标函数,分别是Zero.get One.get Two.get,这就导致x的接收了0 1 2三个不同的值,x最终为非常量NAC。但实际上我们期望调用One.get,得到返回值1。
因此引入指针分析,使n指向new One,解决这种CHA引入了很多假的调用边的问题。
在这里插入图片描述

2. Introduction to Pointer Analysis

指针分析是基础的静态分析,明确了程序中的指针可以指向哪些内存的地址,计算一个指针(variable或filed)可以指向哪些对象。
指针分析是一个may- analysis,是过近似的over-approximation
在这里插入图片描述
指针分析Pointer analysis:程序中的指针会指向哪些对象?
别名分析Alias analysis:两个指针可以指向同一个对象吗?

3. Key Factors of Pointer Analysis

影响指针分析精度和效率的因素有一下四种,这四个因素分别回答了对应的问题。
这里主要介绍红色部分
在这里插入图片描述

3.1 Heap Abstraction

在动态执行中,由于循环结构的存在,堆对象的数量是无限的。因此,在静态分析时,堆抽象Heap Abstraction把具体的对象抽象成有穷的抽象对象(把同类对象合并 )。
在这里插入图片描述
堆抽象主要分两大流派:Store based model和Storeless model,这里主要介绍Store based model中的Allocation sites在这里插入图片描述
Allocation sites创建点:是堆抽象中最常用的技术。它指的是把在同一个创建点创建的对象都归为一类。即程序中有几个new语句,就有几个对象,这种方法抽象出来的对象肯定是有限的,因为程序是有限的。下面对象的下标表示代码行数
在这里插入图片描述

3.2 Context Sensitivity

上下文敏感:更精确。每一个函数在被调用的时候,考虑被调用时的上下文。为每一个调用点都创建一个上下文
上下文不敏感:不同的调用点使用同一个上下文,每一个函数只分析一次
下面的例子,左侧为上下文敏感的结果,右侧为上下文不敏感的结果
在这里插入图片描述

3.3 Flow sensitivity

流敏感Flow sensitivity:更精确,开销大。考虑语句的执行允许
流不敏感Flow insensitivity:忽略控制流的顺序,把程序当作一堆语句的无序集合。下面的例子中流不敏感存在误报
下面的例子,左侧为流敏感的结果,右侧为流不敏感的结果
在这里插入图片描述

3.4 Analysis scope

Analysis scope:明确了在做指针分析时,应分析程序中的哪些部分。
Whole-program:分析程序中所有指针的指向关系,分析一次可以获得所有的指向关系
Demand-driven:根据特定需求,只分析需求的指针分析,适用于有特定需求的指针分析
下面的例子,左侧为Whole-program的结果,右侧为Demand-driven(只考虑第五行)的结果
在这里插入图片描述

4. Concerned Statements

指针分析只关注影响指针的语句pointer-affecting statements
java当中的指针:

  • Local variable: x
  • Static field: C.f。很多文献称其为global variable,类似于Local variable的处理
  • Instance field: x.f。把它建模成一个对象(pointed by x)携带一个域 f
  • Array element: array[i]。静态分析忽略下标,把数组建模成只有一个filed的对象,并把这个filed称为arr,此时它的处理类似于Instance field。

在这里插入图片描述

指针分析中关心的五种语句pointer-affecting statements:(对于复杂的a.b.c.d引入临时变量分解成三地址码)

其中前四种较为简单,不涉及方法调用。
第四种涉及到方法调用,这里关注最复杂的Virtual call
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

QT、C++实现地图导航系统(mapSystem)

文章目录 地图导航系统项目应用背景技术栈选择数据处理算法实现界面实现源码展示成果展示源码下载 (免费) 地图导航系统 项目应用背景 电子地图导航系统的主要目的是为用户提供精确、实时的导航和位置信息,以帮助他们在城市或地区内轻松找到…

C++ - 封装 unordered_set 和 unordered_map - 哈希桶的迭代器实现

前言 unordered_set 和 unordered_map 两个容器的底层是哈希表实现的,此处的封装使用的 上篇博客当中的哈希桶来进行封装,相当于是在 哈希桶之上在套上了 unordered_set 和 unordered_map 。 哈希桶的逻辑实现: C - 开散列的拉链法&…

Java环境配置无效

Java环境配置无效 老是使用1.8版本,象牛皮癣。 查找java来源 where java 打开C:\Windows\System32 删掉java.exe javaaw.exe javaaws.exe 正常

【超强图解Docker常见命令与实战】

目录 一、镜像容器基础&#xff08;一&#xff09;基本概念&#xff08;二&#xff09;镜像&#xff08;三&#xff09;容器&#xff08;四&#xff09;运行的容器&#xff08;五&#xff09; 镜像层(image layer) 二、常用命令&#xff08;一&#xff09;docker create <im…

XWiki Platform 安全漏洞RCE:CVE-2023-37462

2023年7月14日&#xff0c;美国国家标准与技术研究院&#xff08;NIST&#xff09;维护的综合性漏洞数据库&#xff08;NVD&#xff09;第一次记录了这个漏洞&#xff0c;这个漏洞影响版本是从7.0到14.48&#xff08;不包括&#xff09;和从14.5到14.10.4&#xff08;不包括&am…

BGP服务器租用价格表_腾讯云PK阿里云

BGP云服务器像阿里云和腾讯云均是BGP多线网络&#xff0c;速度更快延迟更低&#xff0c;阿里云BGP服务器2核2G3M带宽优惠价格108元一年起&#xff0c;腾讯云BGP服务器2核2G3M带宽95元一年起&#xff0c;阿腾云分享更多云服务器配置如2核4G、4核8G、8核16G等配置价格表如下&…

A*搜索算法(含Java源代码)

前言 本来是想写一块的&#xff0c;但是为了这个国庆的专属勋章就分开写了&#xff0c;这个侧重还是对作业题目要求的实现。 课题目的 理解 A Star 算法设计流程。 理解 A Star 算法的启发式函数的作用。 掌握 A Start 解决搜索问题的过程&#xff0c;能够应用 A Star 算法…

凉鞋的 Godot 笔记 101. Hello Godot!

101. Hello Godot 学习任何一门技术&#xff0c;第一件事就是先完成 Hello World&#xff01;的输出 所以我们也来先完成 Godot 的 Hello World。 我们所使用的 Godot 版本是 4.x 版本。 安装的过程就不给大家展示了&#xff0c;笔者更推荐初学者用 Steam 版本的 Godot&…

Scala第十八章节

Scala第十八章节 scala总目录 文档资料下载 章节目标 掌握Iterable集合相关内容.掌握Seq集合相关内容.掌握Set集合相关内容.掌握Map集合相关内容.掌握统计字符个数案例. 1. Iterable 1.1 概述 Iterable代表一个可以迭代的集合, 它继承了Traversable特质, 同时也是其他集合…

学习开发一个RISC-V上的操作系统(汪辰老师) — 环境配置

前言 &#xff08;1&#xff09;此系列文章是跟着汪辰老师的RISC-V课程所记录的学习笔记。 &#xff08;2&#xff09;该课程相关代码gitee链接&#xff1b; &#xff08;3&#xff09;PLCT实验室实习生长期招聘&#xff1a;招聘信息链接 &#xff08;4&#xff09;在学习汪辰老…

正则表达式验证和跨域postmessage

1.用正则表达式验证用户名 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>…

msvcp120.dll放在哪个文件夹?msvcp120.dll丢失解决方法详细分析

Msvcp120.dll 丢失可能会导致一些基于 Microsoft Visual C 编写的程序和游戏无法正常运行。Msvcp120.dll 是 Microsoft Visual C Redistributable 的一个组件&#xff0c;它包含了 C 运行时库&#xff0c;这些库在运行程序时会被加载到内存中。如果该文件丢失或损坏&#xff0c…

多目标平衡黏菌算法(MOEOSMA)求解八个现实世界受约束的工程问题

目录 1 受约束的工程问题 1.1 减速器设计问题(Speed reducer design problem) 1.2 弹簧设计问题(Spring design problem) 1.3 静压推力轴承设计问题(Hydrostatic thrust bearing design problem) 1.4 振动平台设计问题(Vibrating platform design problem) 1.5 汽车侧面碰…

18.示例程序(编码器接口测速)

STM32标准库开发-各章节笔记-查阅传送门_Archie_IT的博客-CSDN博客https://blog.csdn.net/m0_61712829/article/details/132434192?spm1001.2014.3001.5501 main.c #include "stm32f10x.h" // Device header #include "Delay.h" #incl…

数据结构:KMP算法的原理图解和代码解析

文章目录 应用场景算法方案算法原理完整代码 本篇总结的是关于串中的KMP算法解析 应用场景 现给定两个串&#xff0c;现在要看较短的一个串是不是较长的串的子串&#xff0c;如果是就输出子串后面的内容&#xff0c;如果不是则输出Not Found 能匹配到&#xff1a; 长串&…

基于SSM的连锁经营商业管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

JavaSE | 初识Java(五) | 方法的使用

方法就是一个代码片段&#xff0c; 类似于 C 语言中的 " 函数 "。 方法可以是我们代码逻辑更清晰&#xff0c;并且可以服用方法使代码更简洁 方法语法格式 // 方法定义 修饰符 返回值类型 方法名称([参数类型 形参 ...]){ 方法体代码; [return 返回值]; } 实例&…

自媒体文章改写工具-自媒体文章改写软件

自媒体时代已然来临&#xff0c;每个人都有机会成为自己的内容创作者&#xff0c;分享自己的观点和故事。在竞争激烈的自媒体领域&#xff0c;如何让自己的文章脱颖而出&#xff0c;吸引更多读者成为了一个重要的问题。 自媒体文章改写是一项旨在提高文章原创性和吸引力的关键任…

Arcgis打开影像分析窗口没反应

Arcgis打开影像分析窗口没反应 问题描述 做NDVI计算的时候&#xff0c;一直点击窗口-影像分析&#xff0c;发现影像分析的小界面一直不跳出来。 原因 后来发现是被内容列表给遮住了&#xff0c;其实是已经出来了的。。 拖动内容列表就能找到。 解决方案 内容列表和影像分…

热点文章采集-热点资讯采集工具免费

在信息时代&#xff0c;掌握热点资讯、了解热门时事、采集热门文章是许多自媒体从业者和信息追踪者的重要任务。然而&#xff0c;这并不是一项容易的任务。信息的海洋庞大而繁杂&#xff0c;要从中捞取有价值的热点和文章需要耗费大量时间和精力。 热点资讯采集&#xff1a;信息…