[Soot-list] Trouble building CallGraph

Armand Navabi anavabi at purdue.edu
Fri May 4 01:21:17 EDT 2007


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(OnFlyCallGraphBuilder.java:182)
        at 
soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processReachables(OnFlyCallGraphBuilder.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(OnFlyCallGraphBuilder.java:182) 
>>
>>         at
>> soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processReachables(OnFlyCallGraphBuilder.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
>>
>
>



More information about the Soot-list mailing list