南大软分实验笔记|A5 非上下文敏感指针分析
内容提要
这篇文章是南大软件分析课程的第五个作业,要求完成非上下文敏感的过程间指针分析。文章介绍了实验内容和算法实现的核心逻辑。同时提供了新增的分析规则和测试用例。作者总结称这门课程质量很高,之前的笔记和实验记录帮助他快速恢复函数执行现场,节省了不少时间。
延伸解读
实验定位与难度
作为南大软件分析课程第五次作业,本实验要求实现非上下文敏感的过程间指针分析。作者指出,虽然这是第一个指针分析实践,但难度并不高,边缘情况少,认真实现算法即可。本地测试通过后,代码也通过了OJ所有测试用例。
新增分析规则与访问者模式
实验在原有指针分析规则基础上,新增了对静态字段、数组索引和静态方法调用的支持。实现上采用访问者模式设计StmtProcessor类,处理不同语句类型。这种设计使代码结构清晰,便于扩展和维护。
核心算法实现要点
核心逻辑包括addReachable、addPFGEdge、analyze、propagate和processCall等函数。analyze通过工作列表循环处理指针传播,propagate计算差集并更新指针流图,processCall处理方法调用并更新调用图。这些函数共同实现了过程间指针分析。
测试用例与结果验证
文章提供了一个静态字段的本地测试用例,展示了程序分析后各变量、静态字段的指向集合。通过分析结果可以验证指针分析的正确性。作者建议参考gonghr的博客,其中包含A1到A5的OJ满分源码,可用于对比分析。
Q&A
南大软件分析课程的第五个作业主要内容是什么?
主要内容是完成非上下文敏感的过程间指针分析。
实验中新增了哪些分析规则?
新增的分析规则包括对静态字段、数组索引和静态方法调用的处理。
AddReachable函数的作用是什么?
AddReachable函数用于遍历方法的所有语句,更新可达性。
文章中提到的访问者模式是如何应用的?
访问者模式被用于设计部分功能,以便于处理不同类型的语句。
作者对课程的总体评价是什么?
作者认为课程质量很高,之前的笔记和实验记录帮助他快速恢复学习进度。
实验中使用的主要算法是什么?
实验中使用的主要算法是过程间指针分析算法,包含多个函数如analyze和propagate。