[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