南大《软件分析》课程笔记——Intermediate Representation
南大《软件分析》——Intermediate Representation
@(静态分析)
Content
编译器和静态分析的关系
AST vs IR
IR:3-地址代码(3AC)
实际静态分析器的3AC—Soot(Java)
SSA-静态单赋值
基本块(BB)
控制流图(CFG)
Compiler and Static Analyzers

中间表示形式IR(通常是三地址码)之后进行静态分析,优化,检查。
IR是提供给静态分析程序的基础。
- 词法分析
- 语法分析
- 语义分析
- 中间代码生成
- 代码优化
- 代码生成
AST vs IR

| AST | IR |
|---|---|
| 更高级,接近语法结构 | 更底层,接近汇编 |
| 依赖语言 | 不依赖语言 |
| 适用于快速类型检查 | 压缩简洁 |
| 缺乏控制流信息 | 包含控制流信息 |
通常认为IR是静态分析的基础
Intermediate Representation
三地址码(3-Address Code)
中间表示形式,右侧最多只有一个操作符

- Address:
- Name:a、b
- Constant: 3
- 编译器的临时变量:t1、t2

实际静态分析器的3AC—Soot(Java)
Soot
https://github.com/Sable/soot
https://github.com/Sable/soot/wiki/Tutorials
最常用的Java静态分析框架
invokespecial: call constructor, call superclass methods, call private methods
invokevitual: instance methods call(virual dispath)
invokeinterface: cannot optimization, checking interface implementation
invokestatic: call static methods
Java7: invokedynamic -> Java static typing , dynamic language runs on JVM #让动态语言在JVM上运行
method signature: class name : return type method name(parameter1 parameter2)
SSA-静态单赋值
给每一个定义变量一个新的命名,传递到接下来的使用当中,每个变量有一个定义(赋值的目标变量)。

每一个变量都有自己的定义
merge的地方会使用Phi funciton
优点:
- 程序流信息可以间接包含进独一无二的变量名。通过SSA,流不敏感分析方法可以获得部分流敏感分析方法所带来的精度。
- Define- and-Use清晰明显
缺点:
- 引入的变量和Phi function过多
- 转换为机器码时效率变低(引入很多拷贝操作)
基本块(BB)
只有1个开头入口和1个结尾出口的最长连续的3-地址指令序列。

识别基本块的算法:首先确定入口指令,第一条指令是入口;任何跳转指令的目标地址是入口;任何跟在跳转指令之后的指令是入口。然后构造基本块,任何基本块包含1个入口指令和其接下来的指令。

控制流图(CFG)
基本块作为节点
添边规则:
- A的结尾有跳转指令到B
- 原始指令序列中,B紧跟着A,且A的结尾不是无条件跳转。

将原本的语句变为BB再变成CFG

