Guest User

CallGraph with no main

a guest
Apr 16th, 2013
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.82 KB | None | 0 0
  1. package doAnalysis;
  2.  
  3. import java.util.*;
  4.  
  5. import soot.*;
  6. import soot.jimple.toolkits.callgraph.*;
  7. import soot.options.Options;
  8.  
  9. public class Copy_3_of_MyCallGraph extends AuxGraph {
  10.  
  11.     public static ArrayList<SootMethod> getAllMethods() {
  12.         ArrayList<SootMethod> entrypoints = new ArrayList<SootMethod>();
  13.         for (String klass : allClasses) {
  14.             // Error here : allCLass  ?
  15.            
  16.            
  17.             // klass such as org.abc.MyClass
  18.            
  19.            
  20.             Scene.v().forceResolve(klass, SootClass.SIGNATURES);
  21.             SootClass soot_class = Scene.v().getSootClass(klass);
  22.  
  23.             // adding all non-abstract method as entrypoint
  24.             for (SootMethod m : soot_class.getMethods()) {
  25.                 if (!m.isAbstract()) {
  26.                     entrypoints.add(m);
  27.                 }
  28.             }
  29.         }
  30.         return entrypoints;
  31.     }
  32.  
  33.     public static void main(String[] args) {
  34.         Options.v().set_whole_program(true);
  35.         // Options.v().set_process_dir(Arrays.asList(libDir)); //library dir
  36.         Options.v().set_soot_classpath("../rt.jar:../jce.jar:.");
  37.         // library dir along with rt.jar/jce.jar from JRE/JDK
  38.  
  39.         Scene.v().setEntryPoints(getAllMethods());
  40.         Scene.v().loadNecessaryClasses();
  41.         PackManager.v().getPack("wjtp").apply();
  42.  
  43.         PackManager.v().getPack("wjtp")
  44.                 .add(new Transform("wjtp.myTrans", new SceneTransformer() {
  45.  
  46.                     @Override
  47.                     protected void internalTransform(String phaseName,
  48.                             Map options) {
  49.                         CHATransformer.v().transform();
  50.                     }
  51.                 }));
  52.  
  53.         SootClass soot_class = Scene.v()
  54.                 .getSootClass("java.lang.reflect.Field");
  55.         SootMethod tgt = getMethod(soot_class, "void setAccessible(boolean)");
  56.         CallGraph cg = Scene.v().getCallGraph();
  57.  
  58.         @SuppressWarnings("unchecked")
  59.         Iterator<MethodOrMethodContext> source = new Sources(cg.edgesInto(tgt));
  60.         while (source.hasNext()) {
  61.             SootMethod src = (SootMethod) source.next();
  62.             System.out.println(src);
  63.         }
  64.  
  65.     }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment