[Soot-list] Howto generate a CallGraph?
Eric Bodden
eric.bodden at mail.mcgill.ca
Fri Apr 18 09:05:51 EDT 2008
The answer is here:
http://www.brics.dk/SootGuide/
Look for SceneTransformer or BodyTransformer.
Eric
On 18/04/2008, Marco Bakera <marco.bakera at uni-dortmund.de> wrote:
> Thank you for that hint li xin. Now Soot seems to create the calling graph.
> However I am not able to fetch it from Scene afterwards since soot terminates
> after invocation of soot.Main.main() with a System.exit(). :(
>
> Any suggestions?
>
>
> I used the following snippet for my tests.
>
>
> public CallGraphCreator(String clazz) {
> G.reset();
>
>
> // setup soot class path
> String cp = System.getProperty("java.class.path");
> String java_home = System.getProperty("java.home");
> Scene.v().setSootClassPath(String.format("%s:%s/lib/rt.jar:%s/lib/jce.jar",
> cp,java_home,java_home));
>
> String opts = "-w " + clazz;
>
> Main.main(opts.split(" "));
>
> CallGraph callGraph = Scene.v().getCallGraph();
>
> // The following debug outputs do not appear on console
> LOG.debug("Created call graph");
> LOG.debug(callGraph);
> LOG.debug(new Date());
>
> }
>
> public static void main(String[] args) {
> new CallGraphCreator(CallGraphCreator.class.getName());
> }
>
>
>
> On Friday 18 April 2008 09:27:00 li xin wrote:
> > Hi,
> >
> > The error message at least shows that you have to put jce.jar into your
> > soot-class-path.
> >
> > Regards, LI
> >
> >
> > On Fri, Apr 18, 2008 at 3:52 PM, Marco Bakera
> > <marco.bakera at uni-dortmund.de>
> >
> > wrote:
> > > Hey everybody,
> > >
> > > I try to generate a call graph from a given class. I thought the
> > > following snippet would do but ran into troubles.
> > >
> > > public CallGraphCreator(String clazz) {
> > > G.reset();
> > >
> > >
> > >
> > > Scene.v().setSootClassPath("/home/bakera/tools/jdk1.5.0_15/jre/lib/rt.jar
> > >");
> > >
> > > // SootClass sootClass =
> > > Scene.v().loadClassAndSupport(clazz);
> > >
> > > String opts = "-w -keep-line-number -x javax " + clazz;
> > > // sootClass.setApplicationClass();
> > > // Scene.v().setMainClass(sootClass);
> > > Main.main(opts.split(" "));
> > >
> > > CallGraph callGraph = Scene.v().getCallGraph();
> > >
> > > }
> > >
> > > public static void main(String[] args) {
> > > new CallGraphCreator(CallGraphCreator.class.getName());
> > > }
> > >
> > >
> > >
> > > When starting the program I get the following stacktrace.
> > >
> > > Exception in thread "main" java.lang.RuntimeException: couldn't find
> > > class:
> > > javax.crypto.Cipher (is your soot-class-path set properly?)
> > > at soot.SootResolver.bringToHierarchy(SootResolver.java:139)
> > > at soot.SootResolver.bringToSignatures(SootResolver.java:172)
> > > at soot.SootResolver.bringToBodies(SootResolver.java:214)
> > > at soot.SootResolver.processResolveWorklist(SootResolver.java:100)
> > > at soot.SootResolver.resolveClass(SootResolver.java:89)
> > > at soot.Scene.tryLoadClass(Scene.java:305)
> > > at soot.Scene.loadBasicClasses(Scene.java:855)
> > > at soot.Scene.loadNecessaryClasses(Scene.java:881)
> > > at soot.Main.run(Main.java:170)
> > > at soot.Main.main(Main.java:146)
> > > at
> > >
> > > de.metaframe.plugin.soot2jabc.CallGraphCreator.<init>(CallGraphCreator.ja
> > >va:32) at
> > >
> > > de.metaframe.plugin.soot2jabc.CallGraphCreator.main(CallGraphCreator.java
> > >:39)
> > >
> > >
> > > What's the common way to create a simple call graph? Thanks for any
> > > hint/code
> > > snippet/pointer in documentation on this. :)
> > >
> > >
> > > Greetings from Germany,
> > > Marco.
>
> _______________________________________________
> 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