NJU Static Analysis - Intermediate Representation
2024-03-24 17:22:19

NJU Static Analysis - Intermediate Representation

重点:

  • 编译过程中的IR

  • 3AC –> BB –> CFG的构建过程

Complier

大致过程如下:

词法分析(Scanner)=> 生成token

语法分析(Parser)=> 由token解析成AST(非上下文检查,比如只把token组成一个语句而已)

语义分析(Type Checker) => 上下文基础上进行检查

然后通过Translator(这个依语言而定)来转成IR(中间表示)

静态分析的对象就是IR

image-20240323213739799

IR

IR的表示方法:

组织结构 特点 类型 举例
Linear IR 基于线性代码、堆栈机代码 三地址代码
Graphical IR 基于图 抽象语 抽象语法树、法树、有向无环图、控制流图
Hybrid IR 基于图与线性代码混合 LLVM IR

3AC

3地址码

  • Some Common 3AC Forms

image-20240323215258383

不同静态分析框架中的3AC表示形式不同

SSA

SSA(Static Single Assignment)

给每个符号都添加下标以区别不同时刻下的符号信息

  • Give each definition a fresh name
  • Propagate fresh name to subsequent uses
  • Every variable has exactly one definition

需要在控制流图上添加一些新的语句

image-20240324155713331

Control Flow Analysis

3AC => BB => CFG

image-20240324160508540

Basic Blocks(BB)

Basic blocks (BB) are maximal sequences of consecutive three-address instructions

(连续的三地址码序列)

BB中的入口只能是BB中的第一句

结束语句只能是BB中的最后一句

image-20240324161340952

build Basic Blocks

每个Basic Blocks中的第一条指令是leader

我们确定每个Basic Block的本质方法是确定Basic Block中的leader和跳转语句即可

image-20240324165538362

Control Flow Graph(CFG)

控制流图的构建过程,注重“静态”思维,对于一些永真的判断是不关注的

  • CFG的节点是BB
  • 一个Basic Block到另一个Basic Block之间有且仅有一个edge
    • 有条件跳转,相邻块之间需要加edge
    • 无条件跳转,相邻块之间不需要加edge

image-20240324170233088

  • goto label-value ==> goto BasicBlock Name

image-20240324170558671