首页 > 解决方案 > 在 Soot 中为 java 代码使用类和方法

问题描述

我是新来的烟灰。我试过这段代码,但它有错误。

public class Main {

private static final Body B = null;

public static void main(String[] args) {
    // TODO Auto-generated method stub
    final String apppath = "c:\\Users\\SHTAV3\\Desktop\\Myclass.jar";
    soot.G.reset();
    Options.v().set_process_dir(Collections.singletonList(apppath));
    Options.v().set_allow_phantom_refs(true);
    Options.v().set_prepend_classpath(true);
    Options.v().set_validate(true);
    Options.v().set_whole_program(true);
    Options.v().set_app(true);
    Options.v().set_src_prec(Options.src_prec_class);
    Scene.v().loadNecessaryClasses();
    SootClass appclass = Scene.v().loadClassAndSupport("Myclass");

    appclass.setApplicationClass();
    SootMethod m = appclass.getMethodByName("printOne");

    ExceptionalUnitGraph g = new ExceptionalUnitGraph(B); 
    Body B = m.retrieveActiveBody(); 
    VeryBusyExpressions an = new VeryBusyExpressions();
    Iterator i = g.iterator(); 
    while (i.hasNext()) {
        Unit u = (Unit)i.next(); 
        List IN = an.getBusyExpressionsBefore(u); 
        List OUT = an.getBusyExpressionsAfter(u); 
    }

    PackManager.v().runPacks();
    CallGraph cg = Scene.v().getCallGraph();
    System.out.println(cg.toString());


}

错误:

Exception in thread "main" java.lang.RuntimeException: couldn't find method printOne(*) in Myclass 
    at soot.SootClass.getMethodByName(SootClass.java:549)
    at analise.Main.main(Main.java:40)

我在 jar 文件中的类名是 myclass,我的方法名是 printone 欢呼

标签: soot

解决方案


推荐阅读