Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Using Soot with custom entry points
When doing whole-program analysis with Soot, you will need to tell Soot what the entry points to your program are. Soot has always supported an option of custom entry points, which comes in handy when analyzing libraries, applets or apps that do not have a main method. However, as it turns out there was quite some confusion as to how to use the “custom entry points” feature. Admitted, it is more tricky than it maybe should be. This blog post is meant to clarify some of those issues. The following code shows you how to set a method
MyEntryPoint.myMethod as entry point.
Options.v().parse(args); SootClass c = Scene.v().forceResolve("MyEntryPoint", SootClass.BODIES); c.setApplicationClass(); Scene.v().loadNecessaryClasses(); SootMethod method = c.getMethodByName("myMethod"); List entryPoints = new ArrayList(); entryPoints.add(method); Scene.v().setEntryPoints(entryPoints); PackManager.v().runPacks();
Usually we recommend users to just call Soot’s very own main method after setting up the initial configuration. Note that in this particular case this is not recommended. The problem is that the above code is loading classes, which conflicts with the standard class-loading process that Soot’s main method implements. Instead above we call
runPacks which will run all of Soot’s packs in the usual order. At the beginning of the above code, we call
parse to parse the command-line arguments given to your driver class, forwarding those to Soot (as usual).