[Soot-list] Spark & Android Source Code no main class

Anshul Vij vijanshul2 at gmail.com
Sun Dec 6 08:54:19 EST 2015


Hi Steven Arzt,
I am also using Soot framework for creating and using Android application's 
call graph. 
Can you help me in understanding which class should I use as main class?
For me callgraph.size() always returning 0.

I want to find a particular method invocation in all method bodies and 
backtrack (using edgesInto(method)) until I reach a method that is Android 
callback method.
I have a list to match the signatures with callback method.

Current problem is that the callgraph contains nothing.

I believe as you pointed here that I need to set a main class and entry 
point.
So should I make an Activity as a main class and onCreate() as entry point?

Please help in this regard.

Thank you!

Kind regards,
Anshul
 

On Friday, 27 March 2015 11:15:00 UTC+1, Steven Arzt wrote:
>
> Hi Jason,
>
>  
>
> You should never need to call „loadClassAndSupport“ on your own. This is 
> done internally by Soot.
>
>  
>
> For creating a callgraph, you need an entry point. For normal Java 
> applications, this is the main() method. You can either explicitly specify 
> it or have Soot automatically select the only main() method in your Soot 
> classpath.
>
>  
>
> The easiest way to get a callgraph is to call the Soot main method and 
> pass the correct command-line parameters:
>
>  
>
>                 -p cg.spark on                   This enables SPARK
>
>                 -process-dir                       Path to the classes you 
> want to analyze
>
>                 -cp                                        Path to other 
> classes that might be referenced from your analysis target
>
>                 -main-class                        The main class to use
>
>  
>
> After the call to soot.Main.main(), you should be able to access the 
> callgraph.
>
>  
>
> A more involved example that calls the required parts of Soot manually 
> goes here:
>
>  
>
>        *public* *static* *void* main(String[] args) {
>
>              Options.*v*().parse(args);
>
>              Scene.*v*().loadNecessaryClasses();
>
>              SootClass sc = Scene.*v*()
>
>                            .forceResolve("soot.Examples", SootClass.
> *BODIES*);
>
>              sc.setApplicationClass();
>
>              SootMethod method = sc.getMethodByName("main");
>
>              List<SootMethod> entryPoints = *new* ArrayList<SootMethod>();
>
>              entryPoints.add(method);
>
>              Scene.*v*().setEntryPoints(entryPoints);
>
>              Options.*v*().set_main_class(method.getSignature());
>
>  
>
>              PackManager.*v*().runPacks();
>
>  
>
>              CallGraph callgraph = Scene.*v*().getCallGraph();
>
>              System.*out*.println("[TestSpark] Call graph size " + 
> callgraph.size());
>
>              
>
>              *for* (Edge edge : callgraph)
>
>                     System.*out*.println(edge + "");
>
>  
>
>        }
>
>  
>
> This is essentially what the normal Soot main method would do.
>
>  
>
> Best regards,
>
>   Steven
>
>  
>
> *Von:* soot-lis... at CS.McGill.CA <javascript:> [mailto:
> soot-lis... at CS.McGill.CA <javascript:>] *Im Auftrag von *Jason Ott
> *Gesendet:* Mittwoch, 25. März 2015 06:31
> *An:* soot... at CS.McGill.CA <javascript:>
> *Betreff:* [Soot-list] Spark & Android Source Code no main class
>
>  
>
> I would like to build a callgraph for each class of the android framework 
> and I am struggling.  I haven't found much in the way of documentation or 
> examples for using SPARK in general.
>
>  
>
> I have a basic program that does the following:
>
>  
>
> public class DumpClass {
>
> public static void main(String[] args) {
>
>  
>
> Scene.v().loadBasicClasses();
>
>             SootClass mclass;
>
>         mclass = Scene.v().loadClassAndSupport(args[0]);
>
>         mclass.setApplicationClass();
>
>  
>
>             Options.v().set_whole_program(true);
>
>             Options.v().setPhaseOption("cg.spark", "on");
>
>             Scene.v().loadNecessaryClasses();
>
>  
>
>             
> Options.v().set_main_class(mclass.getMethods().get(0).toString());
>
>             PackManager.v().runPacks();
>
>  
>
>         new SparkTest(mclass);
>
>     }
>
> }
>
>  
>
> Now, when I run this, I get: Exception in thread "main" 
> java.lang.RuntimeException: There is no main class set!
>
>  
>
> I'm not quite sure what to do with that or what to do next if this thing 
> ever works.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20151206/b72f4b3b/attachment-0003.html 


More information about the Soot-list mailing list