爪哇中的别名分析

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

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


答案 1

我知道有三个开源程序分析框架,其中包含Java的别名分析:

  1. WALA(免责声明:我是WALA维护者)。
  2. 烟尘
  3. 和弦

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


答案 2

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

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

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

  1. 阿威洛依
    • 生成第三方库的 Java 字节码摘要。
    • 论文: [1][2]
    • 资源: [1]
  2. 流量矿工
    • 生成第三方库的流和属性的 XML 摘要。
    • 论文: [1]
    • 资源: [1]

推荐