视频地址
南京大学《软件分析》课程03(Data Flow Analysis I)
南京大学《软件分析》课程04(Data Flow Analysis II)
Content
- 数据流分析的概括
- 数据流分析预备知识(数学、符号知识)
- Reaching Definitions分析
- Live Variables分析
- Available Expressions分析
Overview of Data Flow Analysis
什么是Data Flow Analysis?
How application-specific Data Flows through the Nodes(BBs/statements) and Edges(control flows) of CFG(a program)?
保障分析的安全性:
-
may analysis:
结果可能是正确的(over-approximation)
-
must analysis:
结果必须是真实的(under-approximation)
不同的数据流分析有不同的
- data abstraction(符号抽象为+,-,0,unknown,undefined)
- flow safe-approximation(may/must analysis)
- transfer functions(+ op + = +等等)
- control-flow handlings(merge处的处理)
Preliminaries of Data Flow Analysis
- 输入和输出状态
- 转化函数的约束规则
- Forward Analysis(沿着控制流顺序): OUT[s]=f(IN[s])
- backward Analysis(反向控制流分析): IN[s]=f(OUT[s])
- 控制流约束规则
先暂不考虑方法调用,别名问题
Reaching Definitions Analysis
- 定义:在p处定义的变量在到达q处时变量未被重新赋值
- 用处:编译优化、错误检测(比如变量是否初始化)
may analysis
有一条path没有初始化就要报出错误
merge处要union
数据抽象
所有的定义用bit vectors来抽象
转换函数
OUT[B]=gen U (IN[B]-killB)
eg:
算法
细节之处:
- entry的out初始化为空:语义理解
- 第二行for排除了entry:作为data flow analysi模板,有的分析中边界初始化和其它的BB初始化可能不一样
- BB的out初始化:may analysis一般为空,must analysis一般为Top(All)
- 为什么算法可以停止?(下述例子理解)
example
这里只贴结果了,还是观看原视频最好(老师PPT做得很好很费心)
算法为什么可以停止
- gen和kill都是固定的(程序不变):输入不变,输出不变
- out不会缩小,有限
- 第一次所有结果都不变时即可结束(到达不动点)
Live Variables analysis
- 定义:变量v从p点沿着路径是否被使用(并未被重新定义)
- 作用:寄存器分配(替换不会被用到的)
数据抽象
仍为bit vectors
Backward analysis
在某条路某点上发现被use,可以自动向前传播
may analysis
有一条path用到就认为是live
merge处仍为union
转换函数
算法
细节之处:
- 已知out去求in
- 先use后define
example
Available Expressions analysis
- must analysis
- 定义: