[Soot-list] Help in running Soot with Heros

Andreas Pavlogiannis paulogiann at gmail.com
Sat Jun 28 09:03:23 EDT 2014


Hi,

I am trying to use Soot with Heros for IFDS-type analysis. I am using 
the sootclasses.jar and heros.jar from the nightly-build directory 
http://vandyk.st.informatik.tu-darmstadt.de/abc/

Below is a minimal example that I am trying to run (a slight 
modification of the file soot.jimple.toolkits.ide.Main.java).
Unfortunately, the program crashes with the following exceptions. Could 
someone guide me on how to get this example working?

Thanks,
Andreas


[pool-1-thread-1] ERROR heros.solver.IDESolver - Worker thread execution 
failed: java.lang.NoSuchMethodError: soot.Kind.isExecutor()Z
com.google.common.util.concurrent.ExecutionError: 
java.lang.NoSuchMethodError: soot.Kind.isExecutor()Z
     at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2261)
     at com.google.common.cache.LocalCache.get(LocalCache.java:4000)
     at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4004)
     at 
com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4874)
     at 
com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4880)
     at 
soot.jimple.toolkits.ide.icfg.JimpleBasedInterproceduralCFG.getCalleesOfCallAt(JimpleBasedInterproceduralCFG.java:130)
     at 
soot.jimple.toolkits.ide.icfg.JimpleBasedInterproceduralCFG.getCalleesOfCallAt(JimpleBasedInterproceduralCFG.java:55)
     at heros.solver.IDESolver.processCall(IDESolver.java:317)
     at heros.solver.IDESolver.access$000(IDESolver.java:67)
     at 
heros.solver.IDESolver$PathEdgeProcessingTask.run(IDESolver.java:833)
     at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
     at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
     at java.lang.Thread.run(Thread.java:701)
Caused by: java.lang.NoSuchMethodError: soot.Kind.isExecutor()Z
     at 
soot.jimple.toolkits.ide.icfg.JimpleBasedInterproceduralCFG$EdgeFilter$1.want(JimpleBasedInterproceduralCFG.java:64)
     at soot.jimple.toolkits.callgraph.Filter.advance(Filter.java:43)
     at soot.jimple.toolkits.callgraph.Filter.next(Filter.java:54)
     at soot.jimple.toolkits.callgraph.Filter.next(Filter.java:27)
     at 
soot.jimple.toolkits.ide.icfg.JimpleBasedInterproceduralCFG$1.load(JimpleBasedInterproceduralCFG.java:83)
     at 
soot.jimple.toolkits.ide.icfg.JimpleBasedInterproceduralCFG$1.load(JimpleBasedInterproceduralCFG.java:76)
     at 
com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3599)
     at 
com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2379)
     at 
com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2342)
     at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2257)
     ... 12 more
...
...










import heros.IFDSTabulationProblem;
import heros.InterproceduralCFG;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import soot.PackManager;
import soot.SceneTransformer;
import soot.SootMethod;
import soot.Transform;
import soot.Unit;
import soot.jimple.toolkits.ide.JimpleIFDSSolver;
import soot.jimple.toolkits.ide.exampleproblems.IFDSPossibleTypes;
import soot.jimple.toolkits.ide.icfg.JimpleBasedInterproceduralCFG;

public class MWE {

     public static void main(String[] args) {


         PackManager.v().getPack("wjtp").add(new Transform("wjtp.ifds", 
new SceneTransformer() {
             protected void internalTransform(String phaseName, 
@SuppressWarnings("rawtypes") Map options) {

IFDSTabulationProblem<Unit,?,SootMethod,InterproceduralCFG<Unit,SootMethod>> 
problem = new IFDSPossibleTypes(new JimpleBasedInterproceduralCFG());
                 @SuppressWarnings({ "rawtypes", "unchecked" })
JimpleIFDSSolver<?,InterproceduralCFG<Unit,SootMethod>> solver = new 
JimpleIFDSSolver(problem);
                 solver.solve();
             }
         }));
         List<String>  sootArgs = new 
LinkedList<String>(Arrays.asList(args));

         sootArgs.add("-f");
         sootArgs.add("n");
         sootArgs.add("-w");

         String[] argsArray = sootArgs.toArray(new String[0]);
         soot.Main.main(argsArray);
     }

}




More information about the Soot-list mailing list