Wala使用心得

来源:互联网 发布:商标域名注册 编辑:程序博客网 时间:2024/06/18 12:54

WALA是IBM公司于2006年开源,目前可以从github上获取源码,编译,使用,但是在国内,编译WALA可能会被qiang,所以,直接使用maven仓库中已经编译好的WALA二进制包是最为方便的。

WALA核心功能:

  1. Java的系统类型和类的层次结构分析
  2. 源语言框架支持java和javascript
  3. 过程间数据流分析(RHS的求解器)
  4. 基于上下文敏感的切片
  5. 指针分析与调用图构造
  6. 基于SSA的寄存器转换语言IR
  7. 迭代数据流的总体框架
  8. 通用分析实用程序和数据结构
  9. 一个字节码库(Shrike)和一个java动态负荷时间仪表库(DILA)


本文使用maven中的二进制包,利用WALA做最简单的类分析。

首先从maven库中下载二进制包,链接如下:

http://mvnrepository.com/artifact/com.ibm.wala

然后非常重要的一点就是要将core.jar中的java路径,不修改的话可能会导致错误。使用winrar软件打开core.jar文件

将log_sample.properties和wala_sample.properties两个文件修改如图中所示的名字,并保存,然后打开wala.properties,

将java_runtime_dir设置为PC当前的java路径 ,比如:java_runtime_dir= C:/Program Files/Java/jre1.8.0_144/lib

然后保存到jar包中即可。

然后将jar包导入到eclipse中,

导入好的包如下图所示


这里建议下载1.4.3版本(eclipse中新建工程等省略)

这一步也十分重要

将上图中的Java60RegressionExclusions.txt、primordial.jar、primordial.txt三个文件从源码(自行从github上下载即可)中找到,并且复制粘贴到eclipse工程中即可,不导入也会产生错误。

接下来,就可以使用WALA进行简单的类分析。

public static void main(String args[]) throws IOException, ClassHierarchyException, IllegalArgumentException, InvalidClassFileException, CancelException {

        // 获得一个文件

        File exFile=new FileProvider().getFile("Java60RegressionExclusions.txt");

        // 将分析域存到文件中

        AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope("zookeeper-3.3.6.jar", exFile);

        // 构建ClassHierarchy,相当与类的一个层级结构

        ClassHierarchy cha = ClassHierarchyFactory.make(scope);

       // 循环遍历每一个类

        for(IClass klass : cha) {

            // 打印类名

            System.out.println(klass.getName().toString());

           // 判断当前类是否在zookeeper中

            if(scope.isApplicationLoader(klass.getClassLoader())) {

                // 对在zookeeper中的类的每个函数遍历,并打印函数名

                for (IMethod m : klass.getAllMethods()) {
                    System.out.println(m.getName().toString());                
                }
            }
        }    
        
    }



以上代码是一个最简单的类名打印和函数名打印的功能。

WALA首页:http://wala.sourceforge.net/wiki/index.php/Main_Page

本次就先简单的介绍如何使用WALA进行最简单的类名和函数名分析,下一篇将介绍如何构建调用图和系统依赖图。




原创粉丝点击