java - soot issue...counting the jimple line numbers??
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:
Code :
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]);
}
}
}
I am getting the following error:
GetStmts4.java:9: GetStmts4 is not abstract and does not override abstract method setIndex(int) in soot.baf.RetInst
public class GetStmts4 extends BodyTransformer implements RetInst
^
Would be really grateful if somebody could help me out with this.
Thanks!!!
Re: java - soot issue...counting the jimple line numbers??