[Soot-list] Exception in MethodPAG.java:62
Mandar
mandars at cse.iitb.ac.in
Sun Feb 12 08:04:43 EST 2017
Hi All,
I am trying to see the results of Call Graph of vta on java programs
having reflection classes. For this I used Tamiflex to resolve all the
reflective calls in the java program. The output class files where then
used as an argument to the Call graph analysis. Doing so resulted into
the following exception.
Exception in thread "main" java.lang.RuntimeException
at soot.jimple.spark.pag.MethodPAG.addToPAG(MethodPAG.java:62)
at
soot.jimple.spark.builder.ContextInsensitiveBuilder.build(ContextInsensitiveBuilder.java:91)
at
soot.jimple.spark.SparkTransformer.internalTransform(SparkTransformer.java:84)
at soot.SceneTransformer.transform(SceneTransformer.java:39)
at RTAMeasures$1.setSparkAnalysis(RTAMeasures.java:105)
at RTAMeasures$1.internalTransform(RTAMeasures.java:57)
at soot.SceneTransformer.transform(SceneTransformer.java:39)
at soot.Transform.apply(Transform.java:89)
at soot.ScenePack.internalApply(ScenePack.java:43)
at soot.Pack.apply(Pack.java:114)
at soot.PackManager.runWholeProgramPacks(PackManager.java:418)
at soot.PackManager.runPacks(PackManager.java:336)
at soot.Main.run(Main.java:198)
at soot.Main.main(Main.java:141)
at RTAMeasures.main(RTAMeasures.java:111)
Command I used for using Tamiflex:
java -javaagent:poa-2.0.3.jar ReflectionDemo
then I used the following command.
java -cp soot-2.5.0.jar soot.Main -w -app -allow-phantom-refs -p
cg.spark enabled -cp $JAVA_HOME/lib/rt.jar:$JAVA_HOME/lib/jce.jar:out:.
-include org.apache. -include org.w3c. -main-class ReflectionDemo
SomeClass ReflectionDemo
The class file in sootOuptut directory was used as the input to the
program that prints the call graph edges.
Reflection Example in JAVA.
---------------------------ReflectionDemo.java--------------------------------------------------
import java.lang.reflect.*;
public class ReflectionDemo {
public static void main(String[] args) throws ClassNotFoundException,
NoSuchMethodException, SecurityException, InstantiationException,
IllegalAccessException, IllegalArgumentException,
InvocationTargetException {
// TODO Auto-generated method stub
Class c = Class.forName("SomeClass");
Method m = c.getDeclaredMethod("SomeMethod");
Object o = c.newInstance();
m.invoke(o, null);
}
}
---------------------------SomeClass.java--------------------------------------------------
public class SomeClass {
public SomeClass(){}
public void SomeMethod(){
System.out.println("Some Method is called ");
}
}
And the analysis I am trying out.
---------------------------RTAMeasures.java--------------------------------------------------
public class RTAMeasures {
public static void main(String[] args) {
List<String> argList = new ArrayList<String>(Arrays.asList(args));
argList.addAll(Arrays.asList(new String[]{
"-w",
"-cp","/home/mandar/MTP/Impl/classes/sootOutput",
"-allow-phantom-refs",
"-main-class",
"ReflectionDemo",
"ReflectionDemo"
}));
PackManager.v().getPack("wjtp").add(new Transform("wjtp.myTrans",
new SceneTransformer() {
@Override
protected void internalTransform(String arg0, Map arg1) {
HashMap<Integer,Integer> outMap = new
HashMap<Integer,Integer>();
Scene.v().loadNecessaryClasses();
setSparkAnalysis();
CallGraph cg = Scene.v().getCallGraph();
System.out.println("Call graph size : "+cg.size());
Iterator methods = cg.sourceMethods();
PrintStream out = null;
try {
out = new PrintStream(new
FileOutputStream("logs/vta.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Iterator<SootClass> itc =
Scene.v().getClasses().iterator();
while(itc.hasNext()){
SootClass sC = (SootClass)itc.next();
out.println("\t\tClass Name: " + sC.getName());
Iterator<SootMethod> methodIt =
sC.getMethods().iterator();
while(methodIt.hasNext()){
SootMethod m = (SootMethod) methodIt.next();
out.println("\t\tMethod Name: "+m.getName());
if(!m.isJavaLibraryMethod() &&
!m.isConstructor()){
Iterator<MethodOrMethodContext> targets =
new Targets(cg.edgesOutOf(m));
while (targets.hasNext()) {
SootMethod tgt =
(SootMethod)targets.next();
out.println(m + " may call " + tgt);
}
}
}
}
}
private void setSparkAnalysis() {
HashMap<String,String> opt = new HashMap<String,String>();
opt.put("enabled","true");
opt.put("verbose","false");
opt.put("vta","true");
opt.put("on-fly-cg","true");
opt.put("set-impl","double");
opt.put("double-set-old","hybrid");
opt.put("propagator", "iter");
opt.put("double-set-new","hybrid");
SparkTransformer.v().transform("",opt);
}
}));
args = argList.toArray(new String[0]);
soot.Main.main(args);
}
}
Please let me know what are the steps I have done wrong. I am using
Tamiflex for the first time.
Thanks in advance.
Regards,
Mandar.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20170212/2ded62df/attachment.html
More information about the Soot-list
mailing list