没有合适的资源?快使用搜索试试~ 我知道了~
静态程序分析(五、六):数据流分析基础理论
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 79 浏览量
2022-06-19
22:27:42
上传
评论
收藏 3.88MB PDF 举报
温馨提示
试读
28页
一、迭代算法 Iterative Algorithm Data Flow Analysis Foundations,数据流分析基础理论。掌握数据流分析 基础理论,才能自如的设计数据流分析算法来解决特定的静态分析问题。 下图是一个通用的数据流分析迭代算法,采用前向数据流,它用来得到一个 数据流问题的解 给定一个含有 k 个节点的程序 CFG,迭代算法每次迭代时更新每个 CFG 节点 的输出信息,即 OUT[n]。 假设数据流分析中数据 data facts 的集合是 V,这里的数据是指我们分析 问题的数据,数据的 domain 就是这些数据抽象值的域。比如,我们在分析到达 定值这个具体数据流问题时,V 就是程序所有变量的集合,domain 就是程序中所 有的变量可能取得的抽象值的集合{0,1}。再如,常量传播例子中,分析的数据 data facts 集合 V 就是程序中所有的变量,v 的 domain 就是{未定义、不是常 量、0、1、2、1.2、...} ,这个 domain 就是无穷的,因为作为常量可是任何数。 在到达定值中,我们用一个 bit vector 来表示节点的输出数据作为
资源推荐
资源详情
资源评论
1
静态程序分析(五、六):数据流分析基础理论
一、迭代算法 Iterative Algorithm
Data Flow Analysis Foundations,数据流分析基础理论。掌握数据流分析
基础理论,才能自如的设计数据流分析算法来解决特定的静态分析问题。
下图是一个通用的数据流分析迭代算法,采用前向数据流,它用来得到一个
数据流问题的解。
给定一个含有 k 个节点的程序 CFG,迭代算法每次迭代时更新每个 CFG 节点
的输出信息,即 OUT[n]。
假设数据流分析中数据 data facts 的集合是 V,这里的数据是指我们分析
问题的数据,数据的 domain 就是这些数据抽象值的域。比如,我们在分析到达
定值这个具体数据流问题时,V 就是程序所有变量的集合,domain 就是程序中所
有的变量可能取得的抽象值的集合{0,1}。再如,常量传播例子中,分析的数据
data facts 集合 V 就是程序中所有的变量,v 的 domain 就是{未定义、不是常
量、0、1、2、1.2、...} ,这个 domain 就是无穷的,因为作为常量可是任何数。
在到达定值中,我们用一个 bit vector 来表示节点的输出数据作为结果,
每一位 bit 代表一个变量,某一位为 1 表示定值能到达,为 0 表示无法到达。在
到达定值的格图上,每个节点的输出信息用一个集合表示,如{x,y,z}表示 x,y,z
三个变量的定值在当前程序节点是可达的。
在常量传播中,每个节点的输出信息需要用一个包含 pair(v,_)的集合表示,
如{(x,12),(y,1),(z,23)},每个 pair<x,m(x)>表示一个变量 x 的抽象取值,m(x)
表示 x 到抽象域的映射值,如果 x 为常量时,m(x)就直接用 x 具体的常量值作为
其抽象域的值。
再回到主题。
我们定义 k-tuple 如下:
则 k-tuple 是集合 中的一个元素, 我们简写
为 V
k
,解释如下:
2
因为 CFG 有 k 个节点,每个节点的输出为 OUT[n
j
], 1
≤
j
≤
k,OUT[n
j
]的数据
值域为 V
j
。
算法的每次迭代,需要对每个节点求出输出 out[n
j
],所以每次迭代可以看作
是 V
k
中的一个元素向 V
k
中一个新的元素做映射,这个映射是通过控制流在节点
上应用传递函数的结果。针对这种映射,我们可以定义为一个函数如下:
F:V
k
→ V
k
按照这种理解,迭代算法就是迭代输出一些列的 k-tuples,直到某个 k-tuple
和紧接的它前一个 k-tuple 的输出值相同,算法就停止了,具体如下图所示:
在第 i+1 次迭代,算法停止时,可以得到
,而对于函数
F
,如果
X = F(X),则 X 是函数 F 的不动点。所以我们说,迭代算法达到了一个不动点。
根据这种推理,我们进一步提出以下三个问题:
问题 1:迭代算法能够保证停止,达到不动点吗?也就是说,一定有一个解
吗?
问题 2:如果第一个问题回答为 yes。第二个问题就是:只有一个解或者一
3
个不动点吗?如果有多个,我们迭代算法得到的解是最好的吗?
问题 3:我们什么时候可以达到不动点?也就是什么时候得到一个解?
二、偏序 Partial Order
为定义偏序,先说明以下名词:
Partial Order:偏序。
poset:偏序集。
:偏序关系。
P:是一个元素的集合,集合中的元素满足 关系。
我们以一个 pair(P, )来定义一个偏序集 poset, 是一个二元关系, 在集
合 P 上定义一个偏序, 满足如下属性:
Reflexivity:自反性,自己是自己的偏序。
Antisymmetry:反对称性。
Transitivity:传递性。
如果偏序关系 满足以上三个特性,我们就说 pair(P, )是一个偏序集。
下面举例说明偏序:
第一个例子: 偏序集 poset (S, ⊑ ) 中 S 是一个整数集合, ⊑ 代表 ≤(数
学中数字比较,小于等于符号)。
我们来验证二元关系符≤是否满足偏序关系的三个特性:
(1)Reflexivity ,如 ,1≤1 , 2≤2,满足。
(2)Antisymmetry , x ≤ y ∧ y ≤ x then x = y ,满足
(3)Transitivity 如,1 ≤ 2 ∧ 2 ≤ 3 then 1 ≤ 3,满足
因此,根据定义,poset (S, ⊑ ) 是一个偏序集。
第二个例子: 偏序集 poset (S, ⊑ ) 中 S 是一个整数集合, ⊑ 代表 <(数学
中数字比较的小于符号)
我们来<验证是否满足三偏序关系的三个特性。
(1)Reflexivity ,如 1<1 , 2<2,不满足。
(2)Antisymmetry , x < y ∧ y < x then x = y ,满足
(3)Transitivity 如,1 < 2 ∧ 2 < 3 then 1 < 3,满足
因此,根据定义,poset (S, ⊑ ) 不满足第一个特性,所以不是一个偏序集。
4
第三个例子: 偏序集 poset (S, ⊑ ) 中 S 是英文单词的集合(如下图),⊑ 代
表子字符串关系 substr,如, s1 ⊑ s2 意思就是 s1 是 s2 的子串。
我们来 substr 验证是否满足三偏序关系的三个特性。
(1)Reflexivity ,如 自己是自己的字串,满足。
(2)Antisymmetry , x ≤ y ∧ y ≤ x then x = y ,字符串 1 是字符串 2
的字串,并且字符串 2 是字符串 1,则两个字串串是同一个,满足。
(3)Transitivity 如,如,in 是 sin 的字串,sin 是 singing 的字串,则 in 也是
singing 字串,满足。
因此,根据定义,poset (S, ⊑ ) 是一个偏序集。
注意:偏序意味着对于集合 P 中的任意两个元素,不一定都满足偏序关系,
但是一定有满足的。例如下图中 pin 和 sin 就不满足第三个例子的偏序关系 substr。
第四个例子: 偏序集 poset (S, ⊑ ) 中 S 是字母集合 {a,b,c}的 power set 幂
集,⊑ 代表子字符串关系 substr。
{a,b,c}的 power set 如下图:
我们来 substr 验证是否满足三偏序关系的三个特性。
(1)Reflexivity ,如 自己是自己的字串,满足。
(2)Antisymmetry , x ≤ y ∧ y ≤ x then x = y ,满足
(3)Transitivity 如,{a}是{a,b}的字串,{a,b}是{a,b,c}的字串,则{a}是{a,b,c}
的字串,满足。
因此,根据定义,poset (S, ⊑ ) 是一个偏序集。
5
三、偏序的上界和下界
upper bound 上界:给定一个偏序集 (P, ⊑ ) ,S 是集合 P 的子集,即 S ⊆ P。
我们说一个属于 P 的元素 u 是 S 的上界,是指任意给定 S 中的一个元素 x,满足
x ⊑ u,即 x 偏序于 u,则 u 是 S 的上界。
lower bound 下界:
给定一个偏序集 (P, ⊑ ) ,S 是集合 P 的子集,即 S ⊆ P。我们说一个属于 P
的元素 l 是 S 的下界,是指任意给定 S 中的一个元素 x,满足 l ⊑ x,即 l 偏序于
x,则 l 是 S 的下界。
举例说明如下:
上图给一个集合 P,它是一个{a,b,c}的幂集,阴影部分是 P 的子集 S,则 S
的上界就是集合{a,b,c},下界就是{}。
lub 最小上界:
我们定义集合 S 的 the least upper bound (lub or join),记作 :对于 S 的所
有上界 u,满足 。如果集合 S 中只有两个元素 a 和 b, 可以记为 。
glb 最大下界:
我们定义集合 S 的 the greatest lower bound (glb, or meet),记作 :对于 S
的所有的下界 l,满足 。如果集合 S 中只有两个元素 a 和 b, 可以记为
举例说明如下:
剩余27页未读,继续阅读
资源评论
manok
- 粉丝: 2386
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功