[Soot-list] Generating a CallGraph
Graziella Galea
gra.galea at gmail.com
Fri Mar 21 16:25:15 EDT 2014
Thanks for your response Marc-Andre.
I am using a class loader in order to be able to retrieve classes and set
them as application classes. I previously used
Scene.v().loadNecessaryClasses() but it is not good for my case since I
need to generate a call graph for different versions of the same project.
I have been recommended to use the soot.Main but I am not sure what
parameters I need to pass. How do you recommend to use the soot.Main
method?
Thanks for your help.
Regards,
Graziella.
On 21 March 2014 20:05, Marc-Andre Laverdiere-Papineau <
marc-andre.laverdiere-papineau at polymtl.ca> wrote:
> Hi Graziella,
>
> Soot doesn't care about the class loader that you use - it uses its own
> class loading logic. You would need to either change that mechanism, or
> dump the classes you get from other sources to the disk and let Soot
> retrieve that.
>
> Also, it is generally recommended to use the Soot main if you're new at
> Soot.
>
> Also, note that entry points need to be static. IIRC, when you are working
> in app mode, you need to have an explicit main method, but I'm not 100%
> sure about that.
>
> BTW, you can join us on IRC at #soot on Freenode if that's your thing.
>
> Le 2014-03-21 10:48, Graziella Galea a écrit :
>
> I am currently working on a project whereby I need to generate a call
> graph for Java code analysis using SOOT. Unfortunately, for each class in
> the project I am analyzing, soot is returning a warning that the class in a
> phantom reference. Now, if I am not mistaken, a phantom reference is a
> class which I cannot provide but I am actually providing it. I first
> started thinking that the problem was with the Soot's classpath but I think
> it is correct. The path String variable used to set the classpath (as shown
> in the code snippet below) specifies the bin folder of the project I'm
> analysing.
>
> Could anyone help me? It's been over a week and cannot seem to get it
> right.
>
> Code used for setup:
>
>
> private CallGraph setUp(ArrayList<String> paths, String testSuite) throws Exception{
> Options.v().set_whole_program(
> true);
> Options.v().set_allow_phantom_refs(true);
>
> Options.v().set_app(!
> true);
>
> Options.v().set_no_bodies_for_excluded(true);
> //set each method in the source folder as an entry point
> Parser p = new Parser();
> List<SootMethod> entryPoints = new ArrayList<SootMethod>();
> //the arraylist paths contains the path to the test suite and the path to the source folder
> for(String path: paths){
> if(path != null
> ){//if it is null then the user chose to identify the methods only
>
> //create a classLoader for this path
> File file = new File(path);
> ClassLoader classLoader = new URLClassLoader(new URL[]{file.toURI().toURL()}, parent);
> MultiClassLoader mcl = new MultiClassLoader();
> mcl.addClassLoader(classLoader);
> ArrayList<File> allFiles = p.getSourceFiles(path, false);
> Options.v().set_process_dir(Arrays.asList(path+"\\"));
> Options.v().set_soot_classpath("C:\\Program Files\\Java\\jre7\\lib\\rt.jar;" +
> path+"\\;C:\\Program Files\\Java\\jre7\\lib\\jce.jar");
> for(File f: allFiles){
> //remove the path and leave package path only
> String name = f.getAbsolutePath()
> .replace(path+"\\", "");
> name = name.replace("\\", ".");
> name = name.replace(".class", "");
> //saves test files so as to be able to distinguish between normal methods and test cases
>
> if(path.equals(testSui!
> te<
> span class="" style="margin:0px;padding:0px;border:0px;font-size:14px;vertical-align:baseline;background-color:transparent">)){
>
> testFiles.add(name);
> }
> //load the class
> Class<?> cls = mcl.getCl
> assLoader(0).loadClass(name);
> SootClass sootClass = Scene.v().loadClassAndSupport(cls.getName
> ());
>
> sootClass.setApplicationClass();
> //set all of the methods in this class as entrypoints since there is no main method available
> for(SootMethod m: sootClass.getMethods()){
> if (!m.isAbstract()) {
> System.out.println("entrypoint "+m);
> entryPoints.add(m);
> }
> }
> }
> mcl.removeClassLoader(classLoader);
> }}
> Scene.v().addBasicClass("java.
> lang.ThreadGroup",SootClass.SIGNATURES);
> Scene.v().setEntryPoints(
> entryPoints);
> PackManager.v().runPacks();
> return Scene.v().get!
> CallGraph<
> /span>();
> }
>
> --
> Graziella Galea
>
>
> _______________________________________________
> Soot-list mailing listSoot-list at sable.mcgill.cahttp://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>
>
> --
> Marc-André Laverdière-Papineau
> Doctorant - PhD Candidate
>
>
> _______________________________________________
> Soot-list mailing list
> Soot-list at sable.mcgill.ca
> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>
>
--
Graziella Galea
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20140321/f992ffbf/attachment-0001.html
More information about the Soot-list
mailing list