[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