Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package callgraphs;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import soot.MethodOrMethodContext;
- import soot.PackManager;
- import soot.Scene;
- import soot.SceneTransformer;
- import soot.SootClass;
- import soot.SootMethod;
- import soot.Transform;
- import soot.jimple.toolkits.callgraph.CHATransformer;
- import soot.jimple.toolkits.callgraph.CallGraph;
- import soot.jimple.toolkits.callgraph.Targets;
- public class CallGraphExample {
- public static void main(String[] args) {
- List<String> argsList = new ArrayList<String>(Arrays.asList(args));
- argsList.addAll(Arrays.asList(new String[] { "-w", "-main-class",
- "ToDo.FieldAccessible",// main-class
- "ToDo.FieldAccessible",// argument classes
- "java.lang.reflect.Field" //
- }));
- PackManager.v().getPack("wjtp")
- .add(new Transform("wjtp.myTrans", new SceneTransformer() {
- @Override
- protected void internalTransform(String phaseName,
- Map options) {
- CHATransformer.v().transform();
- SootClass a = Scene.v().getSootClass(
- "java.lang.reflect.Field");
- SootMethod src = Scene.v().getMainClass()
- .getMethodByName("setAccessible");
- CallGraph cg = Scene.v().getCallGraph();
- Iterator<MethodOrMethodContext> targets = new Targets(
- cg.edgesInto(src));
- while (targets.hasNext()) {
- SootMethod tgt = (SootMethod) targets.next();
- System.out.println(src + " may call " + tgt);
- }
- }
- }));
- args = argsList.toArray(new String[0]);
- soot.Main.main(args);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment