[Soot-list] Generating a CallGraph
Marc-André Laverdière-Papineau
marc-andre.laverdiere-papineau at polymtl.ca
Sat Mar 22 15:22:06 EDT 2014
Hi Graziella,
This code uses CHA. Is that what you really want?
I honestly don't know of anybody who got a call graph in this kind of
case with SPARK without generating a stubbed main.
Eric wrote the blog entry about custom entry points, he's probably the
best person to ask...
Marc-André Laverdière-Papineau
Doctorant - PhD Candidate
On 22/03/14 05:57 AM, Graziella Galea wrote:
> I have followed the following solution to generate a callgraph
> http://marc.info/?l=soot-list&m=134095873818018&w=2
> and it does not mention anything about static classes - in fact it sets
> every method in the project to be analysed as an entrypoint. This is
> the reason I thought this is a good solution since I don't have a main
> class. Is there some tutorial which specifies exactly what settings
> need to be configured in order to generate a call graph? The code for
> using the call graph is fine because I analysed another project and the
> settings worked perfectly. Then I applied it to another project and it
> didn't work. All I need to know is the settings - I have the logic to
> handle a call graph then.
>
> Thanks again for your help!
>
>
> On 21 March 2014 22:42, Marc-André Laverdière
> <marc-andre.laverdiere-papineau at polymtl.ca
> <mailto:marc-andre.laverdiere-papineau at polymtl.ca>> wrote:
>
> Hello,
>
> Using the Soot main requires that you have a main class in your program.
> Custom entry points won't work in that case.
> Before we go there, would you please confirm that your entry points are
> static?
>
> The next thing: I suggest that you add a transformer that will list all
> non-phantom classes loaded in your Scene. This is probably going to help
> diagnose problems.
>
> My suggestion is that you start small: have it working on a simpler test
> case (all classes local, only one version), then add a feature
> (downloading class definitions), and then add the other.
>
> Marc-André Laverdière-Papineau
> Doctorant - PhD Candidate
>
> On 03/21/2014 04:25 PM, Graziella Galea wrote:
> > 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
> <mailto:marc-andre.laverdiere-papineau at polymtl.ca>
> > <mailto:marc-andre.laverdiere-papineau at polymtl.ca
> <mailto: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:
> >>
> >>
> >> |
> >>
> privateCallGraphsetUp(ArrayList<String>paths,StringtestSuite)throwsException{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 pointParserp
> >> =newParser();List<SootMethod>entryPoints
> >> =newArrayList<SootMethod>();//the arraylist paths contains the
> >> path to the test suite and the path to the source
> >> folderfor(Stringpath:paths){if(path !=null
> >> ){__//if it is null then the user chose to identify the
> methods only
> >> //create a classLoader for this pathFilefile
> >> =newFile(path);ClassLoaderclassLoader
> >>
> =newURLClassLoader(newURL[]{file.toURI().toURL()},parent);MultiClassLoadermcl
> >>
> =newMultiClassLoader();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(Filef:allFiles){//remove the
> >> path and leave package path onlyStringname =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 classClass<?>cls =mcl.getCl
> >> assLoader(0).loadClass(name);SootClasssootClass
> >> =Scene.v().loadClassAndSupport(cls.getName
> >>
> >> ());
> >> __sootClass.setApplicationClass();//set all of the methods in
> this
> >> class as entrypoints since there is no main method
> >>
> availablefor(SootMethodm: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 list
> >> Soot-list at sable.mcgill.ca <mailto:Soot-list at sable.mcgill.ca>
> <mailto:Soot-list at sable.mcgill.ca <mailto:Soot-list at sable.mcgill.ca>>
> >> http://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 <mailto:Soot-list at sable.mcgill.ca>
> <mailto:Soot-list at sable.mcgill.ca <mailto:Soot-list at sable.mcgill.ca>>
> > http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
> >
> >
> >
> >
> > --
> > Graziella Galea
> >
> >
> > _______________________________________________
> > Soot-list mailing list
> > Soot-list at sable.mcgill.ca <mailto:Soot-list at sable.mcgill.ca>
> > http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
> >
> _______________________________________________
> Soot-list mailing list
> Soot-list at sable.mcgill.ca <mailto:Soot-list at sable.mcgill.ca>
> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>
>
>
>
> --
> Graziella Galea
>
>
> _______________________________________________
> Soot-list mailing list
> Soot-list at sable.mcgill.ca
> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>
More information about the Soot-list
mailing list