Skip to content

Commit

Permalink
Merge branch 'develop' into PR_ExceptionalGraphImprove
Browse files Browse the repository at this point in the history
  • Loading branch information
tim-hoffman authored Jun 25, 2021
2 parents 4e61a6c + 7986c37 commit ed3c66e
Show file tree
Hide file tree
Showing 53 changed files with 2,813 additions and 1,284 deletions.
7 changes: 4 additions & 3 deletions doc/soot_options.htm
Original file line number Diff line number Diff line change
Expand Up @@ -559,8 +559,9 @@ <H2><A name="section_2">Input Options</A></H2>
</tr>
<tr>
<td><tt>-process-path <var>dir</var></tt><br><tt>-process-dir <var>dir</var></tt><br></td>
<td colspan="2">Process all classes found in
<var>dir</var> (but not classes in JAR files in <var>dir</var>, use <tt>process-jar-dir</tt> for that)
<td colspan="2">
Process all classes found in <var>dir</var>
(but not classes within JAR files in <var>dir</var>, use process-jar-dir for that)

</td>
</tr>
Expand Down Expand Up @@ -7384,4 +7385,4 @@ <h4>Accepted phase options:</h4>
</li>
</ul>
</body>
</html>
</html>
Original file line number Diff line number Diff line change
Expand Up @@ -14422,7 +14422,7 @@ private Composite shimpleCreate(Composite parent) {
defaultBool = false;
}

setshimpleextended_widget(new BooleanOptionWidget(editGroupshimple, SWT.NONE, new OptionData("Extended SSA (SSI)", "p phase-option", "shimple","extended", "\nIf enabled, Shimple will created extended SSA (SSI) form.", defaultBool)));
setshimpleextended_widget(new BooleanOptionWidget(editGroupshimple, SWT.NONE, new OptionData("Extended SSA (SSI)", "p phase-option", "shimple","extended", "\nIf enabled, Shimple will create extended SSA (SSI) form.", defaultBool)));

