当前位置: 首页 > news >正文

静态分析2:控制流分析(构建CFG)

参考:南京大学《软件分析》课程2

1、控制流分析

  • 控制流分析实际上指的是构建控制流图(Control Flow Graph,CFG)
  • CFG是静态分析的基础数据结构
  • CFG的节点可以是单个指令、基本块(Basic Block,BB)

2、构建基本块(Basic Block,BB)

(1)基本块的概念

Basic blocks (BB) are maximal sequences of consecutive three-address instructions with the properties that

  • It can be entered only at the beginning, i.e., the first instruction in the block
  • It can be exited only at the end, i.e., the last instruction in the block

解释:

基本块是具有以下属性的连续3AC指令的最大序列:

  • 只有一个入口,仅在开头进入,即块的第一条指令。
  • 只有一个出口,仅在结尾退出,即块的最后一条指令。
(2)构建基本块

INPUT: A sequence of three-address instructions of P
OUTPUT: A list of basic blocks of P
METHOD:
(1) Determine the leaders in P
• The first instruction in P is a leader
• Any target instruction of a conditional or
unconditional jump is a leader
• Any instruction that immediately follows a
conditional or unconditional jump is a leader
(2) Build BBs for P
• A BB consists of a leader and all its subsequent
instructions until the next leader

解释:

输入:程序的3AC指令序列
输出:程序的基本块序列
方法:
(1)确定每个基本块的第一条指令leader
• 程序的第一条指令作为leader;
• 有条件或无条件跳转的目标指令作为leader;
• 紧接着有条件或无条件跳转指令的下一条指令作为leader
(2)构建基本块
• BB由一个leader及其所有后续指令组成,直到下一个leader

例子:
在这里插入图片描述

3、构建控制流图(Control Flow Graph ,CFG)

• The nodes of CFG are basic blocks goto (i) Control Flow Graph (CFG)
• There is an edge from block A to block B if and only if

  • There is a conditional or unconditional jump from the end of A to the beginning of B
  • B immediately follows A in the original order of instructions and A does not end in an unconditional jump

• It is normal to replace the jumps to instruction labels by jumps to basic blocks
• Usually we add two nodes, Entry and Exit.

  • They do not correspond to executable IR
  • An edge from Entry to the BB containing the first instruction of IR
  • An edge to Exit from any BB containing an instruction that could be the last instruction of IR

解释:

• 控制流图的节点是基本块
• 基本块之间的边

  • 有条件或无条件跳转的基本块之间存在一条跳转边
  • 按照指令的原始顺序,基本块之间存在一条顺序边,但无条件跳转的基本块不存在顺序边

• 将跳转到指令替换成跳转到基本块
• 添加entry和exit

  • CFG和IR通常不对应
  • Entry到BB的边,包括IR的第一条指令
  • BB到Exit的边(可能是多条),包括IR的最后一条指令

在这里插入图片描述

相关文章:

静态分析2:控制流分析(构建CFG)

参考:南京大学《软件分析》课程2 1、控制流分析 控制流分析实际上指的是构建控制流图(Control Flow Graph,CFG)CFG是静态分析的基础数据结构CFG的节点可以是单个指令、基本块(Basic Block,BB)…...

Linux 应用领域

目录 服务器领域 桌面环境 软件开发 数据分析与科学计算 嵌入式系统 虚拟化和云计算 人工智能与机器学习 物联网(IoT) 网络安全 服务器领域 Linux在服务器领域的应用是其最为广泛和成熟的领域之一。由于其开源、稳定、高效和安全的特性&#xf…...

FPM383C指纹模块超详解 附驱动

0. 本人使用环境介绍 0.1 硬件环境 ESP32-C3FPM383C指纹模块一根破旧的usb数据线 0.2 软件环境 Clion2024.2.2ESP-IDF5.3.1Clion插件ESP-IDF 1. 硬件接口说明 1.1 UART UART 缺省波特率为 57.6Kbps,数据格式:8 位数据位,2 位停止位&am…...

若依框架篇-若依集成 X-File-Storage 框架(实现图片上传阿里云 OSS 服务器)、EasyExcel 框架(实现 Excel 数据批量导入功能)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 实现使用 Excel 文件批量导入 1.1 导入功能的前端具体实现 1.2 导入功能的后端具体实现 1.3 使用 EasyExcel 框架实现 Excel 读、写功能 1.4 将 Easy Excel 集成到…...

.rmallox勒索病毒肆虐:如何有效防范与应对

引言 在当今这个数字化时代,网络安全已成为一个不可忽视的重要议题。随着信息技术的飞速发展,网络空间的安全威胁也日益复杂多变。病毒、木马、勒索软件等恶意程序层出不穷,比如.rmallox勒索病毒。它们利用先进的技术手段,如代码…...

人工智能能否影响未来生活:一场深刻的社会与技术变革

