栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

WALA使用笔记(1)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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循环则是输出类名。

输出结果示例如下:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770345.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号