P2
2021-04-28 14:53:54 1 举报
AI智能生成
南大软件分析P2
作者其他创作
大纲/内容
P2
Compilers and Static Analyzers
编译过程
词法分析
语法分析
生成AST
语义分析和中间代码生成
生成Decorated AST、IR
代码优化
目标代码生成
静态分析针对的是IR
AST vs. IR
AST(抽象语法树)
IR(中间代码)
AST和IR的比较
AST
high-level and closed to grammar structure
和具体的编程语言相关
缺少控制流信息
IR
low-level and closed to machine code
独立于具体的编程语言
包括控制流信息
通常被视作静态分析的基础
IR: Three-Address Code (3AC)
指令的右侧最多只能有一个运算符
地址的类型
变量名
常量名
编译时产生的临时变量
每种类型的指令都有自己对应的3AC
常见的3AC形式
x = y bop z
bop:二进制算术或逻辑运算
x = uop y
uop:一元运算(减,取反,强制转换)
x = y
goto L
L:代表程序位置的标签
goto L:无条件跳转
if x goto L
if x rop y goto L
rop:关系运算符
if … goto L: 条件跳转
3AC in Real Static Analyzer: Soot
Soot是Java最流行的静态分析框架
Soot的 IR(3AC)是Jimple
Static Single Assignment (SSA)
每个定义都必须起一个新的名字
所有的赋值语句都要赋值给一个新的变量(临时变量)
SSA的优缺点
详见PPT
Basic Blocks (BB)
基本块(BB)是连续三地址指令的最大序列,其属性为
特点
只能在开头,即块中的第一条指令中进入
只能在末尾,即块中的最后一条指令退出
构建基本块的方法
Control Flow Graphs (CFG)
控制流分析:输入程序的3AC,输出程序的CFG
CFG是静态分析的基本结构
CFG的节点可以是一个单独的3地址指令,或者是(通常)一个基本块(BB)
从块A到块B有且仅有一条边
从块A的结尾到块B的开头、有条件或无条件的跳转
BB的predecessor(前驱节点)和successor(后继节点)
通常还会人为的再加上Entry和Exit节点
0 条评论
下一页