上一次,我们讲述了如何使用wala对类进行最简单的分析,这次将使用wala工具,进行静态切片分析。
如果对切片不是很熟悉,可以直接搜索 程序切片,有很多关于切片技术的讲解,这里不在讲述。
步入主题:
首先,在上一次ClassHierarchy cha的基础上,需要构建入口点,分析选项,反射机制,如下所示:
Iterableentrypoints =Util.makeMainEntrypoints(scope, cha);
AnalysisOptions options = new AnalysisOptions(scope, entrypoints);
options.setReflectionOptions(ReflectionOptions.NONE);
随后,我们需要构建call graph:
// 这里,Util类下有很多builder函数,具体含义我个人也不是很清楚,希望懂的大神可以分享,万分感谢。
CallGraphBuilderbuilder = Util.makeVanillaZeroOneCFABuilder(options, new AnalysisCacheImpl(), cha, scope);
CallGraph cg = builder.makeCallGraph(options, null);
可以使用cg图,加数据流控制流选项直接进行切片,但是这里不建议这样子使用,因为切片是基于sdg图进行的,所以这里先构建sdg图:
// Build sdg
final PointerAn