[南京大学]-[软件分析]课程学习笔记(三)-数据流分析

news2024/9/24 1:23:11

Data Flow Analysis

Overview of Data Flow Analysis

  • may analysis: outputs information that may be true(over-approximation) 可能正确,超出近似over-approximation
  • must analysis: outputs information that must be true (under-approximation) 必须正确,under-approximation

不同的数据分析应用会有不同的数据抽象方法和不同的流安全近似策略,即不同的转换函数和控制流处理;

Preliminaries of Data Flow Analysis

输入和输出状态:

  • 每个IR块的执行将input转换为output
  • input与之前的output关联,output与之后的input关联

每个数据流分析的应用中,将每个程序点关联一个数据流值,这个值代表在那个点能观察到的所有可能的程序状态的抽象;

这个应用中抽象出的所有值称为domain。

数据流分析是为所有语句s的IN和OUT找到一组近似安全的在约束规则下的解。

约束规则则是基于语句的语义即转移函数;约束规则基于控制流

  • 前向分析
  • 逆向分析

  • 汇合运算符用于在不同路径的汇合处汇总来自不同路径的贡献。

Reaching Definitions Analysis

可达性:从p点上到定义d到q点是否可达条件如下:

  • CFG中可达,存在路径
  • 在这条路径上中间不能kill,即不能出现新的定义d

在控制流图(CFG)的入口处为每个变量v引入一个虚拟定义(dummy definition),如果v的虚拟定义在某个点p处到达,并且v在该点p被使用,那么v可能在定义之前被使用(因为未定义的值到达了v)。

这句话在讨论静态程序分析的概念,其中CFG是一种表示程序控制流的图形结构。变量v在CFG的入口处被引入一个虚拟定义,表示变量v的初始值或默认值。当控制流到达某个点p时,如果该点p之前的某个虚拟定义到达了变量v,那么变量v可能在该点p之前被使用,因为此时v可能具有未定义的值。

这个概念强调了在静态程序分析中,对于变量使用的分析需要考虑变量的定义情况,特别是在复杂的控制流结构中,确保变量在使用之前已经得到了正确的定义,以避免潜在的错误或未定义行为。

属于may analysis, 需要查全

用bit做abstraction

transfer函数以及control flow对constrain公式如下:

算法如下:

example:

B3: 0011 0110意思是,第3和第4,第5和第6个点可以到达B3这个基本块
 

为什么这个算法会停:

为什么用这个condition

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

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

相关文章

WPF RadioButton单选失效

文章目录 前言解决方案 前言 我最近在照着教程敲代码,WPF深入讲解第8集。发现RadioButton按钮点击触发器不是单选的。WPF中单选和复选通过RadioButton和CheckButton来进行区分。我点击另一个RadioButton之后,之前的Radiobutton没有取消选择。 解决方案 …

文件上传下载概述

So Easy系列之文件上传下载教程 文件上传下载概述 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程。例如目前网站需要上传头像、上传下载图片或网盘等功能都是利用文件上传下载功能实现的。 文件上传下载实际上…

Shell运行原理以及Linux中的权限问题

目录 一、shell的运行原理 二、Linux权限的概念 2.1 用户账号切换 2.2 仅提升当前指令的权限 2.3 将普通用户添加到信任列表 三、Linux权限管理 3.1 文件访问者的分类 3.2 文件类型和访问权限 3.3 字符权限值的表示方法 3.3.1 字符表示方法 3.3.2 八进制表示法 3.4…

CSS学习04

文章目录 1.精灵图1.1 为什么需要精灵图1.2 精灵图(sprites)的使用 2.字体图标2.1 字体图标的产生2.2 字体图标的优点**2.3** **字体图标的下载****2.4** **字体图标的引入**2.5 字体图标的追加 3.CSS 三角3.1 介绍 4.CSS 用户界面样式4.1 鼠标样式 curs…

openGauss学习笔记-11 openGauss 简单数据管理-INSERT INTO语句

文章目录 openGauss学习笔记-11 openGauss 简单数据管理-INSERT INTO语句11.1 语法格式11.2 参数说明11.3 示例 openGauss学习笔记-11 openGauss 简单数据管理-INSERT INTO语句 在创建一个表后,表中并没有数据,使用这个表之前,需要向表中插入…

【Go|第8期】Lorca读取HTML的三种方式

日期:2023年7月16日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方&#xf…

【云原生】K8S单节点搭建

