[Soot-list] Trouble building CallGraph

Armand Navabi anavabi at purdue.edu
Fri May 4 14:10:22 EDT 2007


Which tutorial are you referring to?  I have taken a look at the
documentation here: http://www.sable.mcgill.ca/soot/tutorial/index.html

I have also taken a look at "A Survivor's Guide to Java Program Analysis in
Soot".  In general I have found a lot of information on intra-procedural
analyses, but not much on inter-procedural analysis.  The Survivor's Guide
has a subsection on extending Soot's main class, but I was unable to modify
it to do inter-procedural analysis.  

What I really want is to extend Soot's main with some custom arguments and
then hooking in my analysis to somehow get a hold of the call graph of the
program.

Are there other tutorials?

Thanks for the help,
Armand

-----Original Message-----
From: eric.bodden at googlemail.com [mailto:eric.bodden at googlemail.com] On
Behalf Of Eric Bodden
Sent: Friday, May 04, 2007 9:07 AM
To: Armand Navabi
Cc: soot-list at sable.mcgill.ca
Subject: Re: [Soot-list] Trouble building CallGraph

No, I did not.

A debugger could help at that point. Try to see which method it is
that has no body.

Or have a look at our tutorials. Those show how to run Soot in the
preferred way, which is just calling Main.main(..) with some custom
arguments after you have hooked in your own analyses. That way there's
much less you have to do manually and less room for mistakes.

Eric

On 04/05/07, Armand Navabi <anavabi at purdue.edu> wrote:
> Hey Eric,
>
> Yeah.  I did double check this.  It definitely contains sun.misc.Version.
>
> $ jar tf /opt/sun-jdk-1.4.2.10/jre/lib/rt.jar | grep sun.misc.Version
> sun/misc/Version.class
>
> Also after playing around with it, I was able to get that exception to
> go away, only to introduce another one.  Because the exception occurs
> when trying to build the call graph, I thought the problem was that the
> call graph builder is unable to find Version because it has not been
> loaded into Soot.  Now, I thought that loadClassAndSupport would load
> that.  I am never going into whole-program mode, so maybe that is the
> problem.  So to try to go into whole program mode, I inserted the two
> lines below:
>
>     String cp = ".:/opt/sun-jdk-1.4.2.10/jre/lib/rt.jar";
>     Scene.v().setSootClassPath(cp);
>     String [] opts = {"-w", args[0]};      //  <-- INSERTED
>     Main.main(opts);                              //  <-- INSERTED!
>     SootClass sClass = Scene.v().loadClassAndSupport(args[0]);
>     sClass.setApplicationClass();
>     Scene.v().setMainClass(sClass);
>     CallGraphBuilder cgb = new CallGraphBuilder(DumbPointerAnalysis.v());
>     cgb.build(); // <-- EXCEPTION
>     CallGraph cg = Scene.v().getCallGraph();
>
> Now I get the following exception:
> Exception in thread "main" java.lang.NullPointerException
>         at soot.SootMethod.getBodyFromMethodSource(SootMethod.java:80)
>         at soot.SootMethod.retrieveActiveBody(SootMethod.java:304)
>         at
>
soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processNewMethod(OnFlyC
allGraphBuilder.java:182)
>         at
>
soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processReachables(OnFly
CallGraphBuilder.java:81)
>         at
>
soot.jimple.toolkits.callgraph.CallGraphBuilder.build(CallGraphBuilder.java:
87)
>         at analysis.test.Test.main(Test.java:26)
>
> Did you try to run the code and did it work for you?
>
> Thanks,
> Armand
>
> Eric Bodden wrote:
> > Hmmm... so does your version of rt.jar actually contain that class?
> > Since it's a class in sun.misc and not java.*, it does not really have
> > to be.
> >
> > Eric
> >
> > On 03/05/07, Armand Navabi <anavabi at purdue.edu> wrote:
> >> My previous problem had too much going on.  The code below demonstrates
> >> the problem I am having:
> >>
> >>   public static void main(String[] args) {
> >>     String cp = ".:/opt/sun-jdk-1.4.2.10/jre/lib/rt.jar";
> >>     Scene.v().setSootClassPath(cp);
> >>
> >>     SootClass sClass = Scene.v().loadClassAndSupport(args[0]);
> >>     sClass.setApplicationClass();
> >>     Scene.v().setMainClass(sClass);
> >>
> >>     CallGraphBuilder cgb = new
> >> CallGraphBuilder(DumbPointerAnalysis.v());
> >>     cgb.build(); // <-- EXCEPTION
> >>
> >>     CallGraph cg = Scene.v().getCallGraph();
> >>  }
> >>
> >> On the line with that says EXCEPTION, I get the following exception
only
> >> when the code I am analyzing has a call to a library class
> >> (System.out.println).
> >>
> >> Exception in thread "main" java.lang.RuntimeException:
> >> Aborting: can't find classfile sun.misc.Version
> >>         at soot.Scene.getSootClass(Scene.java:374)
> >>         at soot.coffi.CFG.generateJimple(CFG.java:4647)
> >>         at soot.coffi.CFG.jimplify(CFG.java:1464)
> >>         at soot.coffi.CFG.jimplify(CFG.java:1127)
> >>         at
> >> soot.coffi.CoffiMethodSource.getBody(CoffiMethodSource.java:98)
> >>         at soot.SootMethod.getBodyFromMethodSource(SootMethod.java:80)
> >>         at soot.SootMethod.retrieveActiveBody(SootMethod.java:304)
> >>         at
> >>
soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processNewMethod(OnFlyC
allGraphBuilder.java:182)
> >>
> >>         at
> >>
soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processReachables(OnFly
CallGraphBuilder.java:81)
> >>
> >>         at
> >>
soot.jimple.toolkits.callgraph.CallGraphBuilder.build(CallGraphBuilder.java:
87)
> >>
> >>         at analysis.test.Test.main(Test.java:21)
> >>
> >> It seems to me that rt.jar should be in my Soot classpath (first two
> >> lines of method).
> >>
> >> Thanks,
> >> Armand
> >> _______________________________________________
> >> 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, Canada




More information about the Soot-list mailing list