[Soot-list] 'Scene.v().addBasicClass(sun.misc.ClassFileTransformer,HIERARCHY); even when -w option is enabled
Wiza
w1zagr33n at gmail.com
Wed Mar 5 13:46:47 EST 2014
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 phasejb.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 phasejb.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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20140305/0cc431c0/attachment-0001.html
More information about the Soot-list
mailing list