南大《软件分析》课程笔记——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源码 | v18.04
百篇博客系列篇.本篇为: v18.xx 鸿蒙内核源码分析(源码结构篇) | 内核每个文件的含义 | 51.c.h .o 前因后果相关篇为: v08.xx 鸿蒙内核源码分析(总目录) | 百万汉字注解 ...
- @Valid注解的一点理解
@Valid注解存在于spring-boot-starter-web包下,只要项目中存在该依赖就无需自行导入,也就是说该注解适用于springboot项目此注解用于表单验证,简化了判断代码用法:格式如 ...
- BufferedInputStream与BufferedOutputStream的缓存底层实现
首先观察BufferedInputStream 的继承体系,可以看出他是继承自一个FilterInputStream,而这个又是继承自InputStream 我们在之前的装饰器模式就讲过,这个Buff ...
- Docker-Compose的一些常用命令
一.Docker-Compose简介 1.Docker-Compose简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排. Docker-Co ...
- Vulnhub靶机渗透 -- DC6
信息收集 开启了22ssh和80http端口 ssh可以想到的是爆破,又或者是可以在靶机上找到相应的靶机用户信息进行登录,首先看一下网站信息 结果发现打开ip地址,却显示找不到此网站 但是可以发现地址 ...
- Unity——对象池管理
Unity对象池管理 一.Demo展示 二.逻辑 在游戏中会出现大量重复的物体需要频繁的创建和销毁:比如子弹,敌人,成就列表的格子等: 频繁的创建删除物体会造成很大的开销,像这种大量创建重复且非持续性 ...
- react之组件生命周期
四个阶段 初始化 运行中 销毁 错误处理(16.3以后) 初始化 constructor static getDerivedStateFromProps() componentWillMount() ...
- ApacheCon 首次亚洲大会火热来袭,SphereEx 邀您共赴年度盛会!
ApacheCon 是 Apache 软件基金会(ASF)的官方全球系列大会.作为久负盛名的开源盛宴,ApacheCon 在开源界备受关注,也是开源运动早期的知名活动之一. ApacheCon 每年举 ...
- NX二次开发 克隆
NXOpen.UF.UFSession theUfSession = NXOpen.UF.UFSession.GetUFSession(); try { //初始化 NXOpen.UF.UFClone ...
- USB OTG原理和 ID 检测原理
OTG 检测的原理是: USB OTG标准在完全兼容USB2.0标准的基础上,增添了 电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG).USB OTG技术可实现没有主机 ...