OPAL-关于在OPAL中实现构造调用图

时间:2016-12-08 15:59:13

标签: scala call-graph opal-framework

在论文[静态分析的软件产品线(2014)]中,有一个插图相关的构造调用图(清单7)。

在此示例中,Line14与构造调用图相关。当我检查src代码和API时,我能找到的是DefaultCHACallGraphDomain.scala,它没有构造调用图的实现。

因为我的目的是使用OPAL构建调用图。是否有任何演示或文档可以帮助我理解OPAL中现有的CallGraphDomain?目前,我只能找到一些班级声明。

如果有人能给我一些与此主题相关的建议,我将非常感激。

提前致谢。

1 个答案:

答案 0 :(得分:0)

纸张中显示的界面不再存在,所以你完全可以忘掉它。

获取CallGraph类的默认接口由您在加载Java项目的字节码时检索的Project对象提供。

一般代码示例:

val project = ... // a java project
val computedCallGraph = project.get(/* Some call graph key */)
val callGraph = computedCallGraph.callGraph // the final call graph interface.

计算出的调用图包含几个内容。它包含入口点,未解析的方法调用,构造时出错的异常以及实际的调用图。

OPAL为您提供了几种调用图算法,您可以通过将相应的调用图键传递给Project的{​​{1}}方法来检索每种算法。

目前,以下两个密钥可用,可以传递给get(更多信息可在此类文档中找到):

  • Project.get
  • CHACallGraphKey

分析模式 - 库与应用程序

要为软件项目构建有效的调用图,它取决于要选择的分析模式的项目类型。虽然应用程序提供完整的信息(不完整的项目,类加载等),但软件库旨在供其他项目使用。但是,在构建调用图时,必须牢记这两种不同的场景。更多细节可以在这里找到:VTACallGraphKey

OPAL提供以下分析模式:

  • DesktopApplication(对应用程序调用图是安全的)
  • LibraryWithClosePackagesAssumption(对于用于安全性不敏感分析的调用图是安全的)
  • LibraryWithOpenPackagesAssumption(非常保守/安全的安全分析)

分析模式可以在OPAL的配置文件中配置,也可以在运行时设置为项目设置。您可以在org.opalj.AnalysisModes下的Common项目中找到配置文件。

/src/main/resources/reference.conf支持所有这些分析模式,而CHACallGraphKey目前仅支持应用程序。

注意:接口可能会在即将发布的版本中再次更改。