[Soot-list] Soot-list Digest, Vol 52, Issue 15
lpxz
lpxz at ust.hk
Sun Aug 30 12:11:48 EDT 2009
Hello srivastava:
seems this is what you need:
1 soot.options.Options.v().set_whole_program(true);//set whole mode
2 List entryPoints=EntryPoints.v().methodsOfApplicationClasses();
soot.Scene.v().setEntryPoints(entryPoints); // process : app and its
reachable methods.
Regards
Peng
soot-list-request at sable.mcgill.ca wrote:
> Send Soot-list mailing list submissions to
> soot-list at sable.mcgill.ca
>
> To subscribe or unsubscribe via the World Wide Web, visit
> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
> or, via email, send a message with subject or body 'help' to
> soot-list-request at sable.mcgill.ca
>
> You can reach the person managing the list at
> soot-list-owner at sable.mcgill.ca
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Soot-list digest..."
>
>
> Today's Topics:
>
> 1. Trying to build call graph from with a java program
> (vasrivastava at hssworld.com srivastava)
> 2. How to provide switch inside a program
> (vasrivastava at hssworld.com srivastava)
> 3. Java->jimple,jimple-> java (lpxz)
> 4. Re: Trying to build call graph from with a java program
> (Eric Bodden)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Sat, 29 Aug 2009 22:22:25 -0500
> From: "vasrivastava at hssworld.com srivastava" <varun0007 at gmail.com>
> Subject: [Soot-list] Trying to build call graph from with a java
> program
> To: soot-list at sable.mcgill.ca
> Message-ID:
> <2135c5380908292022w360c397au24d155a0660d4ae2 at mail.gmail.com>
> Content-Type: text/plain; charset="iso-8859-1"
>
> Hi , I am trying to build call graph for a class from a java program. I need
> to take each method the class and build a call graph as if that method is
> the main method. I haven't got any way of declaring any arbitrary method as
> reachableMethod and continue call graph construction.
> So i did following things
> sc = Scene.v().loadClassAndSupport(classFile); //classFile is the path of
> class
> Iterator<SootMethod> smIterator = sc.getMethods().iterator();
> while (smIterator.hasNext()) {
> SootMethod smInstance = smIterator.next();
> SootMethod main = new SootMethod("main",
> Arrays.asList(new Type[] {ArrayType.v(RefType.v("java.lang.String"),
> 1)}),
> VoidType.v(), Modifier.PUBLIC | Modifier.STATIC);
> JimpleBody body = Jimple.v().newBody(main);
> main.setActiveBody(body);
> // here wrote code to make a virtualinvoke to the method of the class
> smInstance
> --
> sc.addMethod(main);
> Scene.v().setMainClass(sc);
> CHATransformer.v().transform();
> }
>
> But this code throws exception
> java.lang.RuntimeException: not declared: main
> at soot.SootMethod.getDeclaringClass(SootMethod.java:183)
> at
> soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.getImplicitTargets(OnFlyCallGraphBuilder.java:223)
> 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)
> Although addMethod call is suppose to set declared bit for main
>
> Please help me in debugging this problem or let me know the right way of
> getting call graph for any arbitrary method of a class.
> Thanks
> Varun
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20090829/30d3a3f2/attachment-0001.html
>
> ------------------------------
>
> Message: 2
> Date: Sun, 30 Aug 2009 00:14:48 -0500
> From: "vasrivastava at hssworld.com srivastava" <varun0007 at gmail.com>
> Subject: [Soot-list] How to provide switch inside a program
> To: soot-list at sable.mcgill.ca
> Message-ID:
> <2135c5380908292214x30ac9284g1faa842616139b72 at mail.gmail.com>
> Content-Type: text/plain; charset="iso-8859-1"
>
> Hi, I am new to soot. Please let me know how to invoke switch like -w [whole
> program mode] from inside the program . I want to have a call graph for any
> class loaded using Scene.v().loadClassAndSupport method.
> Thanks
> Varun
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20090830/2020f5c1/attachment-0001.html
>
> ------------------------------
>
> Message: 3
> Date: Sun, 30 Aug 2009 14:28:28 +0800
> From: lpxz <lpxz at ust.hk>
> Subject: [Soot-list] Java->jimple,jimple-> java
> To: soot-list at sable.mcgill.ca
> Message-ID: <4A9A1C0C.40508 at ust.hk>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>
> Dear all:
> Do you know what is the reason for the following problem:
> by the way, I want to change src code based on AST traverse, then write
> down transformed ast into src code again.Are there any suggestions that
> I can avoid the problem following ? Thanks.
>
> when decompiling to java from jimple:
>
> java.lang.RuntimeException: Could not find enter stmt of the synchBody:
> <dstm2.Thread: java.lang.Object doIt(java.util.concurrent.Callable)>
> at
> soot.dava.toolkits.base.finders.SynchronizedBlockFinder.verify_CatchBody(SynchronizedBlockFinder.java:834)
> at
> soot.dava.toolkits.base.finders.SynchronizedBlockFinder.find(SynchronizedBlockFinder.java:123)
> at soot.dava.DavaBody.<init>(DavaBody.java:326)
> at soot.dava.Dava.newBody(Dava.java:84)
> at soot.PackManager.runBodyPacks(PackManager.java:814)
> at soot.PackManager.runBodyPacks(PackManager.java:455)
> at soot.PackManager.runBodyPacks(PackManager.java:374)
> at soot.PackManager.runPacks(PackManager.java:351)
>
> doIt is like this:
> public static <T> T doIt(Callable<T> xaction) {
> ThreadState threadState = _threadState.get();
> ContentionManager manager = threadState.manager;
> T result = null;
> try {
> while (!Thread.stop) {
> threadState.beginTransaction();
> try {
> result = xaction.call();
> } catch (AbortedException d) {
> } catch (SnapshotException s) {
> threadState.abortTransaction();
> } catch (Exception e) {
> e.printStackTrace();
> throw new PanicException("Unhandled exception " + e);
> }
> threadState.totalMemRefs += threadState.transaction.memRefs;
> if (threadState.commitTransaction()) {
> threadState.committedMemRefs += threadState.transaction.memRefs;
> return result;
> }
> threadState.transaction.attempts++;
> // transaction aborted
> }
> if (threadState.transaction != null) {
> threadState.abortTransaction();
> }
> } finally {
> threadState.transaction = null;
> }
> // collect statistics
> synchronized (lock){
> totalTotalMemRefs = threadState.totalMemRefs;
> totalCommittedMemRefs = threadState.committedMemRefs;
> totalCommitted += threadState.committed;
> totalTotal += threadState.total;
> threadState.reset(); // set up for next iteration
> }
> throw new GracefulException();
> }
> Regards
> Peng
>
>
>
> ------------------------------
>
> Message: 4
> Date: Sun, 30 Aug 2009 09:36:12 +0200
> From: Eric Bodden <bodden at st.informatik.tu-darmstadt.de>
> Subject: Re: [Soot-list] Trying to build call graph from with a java
> program
> To: "vasrivastava at hssworld.com srivastava" <varun0007 at gmail.com>
> Cc: soot-list at sable.mcgill.ca
> Message-ID:
> <804e3c660908300036v67b2eacax2b48b457063835af at mail.gmail.com>
> Content-Type: text/plain; charset=ISO-8859-1
>
> Hi.
>
>
>> ?I am trying to build call graph for a class from a java program. I need to
>> take each method the class and build a call graph as if that method is the
>> main method. I haven't got any way of declaring any?arbitrary?method as
>> reachableMethod and continue call graph construction.
>>
>
> >From what you write, it seems like you would want to play around with
> the class EntryPoints. I don't understand why you are adding "main"
> methods to every class. How would that solve your problem? What
> exactly is the problem that your analysis should solve anyway?
>
> Eric
>
>
More information about the Soot-list
mailing list