小编Tha*_*ain的帖子

什么是 IDFS 下的分配函数,为什么指针分析是非分配的?

我目前正在用 Java 做一个过程间分析项目,我正在研究使用 IFDS 求解器来计算程序的控制流图。我发现很难遵循 IFDS 框架和图形可达性描述中涉及的数学。我在几个地方读到过使用这个求解器计算程序的点集是不可能的,因为“已知指针分析是一个非分配问题”。[1] 其他消息来源表示,这通常是专门针对“强更新”的,据我所知,这些更新是现场写入语句。

我想我基本上可以遵循求解器如何计算边并计算出数据流事实。但我不太明白这个: f(A ? B) = f(A) ? f(B) 在实践中意味着作为分配函数的定义,因此它的意思是说指向分析处理非分配函数。

链接源 [1] 给出了一个特定于字段写入语句的示例:

A a = new A();
A b = a;
A c = new C();
b.f = c;
Run Code Online (Sandbox Code Playgroud)

它声称为了推理对 bf 的分配,还必须考虑基数 b 的所有别名。我可以按照这个。但我不明白的是这个动作的属性是什么使其不可分配。

来自 [2] 的类似(我认为)示例:

x = y.n
Run Code Online (Sandbox Code Playgroud)

在语句之前有指向边 y-->obj1 和 obj1.n-->obj2(其中 obj1 和 2 是堆对象)。他们声称

如果我们独立地考虑每个输入边,就不可能正确地推断出边 x-->obj2 应该在语句之后生成。这个语句的流函数是整个点到图的函数,不能分解成每条边的独立函数然后合并得到正确的结果。

我想我几乎明白了,至少是第一个例子在说什么,但我没有得到分配函数的概念,这阻碍了我了解全貌。任何人都可以在不使用我难以遵循的集合论的情况下,在指针分析的实际基础上解释什么是分配或非分配函数?

[1] http://karimali.ca/resources/pubs/conf/ecoop/SpaethNAB16.pdf

[2] http://dl.acm.org/citation.cfm?doid=2487568.2487569(付费专区,抱歉)

java pointers static-analysis analysis taint

7
推荐指数
1
解决办法
576
查看次数

标签 统计

analysis ×1

java ×1

pointers ×1

static-analysis ×1

taint ×1