有人可以为我指出一个框架或 Java 别名分析的实现。我查看了 asm 框架,但它只提供数据流分析和控制流分析。
更新:只是好奇,但有人知道 Findbugs 是否进行别名分析吗?
有人可以为我指出一个框架或 Java 别名分析的实现。我查看了 asm 框架,但它只提供数据流分析和控制流分析。
更新:只是好奇,但有人知道 Findbugs 是否进行别名分析吗?
我知道三个带有 Java 别名分析的开源程序分析框架:
请注意,在这些框架中实际实现的是指向分析,通过它可以确定可能的别名。有关 WALA 指针分析的一些详细信息,请访问http://wala.sourceforge.net/wiki/index.php/UserGuide:PointerAnalysis。
我认为这是一个非常重要的问题,因为指向分析/别名分析是大多数程序分析任务的基本部分。因此,这是我对 Java 框架更完整列表的尝试。有些比其他更完整,这是一个活跃的研究领域,所以我可能错过了一些。很难说哪种实现是最好的,但 DOOP 和 SPARK 似乎是学术界的流行选择。
用于处理第三方库的额外补充工具。
一种可能性是Sawja,在 OCaml 中实现。它似乎还没有包含别名分析,但它提供了构建块来制作一个。
关于您的更新,Bill Pugh 的 Google 演讲听起来像是 Findbugs 在代码中寻找特定模式而不解析指针。当然,那是在 2006 年,所以谁知道从那以后发生了什么……时间过得很快。
我在OOPSLA上看到了一些问题,但我不知道它处于什么状态。
我不知道其他的实现,只有大量的论文。
我们的DMS Software Reengineering Toolkit及其Java 前端可用于构建它。
DMS 提供通用解析、树/符号表构建和流分析(控制流、数据流、指向、调用图等)功能。通过将前端连接到该机器,人们可以执行特定语言的分析,而无需从头开始构建大部分机器。这些已被用于在非常大的 C 应用程序上进行全局指向分析和调用图构建,以及在 C++ 上进行控制流分析。
对于 Java,我们实现了方法本地控制流和本地数据流的某些方面。要进行良好的别名分析,您需要填写调用图构造。