[Soot-list] CallGraph : I try to change FieldAcessible to Field but it doesn't work

Abdejalil SETH shait.abdeljalil at gmail.com
Sat Apr 13 12:14:22 EDT 2013


Hi Sabah,

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 search 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 in a Class , using
soot , and to get there path like setAccessible --> main --> FieldAccessible
thank  you
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20130413/68acb2aa/attachment-0001.html 


More information about the Soot-list mailing list