defKey = "p phase-option"+" "+"shimple"+" "+"debug";
defKey = defKey.trim();
Expand Down
2 changes: 1 addition & 1 deletion src/main/generated/options/soot/options/Options.java
Original file line number Diff line number Diff line change
Expand Up @@ -1783,7 +1783,7 @@ public String getUsage() {
+ padOpt("-ice, -ignore-classpath-errors", "Ignores invalid entries on the Soot classpath.")
+ padOpt("-process-multiple-dex", "Process all DEX files found in APK.")
+ padOpt("-search-dex-in-archives", "Also includes Jar and Zip files when searching for DEX files under the provided classpath.")
+ padOpt("-process-path ARG -process-dir ARG", "Process all classes found in ARG")
+ padOpt("-process-path ARG -process-dir ARG", "Process all classes found in ARG (but not classes within JAR files in ARG , use process-jar-dir for that)")
+ padOpt("-process-jar-dir ARG", "Process all classes found in JAR files found in ARG")
+ padOpt("-derive-java-version", "Java version for output and internal processing will be derived from the given input classes")
+ padOpt("-oaat", "From the process-dir, processes one class at a time.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public boolean standard_local_names() {
* Extended SSA (SSI) --
* Compute extended SSA (SSI) form.
*
* If enabled, Shimple will created extended SSA (SSI) form.
* If enabled, Shimple will create extended SSA (SSI) form.
*/
public boolean extended() {
return soot.PhaseOptions.getBoolean(options, "extended");
Expand Down
74 changes: 40 additions & 34 deletions src/main/java/soot/EntryPoints.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,30 +29,42 @@
import java.util.NoSuchElementException;

import soot.util.NumberedString;
import soot.util.StringNumberer;

/**
* Returns the various potential entry points of a Java program.
*
* @author Ondrej Lhotak
*/
public class EntryPoints {

final NumberedString sigMain;
final NumberedString sigFinalize;
final NumberedString sigExit;
final NumberedString sigClinit;
final NumberedString sigInit;
final NumberedString sigStart;
final NumberedString sigRun;
final NumberedString sigObjRun;
final NumberedString sigForName;

public EntryPoints(Singletons.Global g) {
final StringNumberer subSigNumberer = Scene.v().getSubSigNumberer();
sigMain = subSigNumberer.findOrAdd("void main(java.lang.String[])");
sigFinalize = subSigNumberer.findOrAdd("void finalize()");
sigExit = subSigNumberer.findOrAdd("void exit()");
sigClinit = subSigNumberer.findOrAdd("void <clinit>()");
sigInit = subSigNumberer.findOrAdd("void <init>()");
sigStart = subSigNumberer.findOrAdd("void start()");
sigRun = subSigNumberer.findOrAdd("void run()");
sigObjRun = subSigNumberer.findOrAdd("java.lang.Object run()");
sigForName = subSigNumberer.findOrAdd("java.lang.Class forName(java.lang.String)");
}

public static EntryPoints v() {
return G.v().soot_EntryPoints();
}

final NumberedString sigMain = Scene.v().getSubSigNumberer().findOrAdd("void main(java.lang.String[])");
final NumberedString sigFinalize = Scene.v().getSubSigNumberer().findOrAdd("void finalize()");
final NumberedString sigExit = Scene.v().getSubSigNumberer().findOrAdd("void exit()");
final NumberedString sigClinit = Scene.v().getSubSigNumberer().findOrAdd("void <clinit>()");
final NumberedString sigInit = Scene.v().getSubSigNumberer().findOrAdd("void <init>()");
final NumberedString sigStart = Scene.v().getSubSigNumberer().findOrAdd("void start()");
final NumberedString sigRun = Scene.v().getSubSigNumberer().findOrAdd("void run()");
final NumberedString sigObjRun = Scene.v().getSubSigNumberer().findOrAdd("java.lang.Object run()");
final NumberedString sigForName = Scene.v().getSubSigNumberer().findOrAdd("java.lang.Class forName(java.lang.String)");

protected void addMethod(List<SootMethod> set, SootClass cls, NumberedString methodSubSig) {
SootMethod sm = cls.getMethodUnsafe(methodSubSig);
if (sm != null) {
Expand All @@ -61,8 +73,9 @@ protected void addMethod(List<SootMethod> set, SootClass cls, NumberedString met
}

protected void addMethod(List<SootMethod> set, String methodSig) {
if (Scene.v().containsMethod(methodSig)) {
set.add(Scene.v().getMethod(methodSig));
final Scene sc = Scene.v();
if (sc.containsMethod(methodSig)) {
set.add(sc.getMethod(methodSig));
}
}

Expand All @@ -71,9 +84,11 @@ protected void addMethod(List<SootMethod> set, String methodSig) {
*/
public List<SootMethod> application() {
List<SootMethod> ret = new ArrayList<SootMethod>();
if (Scene.v().hasMainClass()) {
addMethod(ret, Scene.v().getMainClass(), sigMain);
for (SootMethod clinit : clinitsOf(Scene.v().getMainClass())) {
final Scene sc = Scene.v();
if (sc.hasMainClass()) {
SootClass mainClass = sc.getMainClass();
addMethod(ret, mainClass, sigMain);
for (SootMethod clinit : clinitsOf(mainClass)) {
ret.add(clinit);
}
}
Expand Down Expand Up @@ -116,8 +131,7 @@ public List<SootMethod> all() {
/** Returns a list of all static initializers. */
public List<SootMethod> clinits() {
List<SootMethod> ret = new ArrayList<SootMethod>();
for (Iterator<SootClass> clIt = Scene.v().getClasses().iterator(); clIt.hasNext();) {
final SootClass cl = clIt.next();
for (SootClass cl : Scene.v().getClasses()) {
addMethod(ret, cl, sigClinit);
}
return ret;
Expand All @@ -126,8 +140,7 @@ public List<SootMethod> clinits() {
/** Returns a list of all constructors taking no arguments. */
public List<SootMethod> inits() {
List<SootMethod> ret = new ArrayList<SootMethod>();
for (Iterator<SootClass> clIt = Scene.v().getClasses().iterator(); clIt.hasNext();) {
final SootClass cl = clIt.next();
for (SootClass cl : Scene.v().getClasses()) {
addMethod(ret, cl, sigInit);
}
return ret;
Expand All @@ -136,10 +149,9 @@ public List<SootMethod> inits() {
/** Returns a list of all constructors. */
public List<SootMethod> allInits() {
List<SootMethod> ret = new ArrayList<SootMethod>();
for (Iterator<SootClass> clIt = Scene.v().getClasses().iterator(); clIt.hasNext();) {
final SootClass cl = clIt.next();
for (SootClass cl : Scene.v().getClasses()) {
for (SootMethod m : cl.getMethods()) {
if (m.getName().equals("<init>")) {
if ("<init>".equals(m.getName())) {
ret.add(m);
}
}
Expand All @@ -150,10 +162,8 @@ public List<SootMethod> allInits() {
/** Returns a list of all concrete methods of all application classes. */
public List<SootMethod> methodsOfApplicationClasses() {
List<SootMethod> ret = new ArrayList<SootMethod>();
for (Iterator<SootClass> clIt = Scene.v().getApplicationClasses().iterator(); clIt.hasNext();) {
final SootClass cl = clIt.next();
for (Iterator<SootMethod> mIt = cl.getMethods().iterator(); mIt.hasNext();) {
final SootMethod m = mIt.next();
for (SootClass cl : Scene.v().getApplicationClasses()) {
for (SootMethod m : cl.getMethods()) {
if (m.isConcrete()) {
ret.add(m);
}
Expand All @@ -167,22 +177,18 @@ public List<SootMethod> methodsOfApplicationClasses() {
*/
public List<SootMethod> mainsOfApplicationClasses() {
List<SootMethod> ret = new ArrayList<SootMethod>();
for (Iterator<SootClass> clIt = Scene.v().getApplicationClasses().iterator(); clIt.hasNext();) {
final SootClass cl = clIt.next();
for (SootClass cl : Scene.v().getApplicationClasses()) {
SootMethod m = cl.getMethodUnsafe("void main(java.lang.String[])");
if (m != null) {
if (m.isConcrete()) {
ret.add(m);
}
if (m != null && m.isConcrete()) {
ret.add(m);
}
}
return ret;
}

/** Returns a list of all clinits of class cl and its superclasses. */
public Iterable<SootMethod> clinitsOf(SootClass cl) {
// Do not create an actual list, since this method gets called quite
// often
// Do not create an actual list, since this method gets called quite often
// Instead, callers usually just want to iterate over the result.
SootMethod init = cl.getMethodUnsafe(sigClinit);
SootClass superClass = cl.getSuperclassUnsafe();
Expand Down
Loading

0 comments on commit ed3c66e

Please sign in to comment.