使用Soot分析jar包,构建Call Graph

时间:2020-05-31 10:08:34   收藏:0   阅读:218

背景

soot没有提供直接对jar进行分析的API,需将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);
    //Options.v().set_app(true);

    SootClass appClass = Scene.v().loadClassAndSupport(mainClass);
    Scene.v().setMainClass(appClass);
    Scene.v().loadNecessaryClasses();

    //enableCHACallGraph();
    enableSparkCallGraph();

    PackManager.v().runPacks();
}

其他方法请参考该post

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

参考文献

https://o2lab.github.io/710/p/TestSootCallGraph.java

原文:https://www.cnblogs.com/yuanxiuouc/p/12996319.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!