随着人工智能技术的不断发展,我们已经目睹了它在各行各业掀起的巨大变革浪潮。从医疗行业的病例诊断、药物研发,到企业运营的数据分析、智能决策,再到日常生活中的智能语音助手、自动驾驶汽车、智能家居,人工智能正以前所未有的速…...

cmu 15-445学习笔记-3 存储引擎

03 Database Storage-Part Ⅰ 数据库存储上半部分 数据库分层划分结构图: Disk Manager:存储引擎,管理磁盘上的文件Bufferpool Manager:管理内存的缓存池Access Methods:访问方法Operator Execution:执行…...

[linux]和windows间传输命令scp 执行WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!错误解决

[linux]和windows间传输命令scp 执行WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!错误解决. 现象: 原因: 接收方服务器系统做了某些更改,导致登录时会报错。主要因为接收方服务器对登录过它的主机都会把该主机登录标识证书记录下来&a…...

C++ | Leetcode C++题解之第518题零钱兑换II

题目&#xff1a; 题解&#xff1a; class Solution { public:int change(int amount, vector<int>& coins) {vector<int> dp(amount 1), valid(amount 1);dp[0] 1;valid[0] 1;for (int& coin : coins) {for (int i coin; i < amount; i) {valid[…...

高并发-负载均衡

负载均衡在微服务架构中是一个重要的组成部分&#xff0c;旨在优化资源利用、提高服务可用性和确保系统的高可扩展性。以下是对微服务中的负载均衡的详细介绍&#xff0c;包括其原理、类型、实现方式以及相关的技术。 一、负载均衡的原理 负载均衡的基本原理是将进入系统的请…...

Docker 常用命令全解析:提升对雷池社区版的使用经验

Docker 常用命令解析 Docker 是一个开源的容器化平台&#xff0c;允许开发者将应用及其依赖打包到一个可移植的容器中。以下是一些常用的 Docker 命令及其解析&#xff0c;帮助您更好地使用 Docker。 1. Docker 基础命令 查看 Docker 版本 docker --version查看 Docker 运行…...

基于 Postman 和 Elasticsearch 测试乐观锁的操作流程

鱼说&#xff0c;你看不到我眼中的泪&#xff0c;因为我在水中。水说&#xff0c;我能感觉到你的泪&#xff0c;因为你在我心中。 -村上春树 在分布式系统中&#xff0c;多个并发操作对同一资源的修改可能导致数据不一致。为了解决这种问题&#xff0c;Elasticsearch 提供了乐观…...

如何从PPT中导出600dpi的高清图

Step1. 修改PPT注册表 具体过程&#xff0c;参见如下链接&#xff1a;修改ppt注册表&#xff0c;导出高分辨率图片 Step2. 打开PPT&#xff0c;找到自己想要保存的图&#xff0c;选中图像&#xff0c;查看图像尺寸并记录 Step3. 重新新建一个PPT&#xff0c;并根据记录的图片…...

day01-ElasticStack+Kibana

ElasticStack-数据库 #官网https://www.elastic.co/cn/ #下载7.17版环境准备 主机名IP系统版本VMware版本elk110.0.0.91Ubuntu 22.04.417.5.1elk210.0.0.92Ubuntu 22.04.417.5.1elk310.0.0.93Ubuntu 22.04.417.5.1 单机部署ES 1.下载ES软件包&#xff0c;放到/usr/local下 […...

HTML 约束验证

HTML5引入了表单相关的一些新机制&#xff1a;它为<input>元素和约束验证增加了一些新的语义类型&#xff0c;使得客户端检查表单内容变得容易。基本上&#xff0c;通过设置一些新的属性&#xff0c;常用的约束条件可以无需 JavaScript 代码而检测到&#xff1b;对于更复…...

vue3项目开发一些必备的内容,该安装安装,该创建创建

重新整理了一下项目开发必备的一些操作&#xff0c;以后直接复制黏贴运行&#xff0c;随着项目开发&#xff0c;后期会陆续补充常用插件或组件等 如果你是还没有安装过的新人&#xff0c;建议从《通过安装Element UI/Plus来学习vue之如何创建项目、搭建vue脚手架、npm下载、封装…...

2D拓扑图

2D拓扑图主要指的是在二维平面上表示物体形状和关系的一种图形表示方法。 一、基本概念 2D网格拓扑结构&#xff1a;在二维平面上&#xff0c;由一系列的节点&#xff08;node&#xff09;和边&#xff08;edge&#xff09;组成。每个节点代表一个具体的位置或坐标点&#xf…...

大数据面试题整理——Hive

系列文章目录 大数据面试题专栏点击进入 文章目录 系列文章目录Hive 面试知识点全面解析一、函数相关&#xff08;一&#xff09;函数分类与特点&#xff08;二&#xff09;concat和concat_ws的区别 二、SQL 的书写和执行顺序&#xff08;一&#xff09;书写顺序&#xff08;二…...

Python实现图像(边缘)锐化:梯度锐化、Roberts 算子、Laplace算子、Sobel算子的详细方法

