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