zoukankan      html  css  js  c++  java
  • 使用Soot分析jar包,构建Call Graph

    背景

    soot没有提供直接对jar进行分析的API [1],需将jar包解压,然后调用 Options.v().set_process_dir() 方法,设置分析目录,该目录是解压所得的class文件(注意保持层次结构)。

    期间需要注意两点:

    1. 需将class文件加入soot_class_path;

    2. 先设置mainClass,后加载necessaryClasses。

    核心代码

    public static void main(String[] args) {
        //spotbugs -- testing
        String classesDir = "D:\wkspace\seed8\dir\spotbugs";
        String mainClass = "edu.umd.cs.findbugs.LaunchAppropriateUI";
    
        //set classpath
        String jreDir = System.getProperty("java.home") + "\lib\jce.jar";
        String jceDir = System.getProperty("java.home") + "\lib\rt.jar";
        String path = jreDir + File.pathSeparator + jceDir + File.pathSeparator + classesDir;
        Scene.v().setSootClassPath(path);
    
        //add an intra-procedural analysis phase to Soot
        TestCallGraphSootJar_3 analysis = new TestCallGraphSootJar_3();
        PackManager.v().getPack("wjtp").add(new Transform("wjtp.TestSootCallGraph", analysis));
    
        excludeJDKLibrary();
    
        Options.v().set_process_dir(Arrays.asList(classesDir));
        Options.v().set_whole_program(true);
    
        SootClass appClass = Scene.v().loadClassAndSupport(mainClass);
        Scene.v().setMainClass(appClass);
        Scene.v().loadNecessaryClasses();

    // 或
        /* Scene.v().loadNecessaryClasses();
    SootClass sc = Scene.v().getSootClass(mainClass);
    Scene.v().setMainClass(sc);*/
        //enableCHACallGraph();  
    enableSparkCallGraph();
    PackManager.v().runPacks();
    }

    enableSparkCallGraph等方法请参考该post

    另外,可以模拟命令行模式,然后调用soot.main.Main,详见[3]。

    ————————————————

    参考文献

    [1] https://github.com/Sable/soot/issues/1289

    [2] https://o2lab.github.io/710/p/TestSootCallGraph.java

    [3] https://groups.google.com/forum/#!topic/soot-list/jcHrdhzJyl0

  • 相关阅读:
    软件质量见解
    Vim 简明教程【转载】
    Actor Mailbox
    Unity对齐工具
    静态AOP Fody PropertyChanged
    棋牌分布式架构
    死锁
    curl 获取自定义数据
    WPF RichTextBox添加一条有颜色的记录
    arp -s 添加失败:拒绝访问
  • 原文地址:https://www.cnblogs.com/yuanxiuouc/p/12996319.html
Copyright © 2011-2022 走看看