软件分析笔记02---Intermediate Representation

news2024/9/22 13:31:35

整体contents

compiler (source code ——> machine code)

non-trivial非平凡的

经过 语义分析->语法分析->类型检查等各种trivial的分析(前端),生成中间代码IR->进行non-trivial的分析(及静态分析)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vmEsiRzh-1677574742921)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228142107245.png)]

IR介绍

IR为三地址码(3-address)(一个运算符,运算对象1,运算对象2,结果)(因为每个陈述都包含了三个变量,所以它被称为三地址码。)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y44e3nXv-1677574742922)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228144449506.png)]

常用三地址码(简单的)举例:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6EdzBnu0-1677574742922)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228145923576.png)]

AST vs IR

IR特点:

  • 更接近机器语言
  • 通常语言都可以转换成IR,对语言无依赖性
  • 简洁统一
  • 保留了控制流信息
  • 有利于进行静态分析

SSA(static single assignment)

给每个definition一个fresh name,如下图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bbwapkkd-1677574742922)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228154319402.png)]

针对最后一条(每个变量只有一个定义)引入的一种function(phi-function 类似于不只一个definition)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GYZCEoGB-1677574742923)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228154521599.png)]

SSA优势:流信息有所保存、定义-使用更明确清楚

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3OrHKIoh-1677574742923)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228155241711.png)]

控制流图:

静态分析的基础结构

3AC to CFG

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MdQw0OYJ-1677574742923)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228155558924.png)]

BB块的构建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tNTPtuD4-1677574742923)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228160947225.png)]

1.确认leader

  • 第一个instruction
  • target instruction
  • jump之后的第一个instruction

2.构造BB

例子:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1GmXKKFi-1677574742924)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228161416045.png)]

CFG构造:在BB的基础上添加边(哪些需要加,哪些不需要)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vdXna6TI-1677574742924)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228162053523.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aydbHMDj-1677574742924)(C:\Users\XuL\AppData\Roaming\Typora\typora-user-images\image-20230228162848943.png)]

PL ---- JVM(方法调用简单介绍)

片转存中...(img-aydbHMDj-1677574742924)]

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

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

相关文章

Linux 基础介绍-基础命令

文章目录01 学习目标02 Linux/Unix 操作系统简介2.1 Linux 操作系统的目标2.2 Linux 操作系统的作用2.3 Unix 家族历史2.4 Linux 家族历史2.5 Linux 和Unix 的联系2.6 Linux 内核介绍2.7 Linux 发行版本2.8 Unix/Linux 开发应用领域介绍03 Linux 目录结构3.1 Win 和Linux 文件系…

C++之入门之引用,内联函数

一、引用 1、引用的概念 在C中,引用的本质其实就是给一个已经存在的变量”起别名“。也就是说,引用与它所引用的对象共用一块空间。(同一块空间的多个名字) 就比如说,李逵又叫黑旋风,而黑旋风就是指李逵…

线程安全实例分析

一、变量的线程安全分析 成员变量和静态变量是否线程安全? ● 如果它们没有共享,则线程安全 ● 如果它们被共享了,根据它们的状态是否能够改变,又分两种情况 —— 如果只有读操作,则线程安全 —— 如果有读写操作&am…

STM32学习笔记-USART串口通信+与野火STM32F407板载ESP8266进行通信

文章目录STM32USART介绍STM32USART框图第一部分第二部分第三部分发送器时序图接收器第四部分软件部分:STM32通过USART与板载ESP8266通讯实验板载WIFI模块电路图实现方式:第一步:配置USART1和USART3的GPIO及其中断第二步:通过中断服…

(2023版)零基础入门网络安全/Web安全,收藏这一篇就够了

由于我之前写了不少网络安全技术相关的文章和回答,不少读者朋友知道我是从事网络安全相关的工作,于是经常有人私信问我: 我刚入门网络安全,该怎么学? 要学哪些东西? 有哪些方向? 怎么选&#x…

智慧渔业海洋鱼类捕捉系统

我国的水产捕捞业可分为海洋捕捞、远洋捕捞和淡水捕捞三类,其中淡水渔业是指在淡水水域进行捕捞、养殖和加工淡水水产品的社会生产领域。近年来,随着经济水平的提高和淡水渔业的快速发展,捕捞业规模不断壮大。尽管渔业已从单纯的捕捞发展为系…

卷麻了,00后测试用例写的比我还好,简直无地自容......

经常看到无论是刚入职场的新人,还是工作了一段时间的老人,都会对编写测试用例感到困扰?例如: 如何编写测试用例? 作为一个测试新人,刚开始接触测试,对于怎么写测试用例很是头疼,无法…

Apple主推的智能家居是什么、怎么用?一篇文章带你从零完全入门 HomeKit

