WALA使用笔记(1)
WALA作为切片工具,具有例如构建函数调用图、切片等多种功能,但是对于新手来说,轻易上手较为困难。最近,我也刚刚接触WALA,希望能在这里写一系列的笔记,能够帮助像我一样的新手入门WALA。
第一部分:介绍WALA
根据wala中的介绍,wala是用于静态和动态程序分析的Java库。具有鲁棒性、高效和可扩展等优点。
在静态分析中的特点有:结合指向分析和函数调用图构造;过程间数据流分析;上下文敏感切片等。
这些介绍在其他博客或者官网中都比较多,这里不再赘述。本系列文章着重于WALA的使用。
第二部分:使用WALA进行简单的类分析
import com.ibm.wala.core.tests.callGraph.CallGraphTestUtil;
import com.ibm.wala.core.util.config.AnalysisScopeReader;
import com.ibm.wala.core.util.io.FileProvider;
import com.ibm.wala.ipa.callgraph.AnalysisScope;
import com.ibm.wala.ipa.cha.ClassHierarchy;
import com.ibm.wala.ipa.cha.ClassHierarchyException;
import com.ibm.wala.ipa.cha.ClassHierarchyFactory;import java.io.File;
import java.io.IOException;
//类分析
public class analysisclass {public static void classanalysis() throws IOException, ClassHierarchyException {AnalysisScope scope = AnalysisScopeReader.instance.makeJavaBinaryAnalysisScope("h2.jar", (new FileProvider()).getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));ClassHierarchy cha = ClassHierarchyFactory.make(scope);for(IClass klass : cha){System.out.println(klass.getName());}}public static void main(String[] args) throws IOException, ClassHierarchyException {classanalysis();}
}
其中scope为分析域,“h2.jar”为要分析的jar包,CallGraphTestUtil.REGRESSION_EXCLUSIONS的内容如下:

可见CallGraphTestUtil.REGRESSION_EXCLUSIONS为标准库中的内容,表示按照lib库剪裁,比如sun/*都会被排除,所构建的类层次图中不会包含这个包中的任何方法。CallGraphTestUtil.REGRESSION_EXCLUSIONS的值为“ava60RegressionExclusions.txt”,与其并列的还有REGRESSION_EXCLUSIONS_FOR_GUI ="Java60RegressionExclusionsForGUI.txt"
cha为创建的一个类似于类的层结构。之后的for循环则是输出类名。
输出结果示例如下:

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
