[Soot-list] my StrongLocalMustAliasAnalysis gives unexpected results

Zhoulai zell08v at orange.fr
Fri Oct 12 10:21:28 EDT 2012


Hello,  Eric

Sure! It is my great pleasure to be useful for SOOT community.   I will fix
it next week.


Zell.



On Fri, Oct 12, 2012 at 11:40 AM, Eric Bodden <eric.bodden at ec-spride.de>wrote:

> Hi Zell.
>
> Hmm, this indeed looks like an implementation bug. Maybe could you use
> a debugger to step through the computation and see what goes wrong? I
> would be happy to accept a patch for this but I am afraid I have no
> time to debug this on my own right now.
>
> Eric
>
> On 11 October 2012 20:51, Zhoulai <zell08v at orange.fr> wrote:
> > Hello,
> >
> > Sorry for bothering again for this question. But I still find the results
> > are strange:
> >
> >
> > Input :
> >     static void  test0(int i) {
> >         while (i>0){
> >             A x = new A();
> >             A y = x;
> >   (*)      int z = 0;
> >         }
> >     }
> >
> >
> > Using StrongLocalMustAliasAnalysis, I find  StrongLocalMustAlias infers
> >   -- Before (*), (x,x), (y,y), (x,y) must-alias
> >
> >  I guess this is unsafe w.r.t the specification of
> > StrongLocalMustAliasAnalysis. For example, the values of 'y' and 'x' are
> > different for different rounds of loop.  I wonder whether you encounter
> this
> > kind of program for your typestate problems.
> >
> >
> > Interestingly, if the last statement, i.e, z = 0, is removed, then the
> > results become correct.  For the program
> >
> > static void  test0(int i) {
> >         while (i>0){
> >             A x = new A();
> >             A y = x;
> >         }
> >     }
> >
> > it can be inferred that none of (x,x), (y,y), (x,y) strongly must-alias
> at
> > the end of the loop. This, after inspecting the transformed  Jimple
> code, is
> > a sort of coincidence because the end of the loop in the source program
> > corresponds to the merge point of the transformed Jimple code, and this
> join
> > makes 'x', 'y' take UNKNOWN.
> >
> > What do you think? Thanks.
> > Zell.
> >
> >
> >
> >
> >
> > On Thu, Oct 11, 2012 at 11:49 AM, Eric Bodden <eric.bodden at ec-spride.de>
> > wrote:
> >>
> >> Hello.
> >>
> >>
> >> > If I understand well, the following contract holds for any object
> >> > 'slmaa' of
> >> > the  class StrongLocalMustAliasAnalysis:
> >> >
> >> >           slmaa.instanceKey(loc, stmt) != UNKNOWN
> >> > ===> 'loc' strongly must-alias with itself
> >> >  ( or equivalently, at most one run-time object can be bound to 'loc'
> )
> >>
> >> I think that may be the cause of the problem. Your assumption does not
> >> actually hold. There's an additional condition. See here in the
> >> implementation:
> >>
> >>     public boolean mustAlias(Local l1, Stmt s1, Local l2, Stmt s2) {
> >>         Object l1n = getFlowBefore(s1).get(l1);
> >>         Object l2n = getFlowBefore(s2).get(l2);
> >>
> >>         if (l1n == UNKNOWN || l2n == UNKNOWN ||
> >>             invalidInstanceKeys.contains(l1n) ||
> >> invalidInstanceKeys.contains(l2n))
> >>             return false;
> >>
> >>         return l1n == l2n;
> >>     }
> >>
> >> In your example, $r0 quite likely got invalidated.
> >>
> >> Eric
> >
> >
>
>
>
> --
> Eric Bodden, Ph.D., http://sse.ec-spride.de/ http://bodden.de/
> Head of Secure Software Engineering Group at EC SPRIDE
> Tel: +49 6151 16-75422    Fax: +49 6151 16-72051
> Room 3.2.14, Mornewegstr. 30, 64293 Darmstadt
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20121012/2c4ecebe/attachment-0001.html 


More information about the Soot-list mailing list