18

有人可以为我指出一个框架或 Java 别名分析的实现。我查看了 asm 框架,但它只提供数据流分析和控制流分析。

更新:只是好奇,但有人知道 Findbugs 是否进行别名分析吗?

4

5 回答 5

13

我知道三个带有 Java 别名分析的开源程序分析框架:

  1. WALA(免责声明:我是 WALA 维护者)。
  2. 煤烟

请注意,在这些框架中实际实现的是指向分析,通过它可以确定可能的别名。有关 WALA 指针分析的一些详细信息,请访问http://wala.sourceforge.net/wiki/index.php/UserGuide:PointerAnalysis

于 2012-01-02T21:21:43.313 回答
7

我认为这是一个非常重要的问题,因为指向分析/别名分析是大多数程序分析任务的基本部分。因此,这是我对 Java 框架更完整列表的尝试。有些比其他更完整,这是一个活跃的研究领域,所以我可能错过了一些。很难说哪种实现是最好的,但 DOOP 和 SPARK 似乎是学术界的流行选择。

  1. 烟灰 (SPARK)
    • 在 PADDLE 之前发布,但仍被 Soot 社区积极使用。SPARK 完全集成到 Soot 中,并且在上下文不敏感的分析中表现良好。
    • 论文:[1]
    • 资源:[1][2]
  2. 烟灰(桨)
    • 于 2005-2008 年发布。Soot 包括 PADDLE 的前端接口,但不包括后端。该项目不再维护(我无法让它与最新版本的 Soot 一起运行)。支持基于 BDD 的集合表示和上下文敏感性的多个抽象,用于在 Soot 中进行分析。
    • 论文:[1] , [2] , [3] , [4]
    • 资源:[1]
  3. bddbddb
    • 一种基于声明性数据记录的规范,可将分析转换为基于 BDD 的高效操作。
    • 论文:[1] , [2]
    • 资源:[1]
    • CHORD 为上下文和上下文不敏感分析提供了几个标准的指向分析选项。
    • 资源:[1][2]
  4. 瓦拉
    • WALA 实现了过程间分布式环境 (IDE) 数据流算法。
    • 论文:[1]
    • 资源:[1][2]
  5. 杜普
    • 在 MIT 许可下发布的基于声明性 Datalog 的实现,但需要专有的LogicBlox Datalog 框架。我相信这个项目目前声称是可用的最快和最通用的框架。它也是一个非常活跃的项目,并在研究界得到广泛采用。
    • 论文:[1] , [2] , [3] , [4] , [5]
    • 资源:[1][2][3][4]
  6. Atlas(指向工具箱)
    • 2016年自己发布。Atlas的简单安徒生式指向分析。
    • Points-To Toolbox 在 MIT 许可下发布,但需要专有的 Atlas 框架。
    • 资源:[1]
  7. 水肺潜水
    • 用于上下文敏感点分析的基于约束的求解器。
    • 论文:[1]

用于处理第三方库的额外补充工具。

  1. 阿韦罗什
    • 生成第三方库的 Java 字节码摘要。
    • 论文:[1] , [2]
    • 资源:[1]
  2. 流量矿工
    • 生成第三方库的流和属性的 XML 摘要。
    • 论文:[1]
    • 资源:[1]
于 2016-02-21T18:17:53.070 回答
1

一种可能性是Sawja,在 OCaml 中实现。它似乎还没有包含别名分析,但它提供了构建块来制作一个。

关于您的更新,Bill Pugh 的 Google 演讲听起来像是 Findbugs 在代码中寻找特定模式而不解析指针。当然,那是在 2006 年,所以谁知道从那以后发生了什么……时间过得很快。

于 2011-12-03T21:57:39.670 回答
1

我在OOPSLA上看到了一些问题,但我不知道它处于什么状态。

我不知道其他的实现,只有大量的论文。

于 2011-12-03T21:44:05.117 回答
0

我们的DMS Software Reengineering Toolkit及其Java 前端可用于构建它。

DMS 提供通用解析、树/符号表构建和流分析(控制流、数据流、指向、调用图等)功能。通过将前端连接到该机器,人们可以执行特定语言的分析,而无需从头开始构建大部分机器。这些已被用于在非常大的 C 应用程序上进行全局指向分析和调用图构建,以及在 C++ 上进行控制流分析。

对于 Java,我们实现了方法本地控制流和本地数据流的某些方面。要进行良好的别名分析,您需要填写调用图构造。

于 2011-12-03T23:20:53.160 回答