目录 Python实现图像&#xff08;边缘&#xff09;锐化&#xff1a;梯度锐化、Roberts算子、Laplace算子、Sobel算子的详细方法引言一、图像锐化的基本原理1.1 什么是图像锐化&#xff1f;1.2 边缘检测的基本概念 二、常用的图像锐化算法2.1 梯度锐化2.1.1 实现步骤 2.2 Robert…...

【电机控制】相电流重构——单电阻采样方案

【电机控制】相电流重构——单电阻采样方案 文章目录 [TOC](文章目录) 前言一、基于单电阻采样电流重构技术原理分析1.1 单电阻采样原理图1.2 基本电压矢量与电流采样关系 二、非观测区2.1 扇区过渡区2.2 低压调制区 三、非观测区补偿——移相法四、参考文献总结 前言 使用工具…...

OpenClaw密码管理:nanobot安全存储与自动填充方案

OpenClaw密码管理&#xff1a;nanobot安全存储与自动填充方案 1. 为什么需要本地化的密码管理方案 去年的一次数据泄露事件让我彻底放弃了所有云端密码管理器。当时我使用的某知名商业工具突然弹出安全警报&#xff0c;提示"您的部分密码可能已被未授权访问"。虽然…...

收藏!程序员/小白入门大模型必看,我的AI学习踩坑与正确路线分享

很多程序员和小白同学都私信我说&#xff0c;想入门AI、学习大模型&#xff0c;但始终找不到清晰的切入点&#xff0c;不知道该从哪里开始&#xff0c;也没有适合自己的学习路线。我深耕技术领域多年&#xff0c;从前端自学起步&#xff0c;后来转型学习AI与大模型&#xff0c;…...

AutoConnect:ESP32/ESP8266 运行时 Wi-Fi 配网与 OTA 一体化方案

1. AutoConnect 库深度技术解析&#xff1a;面向嵌入式工程师的 ESP32/ESP8266 运行时 Wi-Fi 配置系统AutoConnect 是一个专为 ESP32 和 ESP8266 平台设计的 Arduino 库&#xff0c;其核心目标是在设备运行时&#xff08;runtime&#xff09;通过 Web 界面完成 Wi-Fi 网络的动态…...

抖音批量下载终极指南:免费无水印视频一键获取

抖音批量下载终极指南&#xff1a;免费无水印视频一键获取 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 你是否曾为保存喜欢的抖音视频而烦恼&#xff1f;面对心仪的内容创作者&#xff0c;想要收藏他们的…...

用Python的powerlaw库分析游戏付费数据:从‘鲸鱼玩家’到长尾分布,手把手教你做实战分析

用Python的powerlaw库解析游戏付费行为&#xff1a;从数据清洗到商业决策全流程 游戏行业的数据分析师们常常面临一个经典问题&#xff1a;如何理解玩家付费行为背后的数学规律&#xff1f;当我们打开一份付费数据报表&#xff0c;往往会发现少数"鲸鱼玩家"贡献了绝…...

python基于微信小程序的方言文化传播平台的设计与开发

目录需求分析与规划技术选型与架构设计核心功能实现数据处理与优化测试与部署运营与迭代项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作需求分析与规划 明确平台的核心功能需求&#xff0c;包括方言内容展示、语音录制与分享、…...

python-flask-djangol框架的食品仓库管理系统

目录需求分析与功能规划技术栈选择系统架构设计开发与测试流程安全与性能优化部署方案项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作需求分析与功能规划 明确食品仓库管理系统的核心需求&#xff0c;包括库存管理、食品分类、…...

Python气象数据处理实战:用Goff-Gratch公式5分钟搞定露点温度计算

Python气象数据处理实战&#xff1a;用Goff-Gratch公式5分钟搞定露点温度计算 气象数据分析中&#xff0c;露点温度是一个关键指标&#xff0c;它直接反映了空气中的水汽含量。对于天气预报、农业灌溉、工业控制等领域&#xff0c;准确计算露点温度至关重要。本文将带你用Pytho…...

Java全栈工程师的实战面试:从技术细节到业务场景

Java全栈工程师的实战面试&#xff1a;从技术细节到业务场景 一、面试开始 面试官&#xff08;微笑着&#xff09;&#xff1a;你好&#xff0c;很高兴见到你。我是负责技术面试的张工&#xff0c;今天我们会聊一些技术相关的问题。首先&#xff0c;请简单介绍一下你自己。 应聘…...

tkinter表格神器tkintertable实战:5分钟搞定可拖拽编辑的数据表格(附完整代码)

tkinter表格神器tkintertable实战&#xff1a;5分钟搞定可拖拽编辑的数据表格&#xff08;附完整代码&#xff09; 在Python GUI开发中&#xff0c;表格控件一直是刚需但实现起来又颇为棘手的组件。传统tkinter自带的Treeview虽然能勉强实现表格功能&#xff0c;但在交互体验上…...