目录
指针分析
指针分析紧接数据流分析,是静态分析中的一个难点。遗憾的是能把相关内容讲得通俗易懂的资料非常少,中文的更基本没有。所以我斗胆在这里以例子的形式讲一下静态分析中的指针分析。参考资料主要在此.
如果有讲错的地方还望斧正。
指针分析的目的
对于任何一个指针/引用,能否在编译阶段就知道它会指向内存那块位置(位置在这里并不是0xFFFF这样的具体位置,而是说指向哪个stack/heap上local/object)呢?
通过把停机问题reduced to, 能证明指针问题是不可决定的。也就是不能对任何指针都准确的分析出它会确切指向哪。但这不妨碍我们求出近似解,从而在某些情况下能作出优化。
因此我们把问题转化为: 对于任何一个任何指针,能否在编译阶段知道它所有可能(may)指向的位置?
最简单的回答自然是不知道(top), 这种回答没有实际意义,我们要的是更”紧”的答案。
基础
因为我们关心的是指针所指向的位置,指针是一个变量,能改变变量值的命令只有赋值语句。
和C类似,我们定义有关指针的赋值语句见下表第一列:
赋值 | 约束 | 意义 | 边 |
---|---|---|---|
a = &b |
a⊇b
|
b∈pts(a)
|
无 |
a = b |
a⊇b
|