Guest User

CallGraph Example

a guest
Apr 14th, 2013
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.62 KB | None | 0 0
  1. package callgraphs;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import java.util.Map;
  8.  
  9. import soot.MethodOrMethodContext;
  10. import soot.PackManager;
  11. import soot.Scene;
  12. import soot.SceneTransformer;
  13. import soot.SootClass;
  14. import soot.SootMethod;
  15. import soot.Transform;
  16. import soot.jimple.toolkits.callgraph.CHATransformer;
  17. import soot.jimple.toolkits.callgraph.CallGraph;
  18. import soot.jimple.toolkits.callgraph.Targets;
  19.  
  20. public class CallGraphExample {
  21.     public static void main(String[] args) {
  22.         List<String> argsList = new ArrayList<String>(Arrays.asList(args));
  23.         argsList.addAll(Arrays.asList(new String[] { "-w", "-main-class",
  24.                 "ToDo.FieldAccessible",// main-class
  25.                 "ToDo.FieldAccessible",// argument classes
  26.                 "java.lang.reflect.Field" //
  27.         }));
  28.  
  29.         PackManager.v().getPack("wjtp")
  30.                 .add(new Transform("wjtp.myTrans", new SceneTransformer() {
  31.  
  32.                     @Override
  33.                     protected void internalTransform(String phaseName,
  34.                             Map options) {
  35.                         CHATransformer.v().transform();
  36.                         SootClass a = Scene.v().getSootClass(
  37.                                 "java.lang.reflect.Field");
  38.  
  39.                         SootMethod src = Scene.v().getMainClass()
  40.                                 .getMethodByName("setAccessible");
  41.                         CallGraph cg = Scene.v().getCallGraph();
  42.  
  43.                         Iterator<MethodOrMethodContext> targets = new Targets(
  44.                                 cg.edgesInto(src));
  45.                         while (targets.hasNext()) {
  46.                             SootMethod tgt = (SootMethod) targets.next();
  47.                             System.out.println(src + " may call " + tgt);
  48.                         }
  49.                     }
  50.  
  51.                 }));
  52.  
  53.         args = argsList.toArray(new String[0]);
  54.  
  55.         soot.Main.main(args);
  56.     }
  57. }
Advertisement
Add Comment
Please, Sign In to add comment