[Soot-list] Sideeffectanalysis

Jochen Huck jochen.huck at student.kit.edu
Fri Mar 4 12:33:34 EST 2011


Hi again,

I already tried that. I get the following exception:
Exception in thread "Thread-4" java.lang.ClassCastException: 
soot.jimple.internal.JInvokeStmt cannot be cast to soot.util.Numberable
     at soot.util.ArrayNumberer.get(ArrayNumberer.java:47)
     at soot.util.JeddNumberer.get(JeddNumberer.java:35)
     at jedd.internal.Jedd.literal(Jedd.java:158)
     at 
soot.jimple.paddle.PaddleContextSensitiveCallGraph.edgesOutOf(PaddleContextSensitiveCallGraph.java:97)
     at 
soot.jimple.toolkits.pointer.SideEffectTagger.keyFor(SideEffectTagger.java:113)
     at 
soot.jimple.toolkits.pointer.SideEffectTagger.internalTransform(SideEffectTagger.java:170)
     at soot.BodyTransformer.transform(BodyTransformer.java:51)
     at soot.Transform.apply(Transform.java:104)
     at soot.BodyPack.internalApply(BodyPack.java:49)
     at soot.Pack.apply(Pack.java:124)
     at soot.PackManager.runBodyPacks(PackManager.java:779)
     at soot.PackManager.runBodyPacks(PackManager.java:454)
     at soot.PackManager.runBodyPacks(PackManager.java:373)
     at soot.PackManager.runPacks(PackManager.java:350)
     at soot.Main.run(Main.java:198)
     at soot.Main.main(Main.java:141)

Jochen

Am 04.03.2011 17:47, schrieb Eric Bodden:
> Oh now I see.
>
> If I am not mistaken then any Stmt can function as a context. At least
> that's what the type hierarchy suggests:
> http://www.sable.mcgill.ca/soot/doc/soot/Context.html
>
> So you can just pass in the Jimple statement I suppose.
>
> Eric
>
> On 4 March 2011 17:14, Jochen Huck<jochen.huck at student.kit.edu>  wrote:
>> No I am not using Spark and Paddle. Only the interface description of
>> Context says that a context is a Spark AllocNode in case of an
>> object-sensitive call graph. I only use Paddle and therefore only instances
>> of Paddle AllocNode will be available.
>> In a bodyTransformer I have (for the example code) "method=main" and
>> "unit=f1.inc()" and I want to query the call graph for the edge going out of
>> f1.inc(). If cg is the instance of ContextSensitiveCallGraph I get the
>> Iterator over all edges going out of f1.inc() by cg.edgesOutOf(context,
>> method, unit). But I don't know where i can get the context instance from. I
>> assume it somehow has to do with the pointsToSet of f1.
>>
>> Thanks again,
>> Jochen
>>
>>
>> Am 04.03.2011 17:05, schrieb Eric Bodden:
>>> So are you trying to use Spark and Paddle at the same time? That won't
>>> work.
>>>
>>> I have not used Paddle in a while but I think that paddle implements
>>> its own CallGraph subclass that accepts paddle AllocNode instances as
>>> input.
>>>
>>> As an alternative to using paddle you can also use the demand-driven
>>> context-sensitive points-to analysis "DemandCSPointsTo".
>>>
>>> Eric
>>>
>>> On 4 March 2011 16:54, Jochen Huck<jochen.huck at student.kit.edu>    wrote:
>>>> Thanks! This is what I thought too.
>>>> I've got a question according the ContextSensitiveCallGraph (cg): I will
>>>> need to know the call graph edges that go out of f1.inc().
>>>> Given the declaringMethod(main) and the unit(f1.inc()) I have to ask
>>>> cg.edgesOutOf(context, method, unit). But where do I get the context
>>>> from?
>>>> The description of the interface Context says that context is a Spark
>>>> AllocNode in the case of an object-sensitive call graph. Using Paddle I
>>>> would only have access to a Paddle AllocNode, right? Where do I get the
>>>> AllocNode from? I am a little confused...
>>>>
>>>> Jochen
>>>>
>>>>
>>>> Am 04.03.2011 16:38, schrieb Eric Bodden:
>>>>> Hi Jochen.
>>>>>
>>>>>
>>>>> If I am not mistaken then you are looking for a 1-object-sensitive
>>>>> analysis. I think Ondrej wrote a paper a while ago in which he found
>>>>> out that object-sensitivity usually works best and a context length of
>>>>> 1 is often sufficient - at least that's what I remember.
>>>>>
>>>>> Eric
>>>>>
>>>>> On 4 March 2011 14:42, Jochen Huck<jochen.huck at student.kit.edu>
>>>>>   wrote:
>>>>>> Hi,
>>>>>>
>>>>>> the current implementation of the sideeffectanalysis
>>>>>> (soot.jimple.toolkits.pointer.SideEffectAnalysis) is
>>>>>> context-insensitive
>>>>>> and therefore really imprecise. For
>>>>>>
>>>>>> class Foo {
>>>>>>      int i;
>>>>>>      public static void main(String[] args) {
>>>>>>          Foo f1 = new Foo();
>>>>>>          Foo f2 = new Foo();
>>>>>>          f1.inc();
>>>>>>          f2.inc();
>>>>>>      }
>>>>>>      public void inc() {
>>>>>>          i++;
>>>>>>      }
>>>>>> }
>>>>>>
>>>>>> it reports that f1.inc() and f2.inc() have the same dependencies, since
>>>>>> the analysis is context-insensitive.
>>>>>>
>>>>>> I would like to improve the precisson using Paddle. Which option (1cfg,
>>>>>> object-sensitive) would I need, that it is possible to infer that the
>>>>>> calls to inc() have no dependencies?
>>>>>> I will have to rewrite some methods of SideEffectAnalysis and
>>>>>> SideEffectTagger. Any suggestions how difficult that would be?
>>>>>>
>>>>>> Thanks,
>>>>>> Jochen
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Soot-list mailing list
>>>>>> Soot-list at sable.mcgill.ca
>>>>>> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>>>>>>
>>>
>>
>
>



More information about the Soot-list mailing list