[Soot-list] SPARK and use-original-names

Rohan Padhye rohanpadhye at cse.iitb.ac.in
Sat Mar 23 11:51:53 EDT 2013


Hi Phil,

Thanks for your help. This is a sample file:

public class HelloWorld
{
     public static void main(String args[])
     {
         System.out.println("Hello World!");
     }
}

And this is my command-line:
java -jar soot.jar -cp test -pp -w -app -p jb use-original-names:true  
-keep-bytecode-offset -f none -p cg.spark enabled HelloWorld

The soot.jar has been downloaded from 
http://vandyk.st.informatik.tu-darmstadt.de/abc/ and is the build of 15 
Mar 2013.

Notice that I did not give the "implicit-entry:false" here because I 
wanted to force SPARK to analyse the library. For larger
programs, even if I give that option the exception is thrown because 
control flow inevitably reaches the library.

Thanks,
Rohan

On Saturday 23 March 2013 08:15 PM, Phil Pratt-Szeliga wrote:
> Hi Rohan,
>
> If you can get a full example that we can run that fails, I can try to
> get it fixed for you.
>
> Sincerely,
> Phil Pratt-Szeliga
> Syracuse University
> http://trifort.org/
>
> On Thu, Mar 21, 2013 at 3:41 AM, Zhoulai <zell08v at orange.fr> wrote:
>> Hi,
>>
>>   I think it might be a bug if there is a conflict between '-app' and
>> '-use-original-names'. You  might want to show us a small and complete
>> example that reproduces it.
>>
>> My personal feeling is that, ' use-original-names' does not always go well
>> with Jimple analysis. Unwanted imprecise results, or confusing exception
>> might be caused due to that option. Anyway, imho,  "use-original-names"  are
>> mostly useful for us people, but the idea of static analysis lies in
>> reasoning program behaviors with programs. Voila.
>>
>> Zell.
>>
>>
>>> This is the equivalent command-line (exception thrown with this usage
>>> too):
>>> java -jar soot.jar -cp <DIR> -pp -w -app -p jb use-original-names:true
>>> -keep-bytecode-offset -f none -p cg.spark enabled -p cg implicit-entry:false
>>> <MAIN_CLASS>
>>>
>>> Interestingly, it works fine if I give the "-no-bodies-for-excluded"
>>> option, so I get the variable-named Jimple for my own classes, but it does
>>> not work when all bodies are loaded.
>>>
>>> Have you managed to get both working together when library classes are
>>> loaded too?
>>>
>>> Thanks,
>>>
>>> Rohan
>>>
>>>
>>>
>>> On Wednesday 20 March 2013 11:24 PM, Zhoulai wrote:
>>>
>>>
>>> Hi,
>>>
>>> I guess the error should be due to your SOOT settings. For me most of time
>>> they work well together.
>>>
>>> Could you show us your source code part?
>>>
>>> Zell.
>>>
>>> On Wed, Mar 20, 2013 at 6:18 PM, Rohan Padhye <rohanpadhye at cse.iitb.ac.in>
>>> wrote:
>>>> Hello,
>>>>
>>>> I am not able to use SPARK with the "use-original-names" option to the
>>>> Jimple-body pack. I keep getting this exception:
>>>>
>>>> Exception in thread "main" java.lang.RuntimeException: failed to handle 0
>>>>       at
>>>>
>>>> soot.jimple.spark.builder.MethodNodeFactory.defaultCase(MethodNodeFactory.java:288)
>>>>       at
>>>>
>>>> soot.jimple.AbstractJimpleValueSwitch.caseIntConstant(AbstractJimpleValueSwitch.java:55)
>>>>       at soot.jimple.IntConstant.apply(IntConstant.java:196)
>>>>       at
>>>>
>>>> soot.jimple.spark.builder.MethodNodeFactory$1.caseAssignStmt(MethodNodeFactory.java:74)
>>>>       at soot.jimple.internal.JAssignStmt.apply(JAssignStmt.java:221)
>>>>       at
>>>>
>>>> soot.jimple.spark.builder.MethodNodeFactory.handleStmt(MethodNodeFactory.java:67)
>>>>       at soot.jimple.spark.pag.MethodPAG.buildNormal(MethodPAG.java:181)
>>>>       at soot.jimple.spark.pag.MethodPAG.build(MethodPAG.java:147)
>>>>       at
>>>>
>>>> soot.jimple.spark.solver.OnFlyCallGraph.processReachables(OnFlyCallGraph.java:64)
>>>>       at
>>>> soot.jimple.spark.solver.OnFlyCallGraph.build(OnFlyCallGraph.java:56)
>>>>       at
>>>>
>>>> soot.jimple.spark.solver.PropWorklist.handleVarNode(PropWorklist.java:123)
>>>>       at
>>>> soot.jimple.spark.solver.PropWorklist.propagate(PropWorklist.java:53)
>>>>       at
>>>>
>>>> soot.jimple.spark.SparkTransformer.internalTransform(SparkTransformer.java:152)
>>>>       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:460)
>>>>       at soot.PackManager.runPacksNormally(PackManager.java:369)
>>>>       at soot.PackManager.runPacks(PackManager.java:335)
>>>>       at soot.Main.run(Main.java:198)
>>>>       at soot.Main.main(Main.java:141)
>>>>
>>>> I see that this has been reported before
>>>> (http://www.sable.mcgill.ca/pipermail/soot-list/2012-August/004706.html),
>>>> but
>>>> no solution seems to have been found. Does anybody know the reason why
>>>> these two do not work together? And is there a fix possible? I *require*
>>>> both these to work together because I need to generate information that
>>>> uses variable names, but uses whole-program analysis.
>>>>
>>>> --
>>>> Regards,
>>>> Rohan Padhye
>>>>
>>>> _______________________________________________
>>>> Soot-list mailing list
>>>> Soot-list at sable.mcgill.ca
>>>> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>>>
>>>
>>> --
>>> Regards,
>>> Rohan Padhye
>>

-- 
Regards,
Rohan Padhye



More information about the Soot-list mailing list