南大《软件分析》课程笔记——Intermediate Representation的更多相关文章
- Linux内核分析课程笔记(一)
linux内核分析课程笔记(一) 冯诺依曼体系结构 冯诺依曼体系结构实际上就是存储程序计算机. 从两个层面来讲: 从硬件的角度来看,冯诺依曼体系结构逻辑上可以抽象成CPU和内存,通过总线相连.CPU上 ...
- Coursera台大机器学习技法课程笔记11-Gradient Boosted Decision Tree
将Adaboost和decision tree相结合,需要注意的地主是,训练时adaboost需要改变资料的权重,如何将有权重的资 料和decision tree相结合呢?方法很类似于前面讲过的bag ...
- linux内核分析课程笔记(二)
运行一个精简的操作系统内核 存储程序计算机是几乎所有计算机的基础逻辑框架. 堆栈是计算机中非常基础的东西,在最早计算机没有高级语言时,在高级语言出现之前,我们没有函数的概念.但高级语言出现后有了函数调 ...
- Coursera台大机器学习技法课程笔记03-Kernel Support Vector Machine
这一节讲的是核化的SVM,Andrew Ng的那篇讲义也讲过,讲的也不错. 首先讲的是kernel trick,为了简化将低维特征映射高维特征后的计算,使用了核技巧.讲义中还讲了核函数的判定,即什么样 ...
- Coursera台大机器学习技法课程笔记01-linear hard SVM
极其淡腾的一学期终于过去了,暑假打算学下台大的这门机器学习技法. 第一课是对SVM的介绍,虽然之前也学过,但听了一次感觉还是很有收获的.这位博主总结了个大概,具体细节还是 要听课:http://www ...
- Coursera台大机器学习技法课程笔记05-Kernel Logistic Regression
这一节主要讲的是如何将Kernel trick 用到 logistic regression上. 从另一个角度来看soft-margin SVM,将其与 logistic regression进行对比 ...
- Coursera台大机器学习技法课程笔记10-Random forest
随机森林就是要将这我们之前学的两个算法进行结合:bagging能减少variance(通过g们投票),而decision tree的variance很大,资料不同,生成的树也不同. 为了得到不同的g, ...
- Coursera台大机器学习技法课程笔记08-Adaptive Boosting
将分类器组合的过程中,将重点逐渐聚焦于那些被错分的样本点,这种做法背后的数学原因,就是这讲的内容. 在用bootstraping生成g的过程中,由于抽样对不同的g就生成了不同的u,接下来就是不断的调整 ...
- Coursera台大机器学习技法课程笔记14-Radial Basis Function Network
将Radial Basis Function与Network相结合.实际上衡量两个点的相似性:距离越近,值越大. 将神经元换为与距离有关的函数,就是RBF Network: 可以用kernel和RBF ...
随机推荐
- 鸿蒙内核源码分析(定时器篇) | 哪个任务的优先级最高 | 百篇博客分析OpenHarmony源码 | v31.02
百篇博客系列篇.本篇为: v31.xx 鸿蒙内核源码分析(定时器篇) | 哪个任务的优先级最高 | 51.c.h .o 本篇说清楚定时器的实现 读本篇之前建议先读鸿蒙内核源码分析(总目录)其余篇. 运 ...
- PolarDB PostgreSQL logindex 设计
背景介绍 PolarDB采用了共享存储一写多读架构,读写节点RW和多个只读节点RO共享同一份存储,读写节点可以读写共享存储中的数据:只读节点仅能各自通过回放日志,从共享存储中读取数据,而不能写入,只读 ...
- TCP协议基本概念
TCP协议最主要的特点 TCP是面向连接的运输层协议.这就是说,应用程序在使用TCP协议之前,必须要建立TCP连接,且在传输完毕后,还要断开连接. 每一条TCP连接只能有两个端点,每一条TCP连接只能 ...
- C语言数组的创建和使用
C语言数组的创建和使用 数组是一组相同类型元素的集合. 一维数组的创建及初始化 //创建int类型的数组 //直接创建:不对数组进行初始化 int arr1[10]; //最常用.好用的创建方式 in ...
- Go的Select
Go 的通道有两种操作方式,一种是带 range 子句的 for 语句,另一种则是 select 语句,它是专门为了操作通道而存在的.这里主要介绍 select 的用法. 一.select的语法 se ...
- 从零入门 Serverless | SAE 的远程调试和云端联调
作者 | 弈川 阿里巴巴云原生团队 导读:本节课程包含三部分内容,前两个部分简单介绍远程调试以及端云联调的原理,最后在 Serverless 应用引擎中进行实际演示. 经过之前课程的学习,相信大家对于 ...
- Vue3学习(二)之集成Ant Design Vue
一.集成Ant Design Vue npm install ant-design-vue@2.0.0-rc.3 --save 兼容性 Ant Design Vue 2.x 支持所有的现代浏览器. 如 ...
- dubbo-admin的使用
目录 了解 dubbo-admin 下载 dubbo-admin 使用 dubbo-admin 1.dubbo-admin是什么 dubbo-admin是一个监控程序,可以通过web很方便的管理监控众 ...
- Pytorch 实现简单线性回归
Pytorch 实现简单线性回归 问题描述: 使用 pytorch 实现一个简单的线性回归. 受教育年薪与收入数据集 单变量线性回归 单变量线性回归算法(比如,$x$ 代表学历,$f(x)$ 代表收入 ...
- websocket方案调研及实践
目录 webscoket方案调研及实践 一.使用场景 二.方案调研 1.Ajax短轮询 2.long-polling长轮询 3.iframe长连接 4.XHR-streaming 5.Websocke ...