Java中的别名分析

pde*_*eva 17 java compiler-construction optimization code-analysis java-bytecode-asm

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

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

msr*_*har 12

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

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

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


Ben*_*and 7

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

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

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

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


Dav*_*ton 1

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

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