[Soot-list] Using CHATranformer

Eric Bodden eric.bodden at mail.mcgill.ca
Tue Jun 23 16:21:02 EDT 2009


Hi Chandan.

When using the Soot API manually, as you do, there's a lot that can go
wrong. Easiest would be to insert your own transform. (see here:
http://www.bodden.de/2008/09/22/soot-intra/) That saves you a lot of
work and gives you less potential for doing things wrong.

I think one crucial call that's missing in your code is
Scene.v().loadNecessaryClasses(). But there may be others.

Eric

2009/6/23 Chandan Rupakheti <rupakhcr at clarkson.edu>:
> Hello,
>
> I am trying to use Soot's call graph. As a starting point I wanted to try
> CHATransformer. I have two classes in "callgraph" package as follows:
>
> ----------------------------------------------------
> public class PrintCallGraph {
>     public static void main(String[] args) {
>         soot.options.Options.v().set_whole_program(true);
>
>         SootClass mainClass =
> Scene.v().loadClassAndSupport("callgraph.Main");
>         mainClass.setApplicationClass();
>         Scene.v().setMainClass(mainClass);
>
>         CHATransformer.v().transform();
>         SootMethod src = mainClass.getMethodByName("aMethod");
>         CallGraph cg = Scene.v().getCallGraph();
>
>         Iterator targets = new Targets(cg.edgesOutOf(src));
>         while (targets.hasNext()) {
>             SootMethod tgt = (SootMethod)targets.next();
>             System.out.println(src + " may call " + tgt);
>         }
>     }
> }
> ----------------------------------------------------
> public class Main {
>     public static void main(String[] args) {
>         aMethod();
>     }
>
>     public static void aMethod() {
>         Main main = new Main();
>         main.hello();
>     }
>
>     public void hello() {
>         System.out.println("Hello World!");
>     }
> }
> ----------------------------------------------------
>
> When I run PrintCallGraph, I get following NullPointerException:
>
> [Call Graph] For information on where the call graph may be incomplete, use
> the verbose option to the cg phase.
> Exception in thread "main" java.lang.NullPointerException
>     at
> soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.getImplicitTargets(OnFlyCallGraphBuilder.java:250)
>     at
> soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processNewMethod(OnFlyCallGraphBuilder.java:182)
>     at
> soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processReachables(OnFlyCallGraphBuilder.java:81)
>     at
> soot.jimple.toolkits.callgraph.CallGraphBuilder.build(CallGraphBuilder.java:84)
>     at
> soot.jimple.toolkits.callgraph.CHATransformer.internalTransform(CHATransformer.java:43)
>     at soot.SceneTransformer.transform(SceneTransformer.java:39)
>     at soot.SceneTransformer.transform(SceneTransformer.java:45)
>     at soot.SceneTransformer.transform(SceneTransformer.java:50)
>     at callgraph.PrintCallGraph.main(PrintCallGraph.java:19)
>
> I would be very thankful if anybody could point me what am I doing wrong.
>
> Thanks,
>
> Chandan
>
> _______________________________________________
> Soot-list mailing list
> Soot-list at sable.mcgill.ca
> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>
>



-- 
Eric Bodden
Sable Research Group, McGill University
Montréal, Québec, Canada


More information about the Soot-list mailing list