如果你对智能家居有所了解,那应该或多或少听人聊起过 HomeKit。由 Apple 开发并主推的的 HomeKit 既因为产品选择少、价格高而难以成为主流,又因其独特的优秀体验和「出身名门」而成为智能家居领域的焦点。HomeKit 究竟是什么?能做什么&#…

供应链的有效管理,分析指标有哪些

对于企业而言,供应链是一个很复杂的、体系化的生态系统,从原材料、到供应商、到生产、仓库、物流,最后到达经销商或者最终客户那里,这个链条很长。相关的分析指标也有很多,在这些指标里面也有非常多可以扩展、延申的内…

Android 系统的启动流程

前言:从开机的那一刻,到开机完成后launcher将所有应用进行图标展示的这个过程,大概会有哪一些操作?执行了哪些代码?作为Android开发工程师的我们,有必要好好的梳理一遍。既然要梳理Android系统的启动流程&a…

Python-scatter散点图及颜色大全

# -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as pltplt.rcParams[font.sans-serif][SimHei] plt.rcParams[axes.unicode_minus] False #matplotlib画图中中文显示会有问题,需要这两行设置默认字体plt.xlabel(X) plt.ylabel(Y) plt.xlim…

人工智能——离线情况下自动给视频添加字幕,支持中文,英文,日文等等

前言 最近打开百度网盘,看到播放视频有一个AI字幕功能,心情非常激动,看视频的同时可以看自动生成的字幕,防止听不清视频中人物的话语 然而不是SVIP,我试用过了之后就没有这个功能选项了 我在想,如果随便哪一个“免费”…

Windows 安装RocketMQ

文章目录一、RocketMQ是什么?二、准备工作1.环境要求2.下载与解压3.启动MQ4. 测试是否成功启动三、安装管理端1. 代码下载2. 修改配置文件3. 启动MQ客户端jar包四、rocketMQ代码的使用入门五、问题记录1. 启动mqbroker.cmd没有反应2.消费者重复消费消息一、RocketMQ…

二叉搜索树实现

树的导览 树由节点(nodes)和边(edges)构成,如下图所示。整棵树有一个最上端节点,称为根节点(root)。每个节点可以拥有具有方向的边(directed edges)&#xf…

第51天|LeetCode503.下一个更大元素 II、LeetCode42. 接雨水

1.题目链接:下一个更大元素 II 题目描述: 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序&#…

Android kotlin 组件间通讯 - LiveEventBus 及测试(更新中)

<<返回总目录 文章目录 一、LiveEventBus是什么二、测试一、LiveEventBus是什么 LiveEventBus是Android中组件间传递消息,支持AndroidX,Event:事件,Bus:总线 范围全覆盖的消息总线解决方案 进程内消息发送App内,跨进程消息发送App之间的消息发送更多特性支持 免配…

进制转换(二进制,八进制,十进制,十六进制)涵盖整数与小数部分,内容的图片全为手写【详细图解】

各种进制之间的相互转换1. 各进制表示数1.1 数码1.2 基数1.3 位权2. 十进制转换为其他进制2.1 整数部分2.2 小数部分3. 其他进制转换为十进制4. 二进制转换为八进制5. 二进制转换为十六进制6. 八进制转换为十六进制1. 各进制表示数 二进制&#xff1a;0&#xff0c;1逢二进一 八…

Java企业开发学习笔记(5下)采用注解方式使用AOP

该文章主要为完成实训任务&#xff0c;详细实现过程及结果见【http://t.csdn.cn/FBkpc】 文章目录二、采用注解方式使用AOP2.1 创建所需自包2.2 创建杀龙任务2.3 创建勇敢骑士类2.4 创建吟游诗人切面2.5 创建Spring配置类2.6 创建骑士测试类2.7 运行测试方法testBraveKnight()&…

【学习总结】Kalibr标定相机与IMU

本文仅用于记录自己学习过程。 使用方法 Kalibr包括&#xff1a;相机内参&#xff0c;多相机外参&#xff0c; (已知IMU和相机内参的)相机与IMU标定&#xff0c;以及扩展Kalibr支持IMU内参标定。 当已知IMU内参和相机内参后&#xff0c;使用按照指定方式录制的rosbag&#x…

西电数据库简答题核心考点汇总(期末真题+知识点)

文章目录前言一、关系代数1.1 真题一1.2 真题二二、SQL语句2.1 真题一2.2 真题二三、事务3.1 真题一四、关系理论4.1 真题一4.2 真题二五、数据库设计5.1 样例一5.2 考题二前言 主要针对西安电子科技大学《数据库系统》的概念核心考点进行汇总&#xff0c;包含核心考点。 【期…