[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