[Soot-list] CallGraph Test Problem

qpj 412832527 at qq.com
Thu Feb 20 09:04:57 EST 2014


Hi,
When I test the code from here http://code.google.com/p/call-graph-implementation/source/browse/CallGraphExatraction/src, 


the exception came:
Syed
Soot started on Thu Feb 20 21:53:30 CST 2014
soot.JavaClassProvider$JarException: Class javax.annotation.Nullable was found in a .jar, but Polyglot doesn't support reading source files out of a .jar
	at soot.JavaClassProvider.find(JavaClassProvider.java:79)
	at soot.SourceLocator.getClassSource(SourceLocator.java:72)
	at soot.SootResolver.bringToHierarchy(SootResolver.java:197)
	at soot.SootResolver.bringToSignatures(SootResolver.java:250)
	at soot.SootResolver.bringToBodies(SootResolver.java:291)
	at soot.SootResolver.processResolveWorklist(SootResolver.java:161)
	at soot.SootResolver.resolveClass(SootResolver.java:127)
	at soot.Scene.loadClass(Scene.java:608)
	at soot.Scene.loadClassAndSupport(Scene.java:594)
	at soot.Scene.loadNecessaryClass(Scene.java:1210)
	at soot.Scene.loadNecessaryClasses(Scene.java:1224)
	at soot.Main.run(Main.java:167)
	at soot.Main.main(Main.java:141)
	at day28.SceneTest.main(SceneTest.java:50)









my code:
package day28;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;


import soot.G;
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;
import soot.options.Options;


public class SceneTest {


public static void main(String args[]) {
	List<String> argsList = new ArrayList<String>(Arrays.asList(args));
	argsList.addAll(Arrays.asList(new String[] { "-w", "-main-class",
			"day28.SceneTest","day28.SceneTest"}));// main-class
	args = argsList.toArray(new String[0]);//将argsList存入到String[0]中
	Options.v().set_soot_classpath("D:/Sootlib/jce.jar;D:/soot.jar;" +
			"D:/Sootlib/rt.jar;D:/Sootlib/jasminclasses-2.3.0.jar;D:/Sootlib/polyglotclasses-1.3.5.jar;D:/WorkSpace/Administrator/workspace/SootStudy/bin");
	try{
		System.out.println("Syed");
		PackManager.v().getPack("wjtp").add(new Transform("wjtp.ifds", new SceneTransformer() {
	
		@Override
		protected void internalTransform(String phaseName,Map options) {
			CHATransformer.v().transform();
			//SootClass a = Scene.v().getSootClass("day28.HelloWorld");
			System.out.println("Syed and Ali inside :D");
			CallGraph callGraph = Scene.v().getCallGraph();
			Scene.v();
			SootMethod src = Scene.v().getMainClass().getMethodByName("printMethod");
			Iterator<MethodOrMethodContext> targets = new Targets(callGraph.edgesOutOf(src));
			while (targets.hasNext()) {
				SootMethod tgt = (SootMethod) targets.next();
				System.out.println(src + " may call " + tgt);
			}	 			
		}
	}));
		soot.Main.main(args);
		System.out.println("Syed_Soot_out");
	}catch(Exception e){
		e.printStackTrace();}
	}


	public void printMethod() {
		String name="syed";
		System.out.println("This is the name:"+ name);
	}
	}


The exception is strange, sometimes it can get the right result, but now it doesn't work. I hope some can help me.

Xiangxing
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20140220/d11df0cd/attachment-0001.html 


More information about the Soot-list mailing list