[Soot-list] Generating a CallGraph

Marc-André Laverdière marc-andre.laverdiere-papineau at polymtl.ca
Wed Mar 26 22:33:43 EDT 2014


Hello Graziella,

All right, so now we know what is going on.

I would expect someone during your thesis defense to ask you hard
questions about CHA if you choose to go that path. CHA is just plain
bad. It is sound, but that's by putting almost everything. It is the
equivalent of killing a fly with a nuclear bomb.

Also, if you are going to do any interprocedural analysis, you are
likely to waste a lot of processing time on spurious edges.

>From what I see, you have 3 options:
1) Try running SPARK in RTA mode. That should be better than CHA. But I
don't know if you'll hit the same problem.
2) Generate some fake main. If you are doing Android analysis, Flowdroid
has one. If you are doing JEE, Bernhard and I have developed one.
3) Tweak the Spark algorithm to bootstrap the analysis with a CHA
fallback for the this pointer of your non-static entry points. I am sure
that many people would like that contribution.

With a bit of investment on your part, you'll get a solution that will
be robust and precise, which is a good starting point for a research
project :)

Regards,

Marc-André Laverdière-Papineau
Doctorant - PhD Candidate

On 03/25/2014 05:39 PM, Graziella Galea wrote:
> Hi Marc-André,
> 
> No, my entry-points are definitely not static.  I am a bit unsure though
> which methods should be set as entry-points.  I first started following
> the following link at using and it worked.  Now that I am trying to
> change to SPARK so as to make sure that my results are precise, I don't
> think that the same approach applies ie setting each method as an
> entry-point as suggested in the following link. 
> 
> http://marc.info/?l=soot-list&m=134095873818018&w=2
> 
> Is generating a main stub better than using CHA algorithm?  I am trying
> to decide if I should go back to my previous code which uses the CHA
> algorithm and seems to be working fine or try to get the SPARK working.
> 
> 
> On 25 March 2014 22:22, Marc-André Laverdière
> <marc-andre.laverdiere-papineau at polymtl.ca
> <mailto:marc-andre.laverdiere-papineau at polymtl.ca>> wrote:
> 
>     Hi Graziella,
> 
>     I haven't looked at your code and I won't until you tell us whether your
>     entry points are static or not, because that is an extremely important
>     piece of information. Non-static entry points will give you bad results
>     all the time.
> 
>     If you use non-static entry points, you have to choose between a call
>     graph algorithm that is less precise, or generating a main stub.
> 
>     Marc-André Laverdière-Papineau
>     Doctorant - PhD Candidate
> 
>     On 03/25/2014 02:56 PM, Graziella Galea wrote:
>     > Hi Marc-André.
>     >
>     > I added the setting Options.v().set_no_bodies_for_excluded(true);
>     and it
>     > only took around 25 seconds which is good.  Then I tried to use SPARK
>     > since it is more precise.  The problem is that I do not think that the
>     > whole callgraph is being generated.  This is because for particular
>     > methods, I identify their source methods and some of which are not
>     being
>     > found.
>     >
>     > The following is my code:
>     >
>     > private CallGraph setUp(String path, String javafiles, String
>     testSuite)
>     > throws Exception{
>     > Options.v().set_no_bodies_for_excluded(true);
>     > Options.v().set_whole_program(true);
>     > Options.v().set_allow_phantom_refs(true);
>     > Options.v().set_process_dir(Arrays.asList(path)); //library dir
>     > Options.v().set_soot_classpath("C:\\Program
>     > Files\\Java\\jre7\\lib\\rt.jar;"+path+";" +
>     > "C:\\Program Files\\Java\\jre7\\lib\\jce.jar");
>     > //library dir along with rt.jar/jce.jar from JRE/JDK
>     > Scene.v().loadNecessaryClasses();
>     > getAllMethods(path);
>     > //identify source files
>     > identifySources(javafiles);
>     > System.out.println("sources identifed");
>     > identifyTestClasses(testSuite);
>     > Transform sparkTranform = new Transform( "cg.spark", null );
>     > PhaseOptions.v().setPhaseOption( sparkTranform, "verbose:true" );
>     > Map options = PhaseOptions.v().getPhaseOptions( sparkTranform );
>     > PointsToAnalysis spark = new PAG(new SparkOptions(options));
>     > CallGraphBuilder builder = new CallGraphBuilder(spark);
>     > builder.build();
>     > return builder.getCallGraph();
>     > }
>     >
>     > private ArrayList<SootMethod> getAllMethods(String path) throws
>     Exception{
>     > Parser p = new Parser();
>     > ArrayList<File> allFiles = p.getSourceFiles(path, false);
>     > ArrayList<SootMethod> entryPoints = new ArrayList<SootMethod>();
>     >         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", "");
>     >         SootClass sootClass = Scene.v().forceResolve(name,
>     > SootClass.BODIES);
>     >             sootClass.setApplicationClass();
>     >             for(SootMethod m: sootClass.getMethods()){
>     >              if (!m.isAbstract()) {
>     >              entryPoints.add(m);
>     >                }
>     >             }
>     >         }
>     >
>     > Scene.v().addBasicClass("java.lang.ThreadGroup",SootClass.SIGNATURES);
>     >       Scene.v().setEntryPoints(entryPoints);
>     > return entryPoints;
>     > }
>     >
>     > Is this fine?
>     >
>     > Thanks for your help.
>     >
>     >
>     > On 24 March 2014 22:47, Marc-André Laverdière
>     > <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,
>     >
>     >     I don't know much about the .build file, so no comments.
>     >
>     >
>     >     I am surprised that CHA is taking so long - do you have very large
>     >     libraries? Did you try using Spark in CHA mode? I think that the
>     >     CHATransformer is very old code - Spark has optimizations that
>     work for
>     >     all analyses.
>     >
>     >     Spark should take more time, that's obvious. A way to work
>     around that
>     >     is to use exclusions and no-bodies-for-exclusions. You
>     truncate your
>     >     call graph, which is unsound, but you may not care so much
>     about some
>     >     parts of it. I do that all the time when analyzing JEE.
>     >
>     >     Also, note that the wjtp phase runs after Spark executes (if
>     Spark is
>     >     enabled, that is).
>     >
>     >     Marc-André Laverdière-Papineau
>     >     Doctorant - PhD Candidate
>     >
>     >     On 03/24/2014 02:13 PM, Graziella Galea wrote:
>     >     > Thanks for your help Marc-André.
>     >     >
>     >     > I have read a bit about what you said and on the paper 'A
>     Survivor's
>     >     > Guide to Java Program Analysis with Soot' it is also argued that
>     >     > SPARK provides a more precise callgraph while CHA is
>     considered as a
>     >     > dumb version.
>     >     >
>     >     > Before continuing any further though, I have realised that
>     >     generating a
>     >     > callgraph using CHA takes approximately a minute.  In the same
>     >     > paper it is said that SPARK provides a better callgraph at
>     the expense
>     >     > of complicated setup and time.  Obviously, I do not want the
>     >     > callgraph generation to take longer (already not very happy
>     with the
>     >     > current execution time especially because the call graph
>     >     > handling barely takes a second.).  Do you think that SPARK
>     will take
>     >     > even longer than a minute?  The currently implementation for the
>     >     > callgraph generation takes a lot of time (a minute) because of
>     >     this line:
>     >     >
>     >     > PackManager.v().getPack("wjtp").apply();
>     >     >
>     >     >
>     >     > On a different note, is it true that there is a way of
>     generating a
>     >     > callgraph using the .build file?  I never saw such solution
>     on the
>     >     web but
>     >     > I know of someone who did but do not know how and it seems as
>     >     though it
>     >     > does not take a long time for such generation.
>     >     >
>     >     >
>     >     >
>     >     > On 24 March 2014 17:12, Marc-André Laverdière
>     >     > <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>>
>     >     > <mailto: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:
>     >     >
>     >     >     Hello Graziella,
>     >     >
>     >     >     It wouldn't hurt to do some reading on call graph
>     construction
>     >     >     algorithms if you want to know more. I think that Lhoták's
>     >     masters'
>     >     >     thesis on SPARK, even if you just skim through it, will
>     be very
>     >     >     instructive.
>     >     >
>     >     >     Anyways, here is an executive summary.
>     >     >     CHA = declared type's class + all subclasses
>     >     >     RTA = CHA - types that aren't instanciated
>     >     >     VTA, SPARK, etc. = RTA + Fancy constraint propagation to
>     >     narrow it down
>     >     >     even more.
>     >     >
>     >     >     So, CHA will always be 'good' if you use very flat
>     >     hierarchies, or if
>     >     >     the program you analyze always declares the exact same
>     type as
>     >     the one
>     >     >     used (e.g. no List meh = new ArrayList, but ArrayList
>     meh = new
>     >     >     ArrayList). I am sure that this kind of code exists, but I
>     >     doubt that
>     >     >     you'll analyze only this stuff :)
>     >     >
>     >     >     Marc-André Laverdière-Papineau
>     >     >     Doctorant - PhD Candidate
>     >     >
>     >     >     On 03/24/2014 11:31 AM, Graziella Galea wrote:
>     >     >     > Hi!
>     >     >     >
>     >     >     > Why is the CHA algorithm less precise?  I have tested
>     it and
>     >     >     worked fine
>     >     >     > till now but it is very important for me that I have
>     precise
>     >     results.
>     >     >     >
>     >     >     > Regards,
>     >     >     >
>     >     >     > Graziella
>     >     >     >
>     >     >     >
>     >     >     > On 24 March 2014 09:49, Steven Arzt
>     <Steven.Arzt at cased.de <mailto:Steven.Arzt at cased.de>
>     >     <mailto:Steven.Arzt at cased.de <mailto:Steven.Arzt at cased.de>>
>     >     >     <mailto:Steven.Arzt at cased.de
>     <mailto:Steven.Arzt at cased.de> <mailto:Steven.Arzt at cased.de
>     <mailto:Steven.Arzt at cased.de>>>
>     >     >     > <mailto:Steven.Arzt at cased.de
>     <mailto:Steven.Arzt at cased.de> <mailto:Steven.Arzt at cased.de
>     <mailto:Steven.Arzt at cased.de>>
>     >     <mailto:Steven.Arzt at cased.de <mailto:Steven.Arzt at cased.de>
>     <mailto:Steven.Arzt at cased.de <mailto:Steven.Arzt at cased.de>>>>> wrote:
>     >     >     >
>     >     >     >     Hi all,
>     >     >     >
>     >     >     >     It really depends on the type of callgraph you are
>     looking
>     >     >     for. SPARK
>     >     >     >     definitely does not work with non-static entry points,
>     >     i.e. it
>     >     >     will miss
>     >     >     >     edges because it does not have valid
>     points-to-sets for
>     >     all "this"
>     >     >     >     fields
>     >     >     >     inside the instance methods on the boundary. So if
>     no one
>     >     >     >     instantiates your
>     >     >     >     class A and A.method() is an entry point, then
>     there will be
>     >     >     an empty
>     >     >     >     points-to-set for "this" in A.method() since no
>     one ever
>     >     >     creates an
>     >     >     >     instance
>     >     >     >     of A.
>     >     >     >
>     >     >     >     If you have non-static entry points and need
>     SPARK's full
>     >     >     precision, you
>     >     >     >     will have to create a dummy main method. For doing so,
>     >     you can
>     >     >     use the
>     >     >     >     DefaultEntryPointCreator class from FlowDroid
>     >     >     >
>     >     (https://github.com/secure-software-engineering/soot-infoflow)
>     >     >     which
>     >     >     >     should
>     >     >     >     make it fairly simple.
>     >     >     >
>     >     >     >     The other option would be to try a less precise CG
>     algorithm
>     >     >     such as
>     >     >     >     CHA or
>     >     >     >     RTA as already discussed.
>     >     >     >
>     >     >     >     Best regards,
>     >     >     >       Steven
>     >     >     >
>     >     >     >     -----Ursprüngliche Nachricht-----
>     >     >     >     Von: soot-list-bounces at sable.mcgill.ca
>     <mailto:soot-list-bounces at sable.mcgill.ca>
>     >     <mailto:soot-list-bounces at sable.mcgill.ca
>     <mailto:soot-list-bounces at sable.mcgill.ca>>
>     >     >     <mailto:soot-list-bounces at sable.mcgill.ca
>     <mailto:soot-list-bounces at sable.mcgill.ca>
>     >     <mailto:soot-list-bounces at sable.mcgill.ca
>     <mailto:soot-list-bounces at sable.mcgill.ca>>>
>     >     >     >     <mailto:soot-list-bounces at sable.mcgill.ca
>     <mailto:soot-list-bounces at sable.mcgill.ca>
>     >     <mailto:soot-list-bounces at sable.mcgill.ca
>     <mailto:soot-list-bounces at sable.mcgill.ca>>
>     >     >     <mailto:soot-list-bounces at sable.mcgill.ca
>     <mailto:soot-list-bounces at sable.mcgill.ca>
>     >     <mailto:soot-list-bounces at sable.mcgill.ca
>     <mailto:soot-list-bounces at sable.mcgill.ca>>>>
>     >     >     >     [mailto:soot-list-bounces at sable.mcgill.ca
>     <mailto:soot-list-bounces at sable.mcgill.ca>
>     >     <mailto:soot-list-bounces at sable.mcgill.ca
>     <mailto:soot-list-bounces at sable.mcgill.ca>>
>     >     >     <mailto:soot-list-bounces at sable.mcgill.ca
>     <mailto:soot-list-bounces at sable.mcgill.ca>
>     >     <mailto:soot-list-bounces at sable.mcgill.ca
>     <mailto:soot-list-bounces at sable.mcgill.ca>>>
>     >     >     >     <mailto:soot-list-bounces at sable.mcgill.ca
>     <mailto:soot-list-bounces at sable.mcgill.ca>
>     >     <mailto:soot-list-bounces at sable.mcgill.ca
>     <mailto:soot-list-bounces at sable.mcgill.ca>>
>     >     >     <mailto:soot-list-bounces at sable.mcgill.ca
>     <mailto:soot-list-bounces at sable.mcgill.ca>
>     >     <mailto:soot-list-bounces at sable.mcgill.ca
>     <mailto:soot-list-bounces at sable.mcgill.ca>>>>] Im Auftrag von Marc-André
>     >     >     >     Laverdière-Papineau
>     >     >     >     Gesendet: Samstag, 22. März 2014 20:22
>     >     >     >     An: 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>>
>     >     >     <mailto: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>>>
>     >     <mailto: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>>
>     >     >     <mailto: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>>>>
>     >     >     >     Betreff: Re: [Soot-list] Generating a CallGraph
>     >     >     >
>     >     >     >     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>
>     >     <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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>>
>     >     >     <mailto: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>>>
>     >     >     >     <mailto: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>>
>     >     >     <mailto: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>>>>
>     >     >     >     >    
>     <mailto: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>>
>     >     >     <mailto: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>>>
>     >     >     >     <mailto: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>>
>     >     >     <mailto: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>>>>>
>     >     >     >     >     >
>     >     <mailto: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>>
>     >     >     <mailto: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>>>
>     >     >     >     <mailto: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>>
>     >     >     <mailto: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>>>>
>     >     >     >     >    
>     <mailto: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>>
>     >     >     <mailto: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>>>
>     >     >     >     <mailto: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>>
>     >     >     <mailto: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);MultiClassLoadermc
>     >     >     >     l
>     >     >     >     >     >>
>     >     >     >     >
>     >     >     >
>     >     >
>     >    
>     =newMultiClassLoader();mcl.addClassLoader(classLoader);ArrayList<File>allFil
>     >     >     >     es
>     >     >     >     >     >>
>     >     >     >     >
>     >     >     >
>     >     >
>     >    
>     =p.getSourceFiles(path,false__);Options.v().set_process_dir(Arrays.asList(pa
>     >     >     >     th+"\\"));__
>     >     >     >     >     >>    
>     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:basel
>     >     >     >     ine;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().ad
>     >     >     >     dBasicClass("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>>
>     >     >     <mailto: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>>>
>     >     >     >     <mailto: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>>
>     >     >     <mailto: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>>>>
>     >     >     <mailto: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>>
>     <mailto: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>>>
>     >     >     >     <mailto: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>>
>     >     >     <mailto: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>>>>>
>     >     >     >     >     <mailto: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>>
>     >     >     <mailto: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>>>
>     >     >     >     <mailto: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>>
>     >     >     <mailto: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>>>>
>     >     >     <mailto: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>>
>     <mailto: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>>>
>     >     >     >     <mailto: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>>
>     >     >     <mailto: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>>
>     >     >     <mailto: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>>>
>     >     >     >     <mailto: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>>
>     >     >     <mailto: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>>>>
>     >     >     <mailto: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>>
>     <mailto: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>>>
>     >     >     >     <mailto: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>>
>     >     >     <mailto: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>>>>>
>     >     >     >     >     <mailto: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>>
>     >     >     <mailto: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>>>
>     >     >     >     <mailto: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>>
>     >     >     <mailto: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>>>>
>     >     >     <mailto: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>>
>     <mailto: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>>>
>     >     >     >     <mailto: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>>
>     >     >     <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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> <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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> <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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> <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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> <mailto: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>
>     >     <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>
>     >     <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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>
>     >     <mailto: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>
>     >     <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> <mailto: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> <mailto: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> <mailto: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> <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>
>     <mailto: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>
>     <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