概述
“Backward Analysis”或“反向分析”是一种分析技术,它从程序或代码的输出结果开始,逆向推导出程序的状态或者输入值
这里的表达式“IN[s]=fs(OUT[s])”可以被解读为:给定一个状态s的输出OUT[s],通过某个函数fs来推导出该状态的输入IN[s]
IN[s]=fs(OUT[s]) 说明
-
IN[s] 表示到达状态s之前的输入值或属性
-
OUT[s] 表示从状态s出发的输出值或属性
-
fs是某种函数或操作,它描述了如何从OUT[s] 得到 IN[s]
例子
假设我们有一个简单的表达式: a = b + c; 在编译器对这段代码进行反向分析时,可能会关注变量a的值如何由b和c计算得来的
-
假设我们已经知道a的值(输出, 即OUT[s])
-
反向分析要找出b和c的值(输入, 即IN[s])
如果我们知道a的值是5,并且表达式 a = b + c,那么反向分析可能如下:
假设fs是一个减法操作,那么我们可以写成fs(OUT[s]) = IN[s], 即:
-
fs(5) = b + c
-
5 = b + c
-
b = 5 - c
在这种情况下,如果我们知道c的值(比如2),我们就可以计算出b的值:
-
b = 5 - 2
-
b = 3