[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