soot.options
Class CGOptions

java.lang.Object
  extended by soot.options.CGOptions

public class CGOptions
extends Object

Option parser for Call Graph Constructor.


Constructor Summary
CGOptions(Map options)
           
 
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
 

Constructor Detail

CGOptions

public CGOptions(Map options)
Method Detail

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.