《软件分析》课程实验作业平台概述

纸上得来终觉浅,绝知此事要躬行。

——《冬夜读书示子聿》,【宋】陆游

静态程序分析的学习难点主要有二:一是其有着一定的理论深度和广度,不易系统性地深入学习;二是其理论到实践的跨度较大,主要原因是缺少系统性的实验作业平台用以支持编程训练。鉴于此,我们设计了南京大学的《软件分析》课程,并配套设计了 Tai-e(太阿)实验作业平台open in new window用以解决上述问题,旨在降低静态程序分析学习的门槛,让学生们真正系统性地掌握静态程序分析技术。

Tai-e 是一个分析 Java 程序的静态程序分析框架,相比于已有的知名静态程序分析框架(如 Soot、Wala 等),Tai-e 要易学易用很多。Tai-e 提供精炼的 IR,明晰且易拓展的接口,丰富的程序分析算法,直观易懂的框架结构,以及指导性强的文档等。需要注意的是,Tai-e 分为教学版和科研版两个版本,两个版本虽都易学易用,但侧重有所不同。该套实验作业的设计是基于教学版,相比于科研版,教学版更容易方便学生理解作业题目及实验相关代码,但是由于教学版在很多分析的具体设计上与科研版有所不同,因此它们在分析能力和性能上有较大差距。尽管如此,由于 IR、框架结构、程序表示等诸多方面的一致性,熟悉教学版后会非常容易上手科研版。

我们在 Tai-e 上设计了八个实验作业用以在实践中加深理解《软件分析》课程中重要且实用的理论知识。这八个作业涵盖多种静态分析技术,包括编译优化(活跃变量分析、常量传播分析、死代码检测),基础程序分析(程序调用图构建、非上下文敏感指针/别名分析、各类经典上下文敏感指针/别名分析),以及程序分析在软件安全性的应用(污点分析)。八个实验作业之间相互关联,帮助在不同维度理解静态程序分析中实用却又很难在已有学习资料中接触到的重要知识点。例如,如何利用已有分析构建新的分析?如何通过处理方法调用和别名关系来提升分析精度?如何通过提高基础程序分析的精度来提高其下游应用的分析精度?此外,我们也会在实验作业中为大家介绍一些理论课程没有覆盖到的静态程序分析的方法和技巧

实验作业的总览及其关系如下图所示。

overview

读书切戒在慌忙,涵泳工夫兴味长。

——《读书》,【宋】陆九渊

Last Updated: