南大软分实验笔记|A5 非上下文敏感指针分析

💡 原文中文,约8800字,阅读约需21分钟。
📝

内容提要

这篇文章是南大软件分析课程的第五个作业,要求完成非上下文敏感的过程间指针分析。文章介绍了实验内容和算法实现的核心逻辑。同时提供了新增的分析规则和测试用例。作者总结称这门课程质量很高,之前的笔记和实验记录帮助他快速恢复函数执行现场,节省了不少时间。

🔎

延伸解读

实验定位与难度

作为南大软件分析课程第五次作业,本实验要求实现非上下文敏感的过程间指针分析。作者指出,虽然这是第一个指针分析实践,但难度并不高,边缘情况少,认真实现算法即可。本地测试通过后,代码也通过了OJ所有测试用例。

新增分析规则与访问者模式

实验在原有指针分析规则基础上,新增了对静态字段、数组索引和静态方法调用的支持。实现上采用访问者模式设计StmtProcessor类,处理不同语句类型。这种设计使代码结构清晰,便于扩展和维护。

核心算法实现要点

核心逻辑包括addReachable、addPFGEdge、analyze、propagate和processCall等函数。analyze通过工作列表循环处理指针传播,propagate计算差集并更新指针流图,processCall处理方法调用并更新调用图。这些函数共同实现了过程间指针分析。

测试用例与结果验证

文章提供了一个静态字段的本地测试用例,展示了程序分析后各变量、静态字段的指向集合。通过分析结果可以验证指针分析的正确性。作者建议参考gonghr的博客,其中包含A1到A5的OJ满分源码,可用于对比分析。

❓

Q&A

南大软件分析课程的第五个作业主要内容是什么?

主要内容是完成非上下文敏感的过程间指针分析。

实验中新增了哪些分析规则?

新增的分析规则包括对静态字段、数组索引和静态方法调用的处理。

AddReachable函数的作用是什么?

AddReachable函数用于遍历方法的所有语句,更新可达性。

文章中提到的访问者模式是如何应用的?

访问者模式被用于设计部分功能,以便于处理不同类型的语句。

作者对课程的总体评价是什么?

作者认为课程质量很高,之前的笔记和实验记录帮助他快速恢复学习进度。

实验中使用的主要算法是什么?

实验中使用的主要算法是过程间指针分析算法,包含多个函数如analyze和propagate。

➡️

继续阅读