南京大学【软件分析】07 Interprocedural Analysis

news2024/11/28 4:51:35

文章目录

  • 1. Motivation
  • 2. Call graph Construction(CHA)
    • 2.1 方法分派Method Dispatch
    • 2.2 方法签名method signature
    • 2.3 案例:查找Dispatch
    • 2.4 CHA
    • 2.5 通过CHA构造调用图
  • 3. Interprocedural Control-Flow Graph
  • 4. Interprocedural Data-Flow Analysis
    • 4.1 ICFG
    • 4.2 案例:过程间常量传播

1. Motivation

之前接触的都是过程内的分析。过程内的分析做最保守的假设most conservation assumption,容易导致精度丢失imprecison,即把所有传入的参数都当作非常量NAC
如下图所示,x、y、n在各自的函数当中都被视为非常量NAC,但实际上,n=10为常量,x=42.因此需要过程间分析来保证精度。
过程间分析:当遇到方法调用时,会在两个方法之间加上一条边,表示数据流的流向。进行过程间分析需要构造函数调用图call graph,用来表示函数间的调用关系。
在这里插入图片描述

2. Call graph Construction(CHA)

本课程主要介绍面向对象语言的调用图的构造

构造调用图的方法
在这里插入图片描述

构造调用图的关键是处理好Virtual call。因其target方法大于等于1,其他的只有一个。

在这里插入图片描述

2.1 方法分派Method Dispatch

Method Dispatch方法分派:个人的理解,方法分派是基于方法重载而产生的。
这里先来回顾一下什么是方法重载?
方法重载:一个类中定义多个具有相同名字的方法,具体执行哪个,由传入的参数决定。即方法名字相同,参数列表不同(类型、个数、顺序),与返回值类型、访问修饰符无关。在调用该方法时,程序会根据传入的参数和调用该方法的对象来确定具体执行哪一个函数,确定具体执行哪一个函数的过程就叫做Method Dispatch方法分派
参考:方法分派(method dispatch)的几个例子
Java多态原理 - JVM的静态分派和动态分派

程序运行时,一个virtual call被确定是具体调用哪个由以下两点决定:

  1. virtual call返回内容的接收对象是谁:c
  2. 调用点处的方法签名:m

此处的函数调用形式为: o 1 . f o o ( … ) 2 o^1.foo(…)^2 o1.foo()2

2.2 方法签名method signature

签名=类+方法名+描述符。描述符=返回类型+参数类型
在这里插入图片描述
定义一个函数 D i s p a t c h ( c , m ) Dispatch(c,m) Dispatchcm,如果 c c c包含一个非抽象的方法 m ′ m' m,并且 m ′ m' m m m m有相同的名字和描述符,那么 c c c就找到了他的目标函数 m ′ m' m
如果在 c c c中没有找到,就从 c c c的父类 c ′ c' c中重复的查找。
在这里插入图片描述

2.3 案例:查找Dispatch

在这里插入图片描述

2.4 CHA

CHA:需要知道整个程序的继承关系,只根据receiver的声明类型来判断目标函数。
定义一个函数Resolve(cs)来查找调用点call site(cs)的目标方法,分别处理static call、special call、virtual call
T:调用点call site(cs)的目标方法
m:调用点call site(cs)的签名
在这里插入图片描述
在这里插入图片描述
假如 B b=new B(),CHA的结果仍为A.foo C.foo D.foo,其中C.foo D.foo为虚假的目标函数,存在不精确问题。
在这里插入图片描述

CHA的特点:
优点:快速。只考虑调用点接收变量的声明类型和它的继承关系,忽略数据和控制流信息
缺陷:不精确。容易引入虚假的目标方法spurious target call

2.5 通过CHA构造调用图

从入口函数开始,使用CHA找到入口函数可达的方法,再从这些可达的方法用CHA找到其他可达的方法,一旦两个方法之间可达,就在两方法间加上一条边,从而构成调用图。
在这里插入图片描述
WL:worklist,存储需要被处理的方法
CG:call graph调用图,
RM:可达方法的集合,一个方法进入RM,就代表已经可达了,无需再分析
在这里插入图片描述
在这里插入图片描述