Kubernetes Kubernetes基础概念架构1、基础环境2、安装kubelet、kubeadm、kubectl 2、使用kubeadm引导集群1、下载各个机器需要的镜像2、初始化主节点 Kubernetes核心实战Pod Kubernetes基础概念 kubernetes具有以下特性: ● 服务发现和负载均衡 Kubernetes 可以使…

leetcode 669. 修剪二叉搜索树

2023.7.15 知道了如何删除二叉树节点的逻辑之后,这题就不难了。 可以参考删除二叉搜索树中的节点这篇文章。 下面直接上代码: class Solution { public:TreeNode* trimBST(TreeNode* root, int low, int high) {if(root nullptr) return root;root->…

MacOS使用USB接口与IPhone进行Socket通信

演示效果如下: 开源地址: GitHub - rsms/peertalk: iOS and Mac Cocoa library for communicating over USB 克隆源码: git clone https://github.com/rsms/peertalk.git 克隆后打开peertalk然后启动xcode工程 先启动MacOS服务端工程,再启动iOS客户端工程 客户端 服务端

[java安全]URLDNS

文章目录 [java安全]URLDNS前言HashMapURLURLStreamHandler调用过程调用链流程图POC [java安全]URLDNS 前言 URLDNS利用链是一条很简单的链子,可以用来查看java反序列化是否存在反序列化漏洞,如果存在,就会触发dns查询请求 它有如下优点&a…

spring复习:(35)在getBean时,在哪里根据普通bean和工厂bean进行区分处理来返回的?

在AbstractBeanFactory的doGetBean方法: 调用的getObjectForBeanInstance方法部分代码如下: 如果不是工厂bean,则直接将实例返回,否则调用getObjectFromFactoryBean方法获取工厂bean的getObject方法返回的对象 protected Object getObjectF…

Gradle和Aritifactory

Gradle和Aritifactory 本文链接:https://blog.csdn.net/feather_wch/article/details/131746580 文章目录 Gradle和AritifactoryGradle基本介绍Gradle插件开发流程本地仓库artifactory搭建添加仓库使用本地仓库gradle插件仓库引入 Gradle基本介绍 1、Gradle是一种…

node使用fluent-ffmpeg把webm格式的音频转成mp3

下载并安装ffmpeg http://ffmpeg.org/download.html?aemtntg-on https://www.gyan.dev/ffmpeg/builds/ 配置环境变量: 查询版本 装包: yarn add fluent-ffmpeg const ffmpeg require(fluent-ffmpeg)ffmpeg(/temp/ai/hello.webm).output(/temp/ai/h…

leetcode 542. 01 矩阵

给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例 1: 输入:mat [[0,0,0],[0,1,0],[0,0,0]] 输出:[[0,0,0],…

TaskExecutor和ExecutorService的简单整合

文章目录 一、遇到问题二、达成目的三、开始调研1、使用Async获取线程池流程2、查看中间件线程池工具类3、观察AsyncConfigurer接口4、查看TaskExecutorAdapter源码 四、复盘总结 一、遇到问题 自己负责的项目想通过引入一个中间件,达到在业务场景维度的全链路日志…

【【51单片机的蜂鸣器-11】】

51单片机的蜂鸣器 DS1302我一直有问题搁置了几百天了 先来看看蜂鸣器 搞了一个礼拜verilog然后出去吃饭 估计自己得有10多天没看c语言和51单片机了 现在先处理一下蜂鸣器的问题 蜂鸣器 蜂鸣器分为有源蜂鸣器和无源蜂鸣器 有源内部自带震荡源,将正负极接上直流电压…

类之间的关系

1. 关系强弱顺序(由强到弱) 泛化实现组合聚合关联依赖 图中,组合和聚合标错了 2. 依赖 虚线箭头,箭头指向被依赖类依赖关系描述了两个类之间的临时关系。通常不会持续整个对象的生命周期,而是创建一个临时的关系以满…

string【1】介绍与使用(超详解哦)

string的介绍与使用 引言string类常用接口构造函数容量操作size与lengthcapacityresizereserveclearempty 元素访问迭代器访问beginendrbeginrend范围for 下标访问 字符串修改insertappendpush_backoperatorpop_backerase 字符串查找findrfind 非成员函数operator>>opera…

光场成像2.0——聚焦型光场相机

光场2.0 1. 发展历程 由于光场1.0从结构上子图像的分辨率严重依赖MLA子透镜的数量,因此分辨率一直受限,限制了光场1.0结构的广泛应用。针对此不足,在2008年,又一篇伟大的论文出现了,该论文提出了全分辨率光场渲染的概…