[Soot-list] Customized Entry Point in Inter-Procedural Program Analysis
Bihuan Chen
chenbihuan at gmail.com
Mon Jul 6 05:04:27 EDT 2015
Dear all,
I am running some tests with the in-build IFDSLocalInfoFlow to be familiar
with inter-prodecural program analysis with heros.
I use the following options.
String[] interOptions = new String[14];
interOptions[0] = "-cp";
interOptions[1] = "build/tests/";
interOptions[2] = "-pp";
interOptions[3] = "-f";
interOptions[4] = "J";
interOptions[5] = "-keep-line-number";
interOptions[6] = "-coffi";
interOptions[7] = "-w";
interOptions[8] = "-p";
interOptions[9] = "cg.spark";
interOptions[10] = "on";
interOptions[11] = "-main-class";
interOptions[12] =
"edu.ntu.learn.feature.test.TestInputBranchDependencyInter";
interOptions[13] =
"edu.ntu.learn.feature.test.TestInputBranchDependencyInter";
It works fine by using the main method as the entry point, i.e., just call
soot.Main.main(interOptions)
PackManager.v().getPack("wjtp").add(new Transform("wjtp.ifds", new
SceneTransformer() {
protected void internalTransform(String phaseName, Map<String, String>
options) {
IFDSTabulationProblem<Unit,Local,SootMethod,InterproceduralCFG<Unit,SootMethod>>
problem = new IFDSLocalInfoFlow(new JimpleBasedInterproceduralCFG());
IFDSSolver<Unit,Local,SootMethod,InterproceduralCFG<Unit,SootMethod>> solver
= new IFDSSolver<Unit,Local,SootMethod,InterproceduralCFG<Unit,SootMethod>>(
problem);
solver.solve();
Unit ret = Scene.v().getMainMethod().getActiveBody().getUnits().getLast();
for(Local l: solver.ifdsResultsAt(ret)) {
System.err.println(l);
}
}
}));
soot.Main.main(interOptions);
However, if I want to use a customized entry point following
http://www.bodden.de/2012/07/26/soot-custom-entry-points/, it throws the
following exception.
Options.v().parse(interOptions);
SootClass c = Scene.v().forceResolve(
"edu.ntu.learn.feature.test.TestInputBranchDependencyInter", SootClass.
BODIES);
c.setApplicationClass();
Scene.v().loadNecessaryClasses();
SootMethod method = c.getMethodByName("m1");
List<SootMethod> entryPoints = new ArrayList<SootMethod>();
entryPoints.add(method);
Scene.v().setEntryPoints(entryPoints);
PackManager.v().runPacks();
[Thread-1] ERROR heros.solver.IDESolver - Worker thread execution failed:
null
java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:191)
at com.google.common.cache.LocalCache.get(LocalCache.java:3999)
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.AbstractJimpleBasedICFG.getOrCreateUnitGraph(
AbstractJimpleBasedICFG.java:86)
at soot.jimple.toolkits.ide.icfg.AbstractJimpleBasedICFG.isExitStmt(
AbstractJimpleBasedICFG.java:96)
at soot.jimple.toolkits.ide.icfg.AbstractJimpleBasedICFG.isExitStmt(
AbstractJimpleBasedICFG.java:29)
at heros.solver.IDESolver$PathEdgeProcessingTask.run(IDESolver.java:861)
at java.util.concurrent.ThreadPoolExecutor.runWorker(
ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(
ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Exception in thread "Thread-1" Exception in thread "main"
java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:191)
at com.google.common.cache.LocalCache.get(LocalCache.java:3999)
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.AbstractJimpleBasedICFG.getOrCreateUnitGraph(
AbstractJimpleBasedICFG.java:86)
at soot.jimple.toolkits.ide.icfg.AbstractJimpleBasedICFG.isExitStmt(
AbstractJimpleBasedICFG.java:96)
at soot.jimple.toolkits.ide.icfg.AbstractJimpleBasedICFG.isExitStmt(
AbstractJimpleBasedICFG.java:29)
at heros.solver.IDESolver$PathEdgeProcessingTask.run(IDESolver.java:861)
at java.util.concurrent.ThreadPoolExecutor.runWorker(
ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(
ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
java.lang.RuntimeException: There were exceptions during IDE analysis.
Exiting.
at heros.solver.IDESolver.runExecutorAndAwaitCompletion(IDESolver.java:264)
at heros.solver.IDESolver.awaitCompletionComputeValuesAndShutdown(
IDESolver.java:233)
at heros.solver.IDESolver.solve(IDESolver.java:207)
at edu.ntu.learn.feature.Main$4.internalTransform(Main.java:106)
at soot.SceneTransformer.transform(SceneTransformer.java:39)
at soot.Transform.apply(Transform.java:90)
at soot.ScenePack.internalApply(ScenePack.java:40)
at soot.Pack.apply(Pack.java:116)
at soot.PackManager.runWholeProgramPacks(PackManager.java:565)
at soot.PackManager.runPacksNormally(PackManager.java:457)
at soot.PackManager.runPacks(PackManager.java:392)
at edu.ntu.learn.feature.Main.runTest2(Main.java:123)
at edu.ntu.learn.feature.Main.main(Main.java:153)
Caused by: java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:191)
at com.google.common.cache.LocalCache.get(LocalCache.java:3999)
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.AbstractJimpleBasedICFG.getOrCreateUnitGraph(
AbstractJimpleBasedICFG.java:86)
at soot.jimple.toolkits.ide.icfg.AbstractJimpleBasedICFG.isExitStmt(
AbstractJimpleBasedICFG.java:96)
at soot.jimple.toolkits.ide.icfg.AbstractJimpleBasedICFG.isExitStmt(
AbstractJimpleBasedICFG.java:29)
at heros.solver.IDESolver$PathEdgeProcessingTask.run(IDESolver.java:861)
at java.util.concurrent.ThreadPoolExecutor.runWorker(
ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(
ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Is there anything I miss to use soot with a customized entry point? Please
help to give some clues. Thanks.
Best wishes,
Bihuan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20150706/6441b2e0/attachment-0001.html
More information about the Soot-list
mailing list