3. Interprocedural Control-Flow Graph

CFG:单个函数的控制流图
ICFG:整个程序的控制流图。ICFG=CFGs+call edges & return edges
call edges:调用点到目标函数入口之间的边。图中蓝色虚线
return edges:目标函数返回点到调用点的下一条语句(也被称为return site)。图中红色虚线
那么图中黄色部分的边为什么会保留?在main函数中还有一些变量如a,黄色部分的边是为了传播类似于a这些本地的数据流。黄色的边也叫做call-to-return edge
在这里插入图片描述

4. Interprocedural Data-Flow Analysis

4.1 ICFG

基于ICFG就可以进行过程间数据流分析。
在过程内分析当中,考虑的是CFG,以及节点之间的转换node transfer
在过程间分析当中,考虑ICFG、节点之间的转换,以及边之间数据流的转换
边之间的数据流转换主要包括call edge transfer、return edge transfer:
call edge transfer:把数据流从调用点转移到目标函数的入口节点,用来传参数argument values
return edge transfer:把数据流从return节点传播到调用点的下一条语句(也被称为return site)上,用来传返回值return values
在这里插入图片描述

4.2 案例:过程间常量传播

过程间分析当中的node transfer:类似于过程内的常量传播,对于每一个调用节点, the transfer function is identity function
在这里插入图片描述
注意两个地方的kill b
在这里插入图片描述

对比下面过程内的分析,过程内的分析很多值都不能确定(如b,c),分析结果不精确

在这里插入图片描述

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

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

相关文章

DBA数据库运维-MySQL安装篇(glibc,源码)

1. MySQL数据库版本 版本说明社区版: MySQL Community Edition (GPL)1.可以看做是企业版的“广泛体验版(小白鼠版)",未经各个专有系统平台的压力和性能测试 2.基于GPL协议发布,可以随意下载使用 3.没有任何官方技术支持服务企业版:MySQL Enterpris…

经典循环神经网络(一)RNN及其在歌词数据集上的应用

经典循环神经网络(一)RNN及其在歌词数据集上的应用 1 RNN概述 在深度学习兴起之前,NLP领域一直是统计模型的天下,例如词对齐算法GIZA,统计机器翻译开源框架MOSES等等。在语言模型方向,n-gram是当时最为流行的语言模型方法。n-gr…

YoloV8改进策略:SPD-Conv加入到YoloV8中,让小目标无处遁形

摘要 SPD-Conv是一种新的构建块,用于替代现有的CNN体系结构中的步长卷积和池化层。它由一个空间到深度(SPD)层和一个非步长卷积(Conv)层组成。 空间到深度(SPD)层的作用是将输入特征图的每个空间维度降低到通道维度,同时保留通道内的信息。这可以通过将输入特征图的每…

关于日志系统

目录 日志落地类(工厂模式)双缓冲区异步处理器缓冲区异步工作器 日志器类同步日志器异步日志器构造日志器构造局部日志器构造全局日志器日志器管理器(单例模式) 日志宏&全局接口(代理模式) 源码&#x…

使用 cURL 发送 HTTP 请求: 深入探讨与示例

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

Vue3之Suspense

<Suspense> 是一个内置组件&#xff0c;用来在组件树中协调对异步依赖的处理。它让我们可以在组件树上层等待下层的多个嵌套异步依赖项解析完成&#xff0c;并可以在等待时渲染一个加载状态。 我们可以看到官网并不推荐我们使用它&#xff0c;目前仍处于测试中。 他用于加…

【算法系列篇】哈希表

文章目录 前言1. 两数之和1.1 题目要求1.2 做题思路1.3 Java代码实现 2. 判断是否为字符重排2.1 题目要求2.2 做题思路2.3 Java代码实现 3. 存在重复元素3.1 题目要求3.2 做题思路3.3 Java代码实现 4. 存在重复元素II4.2 题目要求4.2 做题思路4.3 Java代码实现 5. 字母异位词分…

Guitar Pro 8 .1全新功能介绍及2023官方特惠优惠券

