[Soot-list] How to have whole-program analysis run from non-main() methods
Jiaqi Tan
tanjiaqi at gmail.com
Thu Dec 15 11:31:57 EST 2011
Hi Bernhard,
Yes I did have a non-static entry point with this signature:
int performIO(ByteBuffer buf) throws IOException {
return channel.read(buf);
}
Here is the error:
Exception in thread "main"
soot.jimple.toolkits.typing.integer.InternalTypingException
at soot.jimple.toolkits.typing.integer.ClassHierarchy.typeNode(ClassHierarchy.java:178)
at soot.jimple.toolkits.typing.integer.TypeResolver.typeVariable(TypeResolver.java:109)
at soot.jimple.toolkits.typing.integer.ConstraintCollector.caseReturnStmt(ConstraintCollector.java:942)
at soot.jimple.internal.JReturnStmt.apply(JReturnStmt.java:98)
at soot.jimple.toolkits.typing.integer.ConstraintCollector.collect(ConstraintCollector.java:48)
at soot.jimple.toolkits.typing.integer.TypeResolver.collect_constraints_1(TypeResolver.java:227)
at soot.jimple.toolkits.typing.integer.TypeResolver.resolve_step_1(TypeResolver.java:180)
at soot.jimple.toolkits.typing.integer.TypeResolver.resolve(TypeResolver.java:140)
at soot.jimple.toolkits.typing.fast.TypeResolver.inferTypes(TypeResolver.java:140)
at soot.jimple.toolkits.typing.TypeAssigner.internalTransform(TypeAssigner.java:101)
at soot.BodyTransformer.transform(BodyTransformer.java:51)
at soot.Transform.apply(Transform.java:104)
at soot.JimpleBodyPack.applyPhaseOptions(JimpleBodyPack.java:66)
at soot.JimpleBodyPack.internalApply(JimpleBodyPack.java:89)
at soot.Pack.apply(Pack.java:124)
at soot.coffi.CoffiMethodSource.getBody(CoffiMethodSource.java:117)
at soot.SootMethod.getBodyFromMethodSource(SootMethod.java:83)
at soot.SootMethod.retrieveActiveBody(SootMethod.java:316)
at soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processNewMethod(OnFlyCallGraphBuilder.java:531)
at soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processReachables(OnFlyCallGraphBuilder.java:426)
at soot.jimple.toolkits.callgraph.CallGraphBuilder.build(CallGraphBuilder.java:84)
at soot.jimple.toolkits.callgraph.CHATransformer.internalTransform(CHATransformer.java:43)
at soot.SceneTransformer.transform(SceneTransformer.java:39)
at soot.Transform.apply(Transform.java:89)
at soot.RadioScenePack.internalApply(RadioScenePack.java:57)
at soot.jimple.toolkits.callgraph.CallGraphPack.internalApply(CallGraphPack.java:51)
at soot.Pack.apply(Pack.java:114)
at soot.PackManager.runWholeProgramPacks(PackManager.java:417)
at soot.PackManager.runPacks(PackManager.java:336)
I have not looked closely at this so it's possible that I made a
mistake somewhere.
I'm also doing something that I'm not sure is entirely correct: I
first ran Soot with whole-program mode disabled, and resolved the
class whose methods I want to use as EntryPoints up to BODIES. This
allowed me to get a SootClass with the fully populated SootMethod's
which I then used to populate the List<Method> to set EntryPoints.
Then, before I performed the whole-program analysis, I ran G.reset()
before running the regular Soot setup and running the
Was your experience similar? Did you have a similar usage or face
similar issues?
Thanks,
Jiaqi
More information about the Soot-list
mailing list