[Soot-list] 'Scene.v().addBasicClass(sun.misc.ClassFileTransformer,HIERARCHY); even when -w option is enabled

Wiza w1zagr33n at gmail.com
Fri Feb 28 15:48:19 EST 2014


Hi list :)

I'm trying to create a transformer to call points-to spark analysis.
I get an error msg for adding 
'*Scene.v().addBasicClass(sun.misc.ClassFileTransformer,HIERARCHY);' *or 
enabling the "-whole-program mode".
Although I enable the -w option giving it as an argument for soot.Main 
and I even tried enabling it manually from Soot-Eclipse, but I get the 
same result.
Am I doing something wrong on my code or it is a Soot bug?

My code as well as the command line output follow up.

Thank you very much in advance,

--Wi


*_COMMAND LINE OUTPUT:_*
Starting from project MyColorer:
Soot started on Fri Feb 28 22:14:48 EET 2014
resolving [from .class]: java.lang.NoClassDefFoundError
resolving [from .class]: java.lang.LinkageError
resolving [from .class]: java.lang.String
resolving [from .class]: java.lang.Error
...
Warning: java.dyn.InvokeDynamic is a phantom class!
resolving [from .java]: hello.Foo
Warning: enabled:true is a phantom class!
Applying phase cg.spark to the scene.
No main class given. Inferred 'hello.Foo' as main class.
[Call Graph] For information on where the call graph may be incomplete, 
use the verbose option to the cg phase.
[<clinit>] Constructing JimpleBody from coffi...
Applying phase jb.ls to <java.lang.Object: void <clinit>()>.
[<clinit>] Splitting locals
...
Applying phase jb.a to <java.lang.Object: void <clinit>()>.
[<clinit>] Aggregating iteration 1...
Applying phase jb.ule to <java.lang.Object: void <clinit>()>.
[<clinit>] Eliminating unused locals...
Applying phase jb.tr to <java.lang.Object: void <clinit>()>.
[TypeAssigner] typing system started on Fri Feb 28 22:14:50 EET 2014
[TypeAssigner] typing system ended. It took 0 mins and 0 secs.
Applying phase jb.lns to <java.lang.Object: void <clinit>()>.
Applying phase jb.cp to <java.lang.Object: void <clinit>()>.
[<clinit>] Propagating copies...
Applying phase jb.dae to <java.lang.Object: void <clinit>()>.
[<clinit>] Eliminating dead code...
...

[Spark] Pointer Assignment Graph in 0.0 seconds.
Caused by: java.lang.RuntimeException: This operation requires resolving 
level HIERARCHY but sun.misc.ClassFileTransformer is at resolving level 
DANGLING*
*If you are extending Soot, try to add the following call before calling 
soot.Main.main(..):*
**Scene.v().addBasicClass(sun.misc.ClassFileTransformer,HIERARCHY);**
**Otherwise, try whole-program mode (-w).*


_*MY TRANSFORMER:*_

public class MyMain {

     /**
      * setup the Soot Scene to load the name class
      * @param name
      * @param main
      * @return
      */
     private static SootClass loadClass(String name, boolean main) {
         SootClass c = Scene.v().loadClassAndSupport(name);
         c.setApplicationClass();
         if (main) Scene.v().setMainClass(c);
         return c;
     }

     private static int getLineNumber(Stmt s) {
         Iterator<Tag> ti = s.getTags().iterator();
         while (ti.hasNext()) {
             Object o = ti.next();
             if (o instanceof LineNumberTag)
                 return Integer.parseInt(o.toString());
         }
         return -1;
     }


     public static void main(String[] args) {

         LinkedList<String> sootArgs = new 
LinkedList<String>(Arrays.asList(args));

         // enable verbose - Provide detailed information about what 
Soot is doing as it runs.
         sootArgs.add("-v");
         sootArgs.add("enabled:true");

         // enable whole program mode
         sootArgs.add("-w");
         sootArgs.add("enabled:true");

         // enable whole-jimple optimization pack with true opt value
         sootArgs.add("-p");
         sootArgs.add("wjop");
         sootArgs.add("enabled:true");

         //enable points-to analysis(cg) with true opt value
         sootArgs.add("-p");
         sootArgs.add("cg");
         sootArgs.add("enabled:true");

         //enable Spark points-to analysis with true opt value
         sootArgs.add("-p");
         sootArgs.add("cg.spark");
         sootArgs.add("enabled:true");

         //enable no-bodies-for-excluded
         sootArgs.add("-no-bodies-for-excluded");
         sootArgs.add("enabled:true");

         //enable allow-phantom-refs
         sootArgs.add("-allow-phantom-refs");
         sootArgs.add("enabled:true");

         String[] argsArray = sootArgs.toArray(new String[0]);

         // Inject the analysis into Soot
         PackManager.v().getPack("jtp").add(
                 new Transform("jtp.myColorer", new SceneTransformer() {

                     protected void internalTransform(String phase, Map 
options) {

                         // Load the main Class
                         SootClass sc = loadClass("hello.Foo",true);

                         soot.Scene.v().loadNecessaryClasses();

soot.Scene.v().setEntryPoints(EntryPoints.v().all());

                         // Set SPARK options
                         HashMap<String, String> opt = new 
HashMap<String, String>();
                         opt.put("enabled","true");
                         opt.put("verbose","true");
                         opt.put("ignore-types","false");
                         opt.put("force-gc","false");
                         opt.put("pre-jimplify","false");
                         opt.put("propagator","worklist");
opt.put("simple-edges-bidirectional","false");
                         opt.put("on-fly-cg","true");
                         opt.put("set-impl","double");
opt.put("vta","false");
opt.put("rta","false");
opt.put("field-based","false");
opt.put("types-for-sites","false");
                         opt.put("merge-stringbuffer","true");
                         opt.put("string-constants","false");
opt.put("simulate-natives","true");
                         opt.put("simplify-offline","false");
                         opt.put("simplify-sccs","false");
opt.put("ignore-types-for-sccs","false");
opt.put("double-set-old","hybrid");
                         opt.put("double-set-new","hybrid");
                         opt.put("dump-html","false");
                         opt.put("dump-pag","false");
                         opt.put("dump-solution","false");
                         opt.put("topo-sort","false");
opt.put("dump-types","true");
                         opt.put("class-method-var","true");
                         opt.put("dump-answer","false");
                         opt.put("add-tags","false");
                         opt.put("set-mass","false");

                         // 
---------------------------------------------------------

                         // Call graph options
soot.options.Options.v().setPhaseOption("cg", "enabled:true");
soot.options.Options.v().setPhaseOption("cg", "implicit-entry:false");
soot.options.Options.v().setPhaseOption("cg", "verbose:true");
soot.options.Options.v().setPhaseOption("cg.cha", "enabled:false");
soot.options.Options.v().setPhaseOption("cg.spark", "enabled:true");
soot.options.Options.v().setPhaseOption("cg.paddle", "enabled:false");
soot.options.Options.v().setPhaseOption("cg.paddle", "geom-pta:true");

                         // 
---------------------------------------------------------

                         // Run SPARK analysis
                         G.v().out.println("[spark] Starting analysis 
...");
                         SparkTransformer.v().transform("",opt);
                         G.v().out.println("[spark] Done!");
                     }
                 }));

         soot.Main.main(argsArray);
     }
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20140228/54c807d9/attachment-0001.html 


More information about the Soot-list mailing list