《中国好声音》节目诞生10年多热度不减&#xff0c;每一季都有籍籍无名的学员成为万众瞩目的新星。怎么像他们一样把爱好变成事业&#xff1f;带着这个问题在不断的探寻中找到了答案&#xff0c;那就是要在有限的时间里比别人做效率更高的事。所谓“工欲善其事&#xff0c;必先…

超百家上市公司抛出回购、增持计划

9月以来&#xff0c;多家上市公司披露回购方案或增持计划&#xff0c;持续向市场传递积极信号&#xff0c;以真金白银提振市场信心。 Wind统计显示&#xff0c;截至9月28日&#xff0c;9月以来已有77家上市公司披露回购预案&#xff0c;其中多家公司发布超过亿元的回购计划。 …

WINDOWS与LINUX的文件文件共享

打开VMware: 点击虚拟机->点击设置 出来虚拟机设置&#xff0c;咱们点击选项->有个共享文件夹点击->选择总是启用->点击添加 下一步 此处选择一个windows下与虚拟机共享的一个目录 最后确定就ok了 那怎么在虚拟机Linux中访问共享文件呐 在文件的其他位置选择计…

SpringMVC如何处理表单提交与文件上传

SpringMVC处理表单提交与文件上传 SpringMVC是一个流行的Java框架&#xff0c;用于构建Web应用程序。它提供了强大的功能来处理表单提交和文件上传操作。本文将深入探讨SpringMVC如何处理这些常见的Web任务&#xff0c;以及如何使用示例代码来实现它们。 表单提交处理 表单提…

基于 SpringBoot+Vue 的企业人事管理系统

1 简介 本文讲解的是 Java基于 SpringBoot 的人事管理系统。本系统涉到的功能主要有&#xff1a;首页&#xff0c;个人中心&#xff0c;员工管理&#xff0c;部门管理&#xff0c;员工考勤管理&#xff0c;请假申请管理&#xff0c;加班申请管理&#xff0c;员工工资管理&…

cesium 鹰眼图2

cesium 鹰眼图2 1、实现方法 本文采用cesium 和 leaflet 来时实现,鹰眼采用leaflet来实现 2、示例代码 2.1 <!DOCTYPE html> <html><head><meta charset="utf-8">

【图像融合】差异的高斯:一种简单有效的通用图像融合方法[用于融合红外和可见光图像、多焦点图像、多模态医学图像和多曝光图像](Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

mathtype如何嵌入到word中?详细mathtype安装步骤教程

mathtype是一款功能特别强大的数学方式编辑软件&#xff0c;为用户提供各种强大的数学公式符号帮助用户进行计算&#xff0c;并且速度很快。有小伙伴知道mathtype如何嵌入到word中吗&#xff0c;这里小编就给大家详细介绍一下mathtype嵌入到word中的方法&#xff0c;有需要的小…

第81步 时间序列建模实战:Adaboost回归建模

基于WIN10的64位系统演示 一、写在前面 这一期&#xff0c;我们介绍AdaBoost回归。 同样&#xff0c;这里使用这个数据&#xff1a; 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal Syndr…

循环语句

章节目录&#xff1a; 一、while 循环1.1 句式与基本使用1.2 while...else1.3 单行语句 二、for 循环2.1 句式与基本使用2.2 for...else2.3 range() 函数 三、退出循环3.1 break3.2 continue 四、pass 语句五、结束语 一、while 循环 1.1 句式与基本使用 句式&#xff1a; w…

【进阶C语言】自定义类型

本节内容大致目录如下&#xff1a; 1.结构体 2.位段 3.枚举 4.联合&#xff08;共用体&#xff09; 以上都是C语言中的自定义类型&#xff0c;可以根据我们的需要去定义。 一、结构体 一些基础知识在初阶C语言的时候已经介绍过&#xff0c;在这里粗略概括&#xff1b;重…

C++基于Qt中QOpenGLWidget模块实现的画图板源码+可执行文件

基于Qt中QOpenGLWidget模块实现的画图板 一、系统概述 本系统拟完成一个画图板&#xff0c;对多种常见图形进行基本操作系统功能 二维图形的输入&#xff1a;可输入或全部清除直线、矩形、圆、椭圆、多边形、文本等二维图形的变换&#xff1a;在直线、矩形、圆、椭圆、多边形…