[Soot-list] 'Scene.v().addBasicClass(sun.misc.ClassFileTransformer,HIERARCHY); even when -w option is enabled
Wiza
w1zagr33n at gmail.com
Thu Mar 6 09:15:55 EST 2014
Thank you very much Bernhard and Marc-Andreu!
I didn't notice that on Transformer we have already Soot and Sparc executed.
I didn't need to change the settings for classpath as it worked fine.
One last question on this.
The first time I run it, I got the Spark's point-to analysis results on
a 'pag' file.
On the next executes after I deleted it in order to check the new
results, Soot doesn't even create it!!
Is an option that I set conflicts with another one?
My code follows.
Thank you very much again,
-wii
Options.v().set_src_prec(Options.src_prec_java);
Options.v().set_keep_line_number(true);
Options.v().set_polyglot(false);
Options.v().set_whole_program(true);
Options.v().set_exclude(Arrays.asList("java", "javax", "sun",
"org.apache", "org.python",
"org.jboss", "javassist",
"org.codehaus",
"org.zeroturnaround",
"org.hibernate"));
Options.v().set_allow_phantom_refs(true);
Options.v().set_no_bodies_for_excluded(true);
Options.v().set_time(true);
//Load the classes
Scene.v().addBasicClass("javax.servlet.http.HttpServlet",SootClass.SIGNATURES);
//Load test class
c = Scene.v().loadClassAndSupport("hello.Hello");
c.setApplicationClass();
Scene.v().loadNecessaryClasses();
Scene.v().loadBasicClasses();
//Set entry points
ArrayList<SootMethod> entryPoints = new ArrayList<SootMethod>();
final String servletClassName = "javax.servlet.http.HttpServlet";
Scene.v().loadClassAndSupport(servletClassName);
Scene.v().getOrMakeFastHierarchy();
Scene.v().setEntryPoints(entryPoints);
//Call graph options
PhaseOptions.v().setPhaseOption("cg", "enabled:true");
PhaseOptions.v().setPhaseOption("cg", "implicit-entry:false");
PhaseOptions.v().setPhaseOption("cg", "verbose:true");
PhaseOptions.v().setPhaseOption("cg.cha", "enabled:false");
PhaseOptions.v().setPhaseOption("cg.spark", "enabled:true");
PhaseOptions.v().setPhaseOption("cg.spark", "verbose:true");
PhaseOptions.v().setPhaseOption("cg.spark", "propagator:worklist");
PhaseOptions.v().setPhaseOption("cg.spark", "on-fly-cg:true");
PhaseOptions.v().setPhaseOption("cg.spark", "dump-html:true");
PhaseOptions.v().setPhaseOption("cg.spark", "dump-pag:true");
PhaseOptions.v().setPhaseOption("cg.spark", "dump-solution:true");
PhaseOptions.v().setPhaseOption("cg.spark", "add-tags:true");
PhaseOptions.v().setPhaseOption("cg.spark", "geom-pta:true");
PhaseOptions.v().setPhaseOption("cg.spark",
"merge-stringbuffer:true");
PhaseOptions.v().setPhaseOption("cg.spark",
"simulate-natives:true");
PhaseOptions.v().setPhaseOption("cg.spark",
"double-set-old:hybrid");
PhaseOptions.v().setPhaseOption("cg.spark",
"double-set-new:hybrid");
PhaseOptions.v().setPhaseOption("cg.spark", "dump-types:true");
PhaseOptions.v().setPhaseOption("cg.spark",
"class-method-var:true");
PhaseOptions.v().setPhaseOption("cg.paddle","enabled:false");
//Output control
Options.v().set_ast_metrics(true);
Options.v().set_dump_cfg(Arrays.asList("ALL"));
Options.v().set_dump_cfg(Arrays.asList("cg"));
Options.v().set_verbose(false);
Options.v().set_debug(false);
Options.v().set_debug_resolver(false);
G.v().out.println("set Output control !!!!!!");
//Run
PackManager.v().runPacks();
On 05/03/2014 21:03, soot-list-request at sable.mcgill.ca wrote:
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Wed, 05 Mar 2014 14:02:57 -0500
> From: Marc-Andr? Laverdi?re
> <marc-andre.laverdiere-papineau at polymtl.ca>
> Subject: Re: [Soot-list]
> 'Scene.v().addBasicClass(sun.misc.ClassFileTransformer,HIERARCHY);
> even when -w option is enabled
> To: soot-list at sable.mcgill.ca
> Message-ID: <531774E1.2000305 at polymtl.ca>
> Content-Type: text/plain; charset=ISO-8859-1
>
> What you are doing is not going to help. Spark will have already run
> before your transformer executes.
>
> Also, you are mixing setting parameters through the singletons and using
> the Soot main. Try using only Soot main.
>
> Also, you need to have your process path in the soot class path,
> followed by any libraries, including the Java libraries (that last part
> is covered by the prepend class path).
>
> Marc-Andr? Laverdi?re-Papineau
> Doctorant - PhD Candidate
>
> On 03/05/2014 01:46 PM, Wiza wrote:
>> I've tried also with 'wjtp' but still error remains :(
>>
>> -- Wii
>>
>>
>> On 05/03/2014 20:24, Khanh Nguyen wrote:
>>> You put your transformer in jtp pack is troublesome. As a whole
>>> program analysis, put in wjtp pack instead.
>>>
>>> Khanh Nguyen
>>>
>>> On Mar 5, 2014 8:01 AM, "Wiza" <w1zagr33n at gmail.com
>>> <mailto:w1zagr33n at gmail.com>> wrote:
>>>
>>> Hi again,
>>>
>>> I've read every tutorial and documentation. But still seems weird.
>>> I follow exactly the example on the tutorial for
>>> PointsToAnalysis.java from soot code.
>>> I would really appreciate if you could take a look on my code and
>>> let me know
>>> what goes wrong.
>>>
>>> Thank you very much in advance,
>>> Wii
>>>
>>>
>>> *My Code:*
>>> public static void main(String[] args) {
>>>
>>> // Inject the analysis into Soot
>>> PackManager.v().getPack("jtp").add(
>>> new Transform("jtp.myColorer", new
>>> SceneTransformer() {
>>>
>>> protected void internalTransform(String phase,
>>> Map options) {
>>>
>>> SootClass sc = loadClass("hello.Test1",true);
>>>
>>> soot.Scene.v().loadNecessaryClasses();
>>> soot.Scene.v().loadBasicClasses();
>>>
>>>
>>> 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");
>>>
>>> // Run SPARK analysis
>>> SparkTransformer.v().transform("",opt);
>>> }
>>> }));
>>>
>>>
>>> LinkedList<String> sootArgs = new
>>> LinkedList<String>(Arrays.asList(args));
>>>
>>> String cp = "same_path_as_used_on_soot_output";
>>> Scene.v().setSootClassPath(cp);
>>>
>>> Options.v().set_whole_program(true);
>>> Options.v().set_src_prec(soot.options.Options.src_prec_java);
>>>
>>> // prepend class path
>>> sootArgs.add("-prepend-classpath");
>>> sootArgs.add("enabled:true");
>>>
>>> // enable verbose - detailed info about what Soot is doing
>>> as it runs.
>>> // sootArgs.add("-v");
>>>
>>> // enable whole program mode
>>> sootArgs.add("-w");
>>>
>>> // enable whole-jimple optimization pack with true opt value
>>> sootArgs.add("-p");
>>> sootArgs.add("wjop");
>>> sootArgs.add("enabled:true");
>>>
>>> //enable points-to analysis(cg)
>>> sootArgs.add("-p");
>>> sootArgs.add("cg");
>>> sootArgs.add("enabled:true");
>>>
>>> sootArgs.add("-p");
>>> sootArgs.add("cg");
>>> sootArgs.add("implicit-entry:false");
>>>
>>> sootArgs.add("-p");
>>> sootArgs.add("cg");
>>> sootArgs.add("verbose:true");
>>>
>>> sootArgs.add("-p");
>>> sootArgs.add("cg.cha");
>>> sootArgs.add("enabled:false");
>>>
>>> //enable Spark points-to analysis
>>> sootArgs.add("-p");
>>> sootArgs.add("cg.spark");
>>> sootArgs.add("enabled:true");
>>>
>>> sootArgs.add("-p");
>>> sootArgs.add("cg.spark");
>>> sootArgs.add("dump-html:true");
>>>
>>> sootArgs.add("-p");
>>> sootArgs.add("cg.spark");
>>> sootArgs.add("geom-pta:true");
>>>
>>> //disable Paddle points-to analysis
>>> sootArgs.add("-p");
>>> sootArgs.add("cg.paddle");
>>> sootArgs.add("enabled:false");
>>>
>>> sootArgs.add("-no-bodies-for-excluded");
>>> sootArgs.add("-allow-phantom-refs");
>>>
>>> String[] argsArray = sootArgs.toArray(new String[0]);
>>>
>>> // Invoke soot.Main with arguments given
>>> soot.Main.main(argsArray);
>>> }
>>> }
>>>
>>>
>>>
>>>
>>> *This is what I get on the output:*
>>>
>>> Starting from project MyColorer:
>>> MyMain --d D:\Wiza\workspace\hello\sootOutput --cp
>>> /C:/Program%20Files/Java/jre7/lib/jsse.jar; ... --xml-attributes
>>> --src-prec java hello.Foo
>>>
>>> Soot started on Wed Mar 05 17:40:40 EET 2014
>>> Warning: java.dyn.InvokeDynamic is a phantom class!
>>> No main class given. Inferred 'hello.Foo' as main class.
>>> [Spark] Pointer Assignment Graph in 0.0 seconds.
>>> java.lang.reflect.InvocationTargetException
>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>>> at java.lang.reflect.Method.invoke(Unknown Source)
>>> at
>>> ca.mcgill.sable.soot.launching.SootThread.run(SootThread.java:138)
>>> 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).*
>>> at soot.SootClass.checkLevel(SootClass.java:125)
>>> at soot.FastHierarchy.canStoreClass(FastHierarchy.java:280)
>>> at soot.FastHierarchy.canStoreType(FastHierarchy.java:215)
>>> at soot.FastHierarchy.canStoreType(FastHierarchy.java:261)
>>> at
>>> soot.jimple.spark.internal.TypeManager.castNeverFails(TypeManager.java:113)
>>> at
>>> soot.jimple.spark.internal.TypeManager.makeTypeMask(TypeManager.java:92)
>>> at
>>> soot.jimple.spark.SparkTransformer.internalTransform(SparkTransformer.java:91)
>>> at soot.SceneTransformer.transform(SceneTransformer.java:39)
>>> at soot.Transform.apply(Transform.java:89)
>>> at soot.RadioScenePack.internalApply(RadioScenePack.java:57)
>>> at
>>> soot.jimple.toolkits.callgraph.CallGraphPack.internalApply(CallGraphPack.java:49)
>>> at soot.Pack.apply(Pack.java:114)
>>> at soot.PackManager.runWholeProgramPacks(PackManager.java:417)
>>> at soot.PackManager.runPacks(PackManager.java:336)
>>> at soot.Main.run(Main.java:198)
>>> at soot.Main.main(Main.java:141)
>>> at MyMain.main(MyMain.java:307)
>>> ... 5 more
>>>
>>>
>>>
>>>
>>> On 05/03/2014 05:04, soot-list-request at sable.mcgill.ca
>>> <mailto:soot-list-request at sable.mcgill.ca> wrote:
>>>> ----------------------------------------------------------------------
>>>> Message: 1
>>>> Date: Tue, 04 Mar 2014 14:40:24 -0500
>>>> From: Marc-Andr? Laverdi?re
>>>> <marc-andre.laverdiere-papineau at polymtl.ca> <mailto:marc-andre.laverdiere-papineau at polymtl.ca>
>>>> Subject: Re: [Soot-list]
>>>> 'Scene.v().addBasicClass(sun.misc.ClassFileTransformer,HIERARCHY);
>>>> even when -w option is enabled (Wii re)
>>>> To: soot-list at sable.mcgill.ca <mailto:soot-list at sable.mcgill.ca>
>>>> Message-ID: <53162C28.9030105 at polymtl.ca> <mailto:53162C28.9030105 at polymtl.ca>
>>>> Content-Type: text/plain; charset=ISO-8859-1
>>>>
>>>> Hi Wiza,
>>>>
>>>> Try setting prepend classpath to true. Please take the time to read the
>>>> documentation.
>>>>
>>>> Marc-Andr? Laverdi?re-Papineau
>>>> Doctorant - PhD Candidate
>>>>
>>>> On 03/04/2014 12:59 PM, Wiza wrote:
>>>>> Hi,
>>>>>
>>>>> I still get the same error.
>>>>> As 'class path' you mean: soot.Scene.v().setSootClassPath(mypath);
>>>>> ,right?
>>>>> *mypath* should point to the same path? It's not so clear to me.
>>>>>
>>>>>
>>>>> _The error I get:_
>>>>> [Spark] Pointer Assignment Graph in 0.2 seconds.
>>>>> java.lang.reflect.InvocationTargetException
>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>>>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>>>>> at java.lang.reflect.Method.invoke(Unknown Source)
>>>>> at ca.mcgill.sable.soot.launching.SootThread.run(SootThread.java:138)
>>>>> 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).
>>>>> at soot.SootClass.checkLevel(SootClass.java:125)
>>>>> at soot.FastHierarchy.canStoreClass(FastHierarchy.java:280)
>>>>> at soot.FastHierarchy.canStoreType(FastHierarchy.java:215)
>>>>> at soot.FastHierarchy.canStoreType(FastHierarchy.java:261)
>>>>> at
>>>>> soot.jimple.spark.internal.TypeManager.castNeverFails(TypeManager.java:113)
>>>>> at
>>>>> soot.jimple.spark.internal.TypeManager.makeTypeMask(TypeManager.java:92)
>>>>> at
>>>>> soot.jimple.spark.SparkTransformer.internalTransform(SparkTransformer.java:91)
>>>>> at soot.SceneTransformer.transform(SceneTransformer.java:39)
>>>>> at soot.Transform.apply(Transform.java:89)
>>>>> at soot.RadioScenePack.internalApply(RadioScenePack.java:57)
>>>>> at
>>>>> soot.jimple.toolkits.callgraph.CallGraphPack.internalApply(CallGraphPack.java:49)
>>>>> at soot.Pack.apply(Pack.java:114)
>>>>> at soot.PackManager.runWholeProgramPacks(PackManager.java:417)
>>>>> at soot.PackManager.runPacks(PackManager.java:336)
>>>>> at soot.Main.run(Main.java:198)
>>>>> at soot.Main.main(Main.java:141)
>>>>> at MyMain.main(MyMain.java:328)
>>>>>
>>>>> Thank you very much :)
>>>>>
>>>>>
>>>>> On 04/03/2014 19:00, soot-list-request at sable.mcgill.ca <mailto:soot-list-request at sable.mcgill.ca> wrote:
>>>>>> ------------------------------ Message: 2 Date: Tue, 04 Mar 2014
>>>>>> 11:53:15 -0500 From: Marc-Andr? Laverdi?re
>>>>>> <marc-andre.laverdiere-papineau at polymtl.ca> <mailto:marc-andre.laverdiere-papineau at polymtl.ca> Subject: Re: [Soot-list] ,
>>>>>> 'Scene.v().addBasicClass(sun.misc.ClassFileTransformer,HIERARCHY);
>>>>>> even when -w option is enabled (Wii re) To: soot-list at sable.mcgill.ca <mailto:soot-list at sable.mcgill.ca>
>>>>>> Message-ID: <531604FB.9030709 at polymtl.ca> <mailto:531604FB.9030709 at polymtl.ca> Content-Type: text/plain;
>>>>>> charset=ISO-8859-1
>>>>>>
>>>>>> Hello,
>>>>>> Your error report was not clear. I'm going to guess what is happening,
>>>>>> and it is likely that your soot class path doesn't include your JDK.
>>>>>> You can use the prepend classpath option or set the class path yourself.
>>>>>> If you still have a problem, please include all the details.
>>>>>>
>>>>>> Regards,
>>>>>>
>>>>>> Marc-Andr? Laverdi?re-Papineau Doctorant - PhD Candidate
>>>>>>
>>>>>> On 03/04/2014 11:35 AM, Wiza wrote:
>>>>>>> Thanks Marc-Andr for your response.
>>>>>>>
>>>>>>> Could you be more specific,please? I'm afraid I don't get your answer.
>>>>>>> I don't try to add any basic class, this is the error msg that I get.
>>>>>>> The strange thing is that it asks for enabling the program mode even if
>>>>>>> I give it as an argument option and from soot-eclipse's gui.
>>>>>>>
>>>>>>> Thanks again in advance.
>>>>>>>
>>>>>>> On 01/03/2014 21:10, soot-list-request at sable.mcgill.ca <mailto:soot-list-request at sable.mcgill.ca> wrote:
>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>
>>>>>>>> Message: 1
>>>>>>>> Date: Sat, 01 Mar 2014 13:01:47 -0500
>>>>>>>> From: Marc-Andr? Laverdi?re
>>>>>>>> <marc-andre.laverdiere-papineau at polymtl.ca> <mailto:marc-andre.laverdiere-papineau at polymtl.ca>
>>>>>>>> Subject: Re: [Soot-list]
>>>>>>>> 'Scene.v().addBasicClass(sun.misc.ClassFileTransformer,HIERARCHY);
>>>>>>>> even when -w option is enabled
>>>>>>>> To: soot-list at sable.mcgill.ca <mailto:soot-list at sable.mcgill.ca>
>>>>>>>> Message-ID: <5312208B.9000202 at polymtl.ca> <mailto:5312208B.9000202 at polymtl.ca>
>>>>>>>> Content-Type: text/plain; charset=ISO-8859-1
>>>>>>>>
>>>>>>>> Hello Wiza,
>>>>>>>>
>>>>>>>> Adding a class as a basic class affects the soot class loader, not the
>>>>>>>> call graph construction algorithm. If you want to set the main class,
>>>>>>>> there is an option for that. If you want custom entry points, check out
>>>>>>>> this tutorial:
>>>>>>>> http://www.bodden.de/2012/07/26/soot-custom-entry-points/
>>>>>>>>
>>>>>>>> Marc-Andr? Laverdi?re-Papineau
>>>>>>>> Doctorant - PhD Candidate
>>>>>>>>
>>>>>>>> On 02/28/2014 03:48 PM, Wiza wrote:
>>>>>>>>> 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 <http://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 <http://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);
>>>>>>>>> }
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Soot-list mailing list
>>>>>>>>> Soot-list at sable.mcgill.ca <mailto:Soot-list at sable.mcgill.ca>
>>>>>>>>> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>>>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Soot-list mailing list
>>>>>>> Soot-list at sable.mcgill.ca <mailto:Soot-list at sable.mcgill.ca>
>>>>>>> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>>>>>>>
>>>>>>>
>>>>> _______________________________________________
>>>>> Soot-list mailing list
>>>>> Soot-list at sable.mcgill.ca <mailto:Soot-list at sable.mcgill.ca>
>>>>> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>>>>>
>>>> ------------------------------
>>>>
>>>> Message: 2
>>>> Date: Wed, 5 Mar 2014 02:43:51 +0000
>>>> From: M Alsob <m99m20 at hotmail.com> <mailto:m99m20 at hotmail.com>
>>>> Subject: Re: [Soot-list] Duplicating Locals!!
>>>> To: " Bodden, Eric " <eric.bodden at sit.fraunhofer.de> <mailto:eric.bodden at sit.fraunhofer.de>
>>>> Cc: " soot-list at sable.mcgill.ca <mailto:soot-list at sable.mcgill.ca> " <soot-list at sable.mcgill.ca> <mailto:soot-list at sable.mcgill.ca>
>>>> Message-ID: <DUB407-EAS145F779F1BF04D0DA5F906FCD890 at phx.gbl> <mailto:DUB407-EAS145F779F1BF04D0DA5F906FCD890 at phx.gbl>
>>>> Content-Type: text/plain; charset="utf-8"
>>>>
>>>> Hi,,
>>>>
>>>> this is a method in the test java source:
>>>>
>>>> public static void fun(int x)
>>>>
>>>>
>>>>
>>>> {
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> x--;
>>>>
>>>>
>>>>
>>>> int option1 = x%3;
>>>>
>>>>
>>>>
>>>> int option2 = x%2;
>>>>
>>>>
>>>>
>>>> switch ( option1 )
>>>>
>>>>
>>>>
>>>> {
>>>>
>>>>
>>>>
>>>> case 1 :
>>>>
>>>>
>>>>
>>>> switch ( option2 )
>>>>
>>>>
>>>>
>>>> {
>>>>
>>>>
>>>>
>>>> case 1 : System.out.println("Option1, Option1");
>>>>
>>>>
>>>>
>>>> break;
>>>>
>>>>
>>>>
>>>> case 0 : System.out.println("Option1, Option2");
>>>>
>>>>
>>>>
>>>> break;
>>>>
>>>>
>>>>
>>>> default : System.out.println("Option1, Unknown");
>>>>
>>>>
>>>>
>>>> }
>>>>
>>>>
>>>>
>>>> break;
>>>>
>>>>
>>>>
>>>> case 2 : System.out.println("Option2, No Nested Switch");
>>>>
>>>>
>>>>
>>>> break;
>>>>
>>>>
>>>>
>>>> default : System.out.println("Unknown Case");
>>>>
>>>>
>>>>
>>>> }
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> System.out.println(x);
>>>>
>>>>
>>>>
>>>> return;
>>>>
>>>>
>>>>
>>>> }
>>>>
>>>> the jimple body corresponding to it:
>>>>
>>>>
>>>> /*8*/
>>>>
>>>> public static void fun(int)
>>>>
>>>> {
>>>>
>>>> int x, option1, option2, x;
>>>>
>>>> java.io.PrintStream $r0;
>>>>
>>>>
>>>> x := @parameter0: int;
>>>>
>>>> /*9*/
>>>>
>>>> x = x + -1;
>>>>
>>>> /*9*/
>>>>
>>>> option1 = x % 3;
>>>>
>>>> /*10*/
>>>>
>>>> /*10*/
>>>>
>>>> option2 = x % 2;
>>>>
>>>> /*11*/
>>>>
>>>> /*11*/
>>>>
>>>> tableswitch(option1)
>>>>
>>>> {
>>>>
>>>> case 1: goto label0;
>>>>
>>>> case 2: goto label4;
>>>>
>>>> default: goto label5;
>>>>
>>>> };
>>>>
>>>> /*12*/
>>>>
>>>>
>>>> label0:
>>>>
>>>> tableswitch(option2)
>>>>
>>>> {
>>>>
>>>> case 0: goto label2;
>>>>
>>>> case 1: goto label1;
>>>>
>>>> default: goto label3;
>>>>
>>>> };
>>>>
>>>> /*15*/
>>>>
>>>>
>>>> label1:
>>>>
>>>> $r0 = <java.lang.System: java.io.PrintStream out>;
>>>>
>>>> /*17*/
>>>>
>>>> virtualinvoke $r0.<java.io.PrintStream: void println(java.lang.String)>("Option1, Option1");
>>>>
>>>> /*17*/
>>>>
>>>> goto label6;
>>>>
>>>> /*18*/
>>>>
>>>>
>>>> label2:
>>>>
>>>> $r0 = <java.lang.System: java.io.PrintStream out>;
>>>>
>>>> /*19*/
>>>>
>>>> virtualinvoke $r0.<java.io.PrintStream: void println(java.lang.String)>("Option1, Option2");
>>>>
>>>> /*19*/
>>>>
>>>> goto label6;
>>>>
>>>> /*20*/
>>>>
>>>>
>>>> label3:
>>>>
>>>> $r0 = <java.lang.System: java.io.PrintStream out>;
>>>>
>>>> /*21*/
>>>>
>>>> virtualinvoke $r0.<java.io.PrintStream: void println(java.lang.String)>("Option1, Unknown");
>>>>
>>>> /*21*/
>>>>
>>>> goto label6;
>>>>
>>>> /*23*/
>>>>
>>>>
>>>> label4:
>>>>
>>>> $r0 = <java.lang.System: java.io.PrintStream out>;
>>>>
>>>> /*24*/
>>>>
>>>> virtualinvoke $r0.<java.io.PrintStream: void println(java.lang.String)>("Option2, No Nested Switch");
>>>>
>>>> /*24*/
>>>>
>>>> goto label6;
>>>>
>>>> /*25*/
>>>>
>>>>
>>>> label5:
>>>>
>>>> $r0 = <java.lang.System: java.io.PrintStream out>;
>>>>
>>>> /*26*/
>>>>
>>>> virtualinvoke $r0.<java.io.PrintStream: void println(java.lang.String)>("Unknown Case");
>>>>
>>>> /*26*/
>>>>
>>>>
>>>> label6:
>>>>
>>>> $r0 = <java.lang.System: java.io.PrintStream out>;
>>>>
>>>> /*29*/
>>>>
>>>> virtualinvoke $r0.<java.io.PrintStream: void println(int)>(x);
>>>>
>>>> /*29*/
>>>>
>>>> return;
>>>>
>>>> /*30*/
>>>>
>>>> }
>>>>
>>>> for the main method, we the following vars:
>>>>
>>>> int w = 5, y, x, z;
>>>>
>>>> the corresponding vars in jimple body:
>>>>
>>>> byte w, y;
>>>>
>>>> int x, z, x, w, $i0;
>>>>
>>>> java.lang.StringBuilder $r0;
>>>>
>>>> boolean $z0, y;
>>>>
>>>> As you can see some vars in jimple declared twice -in the same scope- either of the same data type( such as x) or of different data types( such as w, and y)..
>>>>
>>>> this issue affects the both liveness and reaching definition analysis of the source code!!
>>>>
>>>> is there a way to force jimple transformation to stick to the original data types as declared in the source code??
>>>>
>>>> Thank you,,
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Sent from Windows Mail
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> From: Bodden, Eric
>>>> Sent: ?Monday?, ?March? ?3?, ?2014 ?8?:?02? ?AM
>>>> To: Modhi Alsobeihy
>>>> Cc: Steven Arzt, soot-list at sable.mcgill.ca <mailto:soot-list at sable.mcgill.ca>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Hello.
>>>>
>>>> What does the Jimple body look like for this method?
>>>> In general it is not uncommon for Jimple bodies to have multiple Locals with the same name. This can even happen in Java due to scoping rules of blocks.
>>>>
>>>> Eric
>>>> -------------- next part --------------
>>>> An HTML attachment was scrubbed...
>>>> URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20140305/2e371460/attachment.html
>>>>
>>>> ------------------------------
>>>>
>>>> _______________________________________________
>>>> Soot-list mailing list
>>>> Soot-list at sable.mcgill.ca <mailto:Soot-list at sable.mcgill.ca>
>>>> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>>>>
>>>>
>>>> End of Soot-list Digest, Vol 107, Issue 8
>>>> *****************************************
>>>
>>> _______________________________________________
>>> Soot-list mailing list
>>> Soot-list at sable.mcgill.ca <mailto:Soot-list at sable.mcgill.ca>
>>> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>>>
>>
>>
>> _______________________________________________
>> Soot-list mailing list
>> Soot-list at sable.mcgill.ca
>> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>>
>
> ------------------------------
>
> _______________________________________________
> Soot-list mailing list
> Soot-list at sable.mcgill.ca
> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>
>
> End of Soot-list Digest, Vol 107, Issue 13
> ******************************************
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20140306/0398b1b1/attachment-0001.html
More information about the Soot-list
mailing list