[Soot-list] CallGraph -- No Method ( ERROR )
Abdejalil SETH
shait.abdeljalil at gmail.com
Sat Apr 13 12:03:38 EDT 2013
Hi ,
I try to change FieldAcessible to Field but it doesn't work , eg :
FieldAccessible is the Class
but in this class we use
Field field1
field1.setAccessible(true)
i would like to serach for this method in the CallGraph
Can you help me.
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
"*ToDo.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("*ToDo.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);
}
}
*OUTPUT*
*
*
Soot started on Sat Apr 13 17:57:15 CEST 2013
Exception in thread "main" java.lang.RuntimeException:
*couldn't find class: ToDo.Field (is your soot-class-path set properly?)*
at soot.SootResolver.bringToHierarchy(SootResolver.java:205)
at soot.SootResolver.bringToSignatures(SootResolver.java:239)
at soot.SootResolver.bringToBodies(SootResolver.java:280)
at soot.SootResolver.processResolveWorklist(SootResolver.java:150)
at soot.SootResolver.resolveClass(SootResolver.java:124)
at soot.Scene.loadClass(Scene.java:448)
at soot.Scene.loadClassAndSupport(Scene.java:433)
at soot.Scene.loadNecessaryClass(Scene.java:1053)
at soot.Scene.loadNecessaryClasses(Scene.java:1067)
at soot.Main.run(Main.java:167)
at soot.Main.main(Main.java:141)
at callgraphs.CallGraphExample.main(CallGraphExample.java:54)
My Java CLass that i would to parse is :
package ToDo;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
public class *FieldAccessible* {
public static class MyClass {
public String theField;
}
public static void main(String[] args) throws Exception {
MyClass myClass = new MyClass();
Field field1 = myClass.getClass().getDeclaredField("theField");
field1.*setAccessible(true);*
System.out.println(field1.get(myClass));
}
}
i would like to search for the keyword setAccessible is a Class , using
soot , and to get there path like setAccessible --> main --> FieldAccessible
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20130413/280d3699/attachment.html
More information about the Soot-list
mailing list