[Soot-list] Get Caller Stmt and SootMethod in Callgraph

R.F. rayfang1991 at hotmail.com
Fri Jul 17 08:36:21 EDT 2015


Thank you so much for explaining,
and JimpleBasedInterproceduralCFG.getMethodOf(Unit u) works!


Best Regards,
R.F.

On Fri, Jul 17, 2015 at 2:24 PM, Johannes Lerch <
lerch at st.informatik.tu-darmstadt.de> wrote:

>  Hi,
>
> you can ask the ICFG to give you the method as well:
> JimpleBasedInterproceduralCFG.getMethodOf(Unit u)
>
> I guess in the discussion Marc-André was talking about that you indeed
> could traverse the ICFG as you can traverse directed graphs. If you do so,
> this would yield context-insensitive paths.
>
> Example:
> void bar() {
>   foo();
>   print("return site of foo()");
>   foo();
>   print("another return site");
> }
>
> Assume you are at the first call to foo(). You enter foo(). Now, if you
> ask the ICFG where the return statement in foo() might return to, you will
> get print("return site of foo()") and print("another return site"). If you
> continue to traverse to both return sites, then only the first path to
> print("return site of foo()") is actually a realizable path that may occur
> at runtime, while the second is impossible.
> To know that you should not return to the second return site you have to
> know that you entered foo() via the first call site, i.e., you have to take
> care of "context". This is why such an approach would be called
> context-sensitive, while traversing the ICFG as simple as traversing a
> directed graph is context-insensitive.
>
> Regards,
> Johannes
>
>
> Am 16.07.2015 um 15:52 schrieb R.F.:
>
> Hi,
>
>  I want to find the caller Stmt and the SootMethod which the Stmt belongs
> to in the callgraph (for example, given that SootMethod m1 is invoked by
> SootMethod m2 with m2's statement s1, now I have m1, and I want to find
> both m2 and s1).
>
>  I have tried two approaches:
>
>    1. JimpleBasedInterproceduralCFG.getCallersOf(SootMethod m), this
>    method returns a collection of Unit, but from the returned collection of
>    Unit, I cannot get the SootMethod which each Unit belongs to.
>     2. Scene.v().getCallGraph().edgesInto(SootMethod m), this method
>    returns an iterator of SootMethod. To get the Stmt, I need to iterate
>    through all the Stmt of each SootMethod and find the one by matching
>    stmt.getInvokeExpr().getMethod() with the given SootMethod by signature.
>    However, I think simply matching by SootMethod's signature may fail to find
>    the Stmt because the given method can be an override method, so their
>    signatures will not match.
>
>  So, is there a method to find the caller Stmt and SootMethod in
> callgraph accurately even with override and overload?
>
>  Moreover, Marc-André Laverdière mentioned
> the JimpleBasedInterproceduralCFG-based method in
> https://mailman.cs.mcgill.ca/pipermail/soot-list/2014-July/007043.html
> with the notion that "as long as you don't mind context-insensitive
> results". Can someone tell me what are "context-insensitive results"?
>
>  Thank you in advance.
>
>
>  Best Regards,
> R.F.
>
>
> _______________________________________________
> Soot-list mailing listSoot-list at CS.McGill.CAhttps://mailman.CS.McGill.CA/mailman/listinfo/soot-list
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20150717/9de2dd13/attachment.html 


More information about the Soot-list mailing list