soot.options
Class CGOptions
java.lang.Object
soot.options.CGOptions
public class CGOptions
- extends Object
Option parser for Call Graph Constructor.
Method Summary |
boolean |
all_reachable()
All Application Class Methods Reachable --
Assume all methods of application classes are reachable.. |
boolean |
enabled()
Enabled --
. |
String |
guards()
Guarding strategy --
Describes how to guard the program from unsound assumptions.. |
boolean |
implicit_entry()
Implicit Entry Points --
Include methods called implicitly by the VM as entry points. |
int |
jdkver()
JDK version --
JDK version for native methods. |
String |
reflection_log()
Reflection Log --
Uses a reflection log to resolve reflective calls.. |
boolean |
safe_forname()
Safe forName --
Handle Class.forName() calls conservatively. |
boolean |
safe_newinstance()
Safe newInstance --
Handle Class.newInstance() calls conservatively. |
boolean |
trim_clinit()
Trim Static Initializer Edges --
Removes redundant static initializer calls. |
boolean |
verbose()
Verbose --
Print warnings about where the call graph may be incomplete. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
CGOptions
public CGOptions(Map options)
enabled
public boolean enabled()
- Enabled --
.
safe_forname
public boolean safe_forname()
- Safe forName --
Handle Class.forName() calls conservatively.
When a program calls Class.forName(), the named class is
resolved, and its static initializer executed. In many cases, it
cannot be determined statically which class will be loaded, and
which static initializer executed. When this option is set to
true, Soot will conservatively assume that any static
initializer could be executed. This may make the call graph very
large. When this option is set to false, any calls to
Class.forName() for which the class cannot be determined
statically are assumed to call no static initializers.
safe_newinstance
public boolean safe_newinstance()
- Safe newInstance --
Handle Class.newInstance() calls conservatively.
When a program calls Class.newInstance(), a new object is
created and its constructor executed. Soot does not determine
statically which type of object will be created, and which
constructor executed. When this option is set to true, Soot will
conservatively assume that any constructor could be executed.
This may make the call graph very large. When this option is set
to false, any calls to Class.newInstance() are assumed not to
call the constructor of the created object.
verbose
public boolean verbose()
- Verbose --
Print warnings about where the call graph may be incomplete.
Due to the effects of native methods and reflection, it may not
always be possible to construct a fully conservative call graph.
Setting this option to true causes Soot to point out the parts
of the call graph that may be incomplete, so that they can be
checked by hand.
all_reachable
public boolean all_reachable()
- All Application Class Methods Reachable --
Assume all methods of application classes are reachable..
When this option is false, the call graph is built starting at a
set of entry points, and only methods reachable from those entry
points are processed. Unreachable methods will not have any call
graph edges generated out of them. Setting this option to true
makes Soot consider all methods of application classes to be
reachable, so call edges are generated for all of them. This
leads to a larger call graph. For program visualization
purposes, it is sometimes desirable to include edges from
unreachable methods; although these methods are unreachable in
the version being analyzed, they may become reachable if the
program is modified.
implicit_entry
public boolean implicit_entry()
- Implicit Entry Points --
Include methods called implicitly by the VM as entry points.
When this option is true, methods that are called implicitly by
the VM are considered entry points of the call graph. When it is
false, these methods are not considered entry points, leading to
a possibly incomplete call graph.
trim_clinit
public boolean trim_clinit()
- Trim Static Initializer Edges --
Removes redundant static initializer calls.
The call graph contains an edge from each statement that could
trigger execution of a static initializer to that static
initializer. However, each static initializer is triggered only
once. When this option is enabled, after the call graph is
built, an intra-procedural analysis is performed to detect
static initializer edges leading to methods that must have
already been executed. Since these static initializers cannot be
executed again, the corresponding call graph edges are removed
from the call graph.
jdkver
public int jdkver()
- JDK version --
JDK version for native methods.
This option sets the JDK version of the standard library being
analyzed so that Soot can simulate the native methods in the
specific version of the library. The default, 3, refers to Java
1.3.x.
reflection_log
public String reflection_log()
- Reflection Log --
Uses a reflection log to resolve reflective calls..
Load a reflection log from the given file and use this log to
resolve reflective call sites. Note that when a log is given,
the following other options have no effect: safe-forname,
safe-newinstance.
guards
public String guards()
- Guarding strategy --
Describes how to guard the program from unsound assumptions..
Using a reflection log is only sound for method executions that
were logged. Executing the program differently may be unsound.
Soot can insert guards at program points for which the
reflection log contains no information. When these points are
reached (because the program is executed differently) then the
follwing will happen, depending on the value of this flag.
ignore: no guard is inserted, the program executes normally but
under unsound assumptions. print: the program prints a stack
trace when reaching a porgram location that was not traced but
continues to run. throw (default): the program throws an Error
instead.