[Soot-list] counting number of lines in jimple

DIVYA IYER sirius.strider at gmail.com
Wed May 26 14:46:31 EDT 2010


I already used " -keep-line-number"
It gives the line numbers of the java source code, not the jimple code.

On Wed, May 26, 2010 at 12:35 PM, Manjiri Namjoshi <
manjiri.namjoshi at googlemail.com> wrote:

> i think i have used one of the soot command line parameter :
> -keep-line-number
> http://www.sable.mcgill.ca/soot/tutorial/usage/
> i dont know if it will be of any help
>
>
> On 26 May 2010 11:27, DIVYA IYER <sirius.strider at gmail.com> wrote:
> > Hello everybody,
> >
> > I am trying to write a program that takes a java class file...converts it
> > into corresponding jimple code and prints out the jimple statements along
> > with their line numbers. Then I would like to pick out those lines from
> the
> > jimple code which have a "virtual invoke". The code that I have written
> > looks like below:
> >
> > import soot.*;
> > import java.util.*;
> > import soot.util.*;
> > import soot.jimple.Stmt;
> > import soot.tagkit.LineNumberTag;
> > import soot.baf.*;
> > import java.io.*;
> >
> > public class GetStmts4 extends BodyTransformer implements RetInst
> > {
> >     private static GetStmts4 instance = new GetStmts4();
> >
> >     private GetStmts4() {};
> >
> >     public static GetStmts4 v()
> >     {
> >     return instance;
> >     }
> >
> >     public static void main(String args[])
> >     {
> >     soot.options.Options.v().set_keep_line_number(true);
> >     //soot.options.Options.v().set_whole_program(true);
> >     //soot.options.Options.v().setPhaseOption("cg","verbose:true");
> >         PackManager.v().getPack("jtp").add(new Transform
> > ("jtp.annotexample",GetStmts4.v()));
> >     soot.Main.main(args);
> >
> >     }
> >
> >     protected void internalTransform(Body b, String phaseName, Map
> options)
> >     {
> >     int linenum = 0;
> >     int count = 0;
> >     int array[] = new int[20];
> >     PatchingChain units = b.getUnits();
> >     Iterator unitsIt = units.iterator();
> >
> >     while(unitsIt.hasNext())
> >         {
> >         Unit unit = (Unit)unitsIt.next();
> >         LineNumberTag tag = (LineNumberTag) unit.getTag("LineNumberTag");
> >         int index = rt.getIndex();  //to get the index of the jimple
> > line??is this correct??
> >         System.out.println("Index is :" + index);
> >        System.out.println(unit);
> >         if (tag != null)
> >
> > //wrote the following piece of code but it gives me the line number in
> the
> > source code...and not the jimple line number
> >             {
> >             System.out.println("java line number:"+tag.getLineNumber());
> >             //System.out.println("tag name:"+tag.getName());
> >             String string = unit.toString();
> >             if(string.matches("\\s*.*virtualinvoke.*"))
> >                 {
> >                 count++;
> >                 System.out.println("line number with
> > virtualinvoke:"+tag.getLineNumber());
> >                 array[count] = tag.getLineNumber();
> >                 System.out.println("the " +count+ " element in array is :
> "
> > +array[count]);
> >                 }
> >             }
> >         }
> >     for(int k = 1;k <= count; k++)
> >         {
> >         System.out.println(array[k]);
> >         }
> >       }
> >    }
> >
> > Would be really grateful if somebody could help me out with this.
> > Thanks!!!
> >
> > _______________________________________________
> > Soot-list mailing list
> > Soot-list at sable.mcgill.ca
> > http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20100526/26e83230/attachment.html 


More information about the Soot-list mailing list