1.三地址码
没有正式定义
// 最多1个操作符
a+b+3 -> t1 = a+b
t2 = t1+3
Address:
Name:a、b
Constant: 3
编译器的临时变量:t1、t2
2.Soot-常用的Java静态分析框架
// java IR(Jimple)基本知识
invokespecial:call constructor, call superclass methods, call private methods
invokevirtual: instance methods call (virtual dispatch)
invokeinterface: cannot optimization, checking interface implementation
invokestatic:call static methods
Java 7: invokedynamic -> Java static typing, dynamic language runs on JVM
method signature: class name, return type, method name(parameter1 type, parameter2 type)
3.SSA-静态单赋值(optional material)
给每一个定义变量一个新的名字,传递到接下来的使用当中,每个变量有1个定义(赋值的目标变量)。
4.控制流图分析
前置知识
基本块
定义:只有1个开头入口和1个结尾出口的最长3-地址指令序列。
入口从第一条指令入,出口从最后一条指令出。唯一性
识别基本块的算法:首先确定入口指令,第一条指令是入口;任何跳转指令的目标地址是入口;任何跟在跳转指令之后的指令是入口。然后构造基本块,任何基本块包含1个入口指令和其接下来的指令。
条件jump 分真假,会有两个出口,无条件jump,只会有一个出口