《静态分析:开胃菜》概览
《程序分析:开胃菜》比高级课程《Principles of Program Analysis》更加基础。和另一本书《形式化方法:开胃菜》类似。我们使用 程序图(Program Graphs) 来模型化程序。
- 程序图
-
-
流程内程序分析的基本思想
-
4种经典bit-vector analysis
-
递增框架
-
forward/backward analysis
-
leatest and greatest solutions corresponds to the partial order
-
- worklist算法,reverse postorder,strong components,natural loops
- 整数分析作为一个独立的程序属性分析:符号分析,常量传播,区间分析
- 抽象解释介绍
- 使用类型系统来开发信息流分析,保证软件可信性,完整性。
- 有效地使用Datalog来有效地表示并求解程序分析问题。
这个网站有一些在线实验可以进行测试
http://www.formalmethods.dk
我们定义一门简单的语言来作为后续分析的案例。后续的分析算法会在此语言之上。
- 程序图上的行为
a
a
a:
-
a
a
a ::=
- x := a
- | A[a1] := a2
- | c?x (在信道c上输入赋值x)
- | c?A[a] (在信道c上输入赋值给A[a])
- | c!a (在信道c上输出变量a的值)
- | c!A[a] (在信道c上输出变量A[a]的值)
- | b (布尔表达式)
- | skip
-
a
a
a ::=
- 跟算数表达式相关
- a ::=
- n (整数字面量)
- | x (普通变量)
- | A[a0] (数组变量)
- | a1 OPa a2
- | -a0
- | A# (取数组的长度)
- OPa ::=
- + | - | * | / | % …
- a ::=
- 与逻辑表达式相关
- b ::=
- true
- | false
- | a1 OPr a2
- | b1 OPb b2
- | ~b0 (取反)
- OPr ::=
- = | > | >= | …
- OPb ::=
- ^ | V …
- b ::=