WALA使用笔记(7)- 调用图

调用图是表示潜在的上下文敏感的调用图,通过方法的逻辑克隆构建。每个调用图节点CGNode都表示在上下文中的方法IMethod.

可以使用CallGraph.getNodes(MethodReference m)来获取方法对应的节点。

WALA支持一系列的高速算法,与流不敏感的指针分析集成。WALA还可以通过快速类型分析来构建调用图,但是使用并不好。

接下来将探究调用图的构建方法:CallGraphTestUtil (com.ibm.wala 1.5.8-SNAPSHOT API)icon-default.png?t=M276https://wala.github.io/javadoc/com/ibm/wala/core/tests/callGraph/CallGraphTestUtil.html

简单构建调用图代码如下:

        AnalysisOptions options = CallGraphTestUtil.makeAnalysisOptions(scope, entrypoints);
        CallGraphBuilder<InstanceKey> builder = Util.makeVanillaZeroOneCFABuilder(Language.JAVA, options, new AnalysisCacheImpl(), cha);
        CallGraph cg = builder.makeCallGraph(options, (MonitorUtil.IProgressMonitor)null);

(1)类CallGraphTestUtil的介绍为用于测试的调用图的实用程序。

(2)类AnalysisOptions是控制调用图生成的选项基本接口,构造函数为:AnalysisOptions(AnalysisScope scope, java.lang.Iterable<? extends Entrypoint> e) ,scope为分析域,e为分析入口。Entrypoint类的重要函数:

(3)包com.ibm.wala.ipa.callgraph.impl,这个包中提供了各种调用图构造算法所需的一些基本功能。com.ibm.wala.ipa.callgraph.impl (com.ibm.wala 1.5.8-SNAPSHOT API)icon-default.png?t=M276https://wala.github.io/javadoc/com/ibm/wala/ipa/callgraph/impl/package-summary.html

  • AllApplicationEntrypoints类,包括 分析范围内的所有应用程序方法作为入口点。构造方法如下:

 所以入口点设置可以改为:

Iterable<Entrypoint> entrypoints = new AllApplicationEntrypoints(scope,cha);
  • Util类,是调用图实体。其中重要的函数:

一系列makeMainEntrypoints函数,用来构建main入口点。

一系列makeRTABuilder函数,返回an RTA Call Graph builder

一系列makeZeroCFABuilder函数,返回a 0-CFA Call Graph Builder

一系列makeZeroOneCFABuilder函数,返回a 0-1-CFA Call Graph Builder

一系列makeNCFABuilder函数,返回CallGraphBuilder使用call-String上下文敏感性。。。。

  • makeCallGraph所在类PropagationCallGraphBuilder

nullicon-default.png?t=M276https://wala.github.io/javadoc/com/ibm/wala/ipa/callgraph/propagation/PropagationCallGraphBuilder.html这个抽象基类为调用图构建器提供了通用算法,该算法依赖于通过迭代数据流求解器的传播。此前实现是的所有点都保持活跃状态,即使是那些不跨过程的局部变量,这倒是空间效率太低,可以考虑按需要重新计算局部集。

很多东西还是不明白,等我学习深入后,搞明白再来修改。

参考链接:UserGuide:CallGraph - WalaWikiicon-default.png?t=M276http://wala.sourceforge.net/wiki/index.php/UserGuide:CallGraph


版权声明:本文为weixin_47195879原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。