Im Dezember 2022 haben wir offiziell SootUp veröffentlicht, eine Version von Soot mit einer komplett überarbeiteten, modulareren, testbareren, wartbareren und benutzerfreundlicheren Architektur. Bitte schauen Sie sich dies an, falls Sie ein neues Programmanalyseprojekt starten möchten.
Da es einige Verwirrung gab: SootUp ist noch nicht vollständig ausgestattet. Daher muss der „alte“ Soot vorerst weiterleben, insbesondere für Projekte, die Instrumentierungsfähigkeiten oder robuste Android-Unterstützung erfordern. Der „alte“ Soot wird weiterhin beibehalten, bis er sicher durch einen Nachfolger mit vollständigem Funktionsumfang ersetzt werden kann.
Wir beantragen regelmäßig Fördermittel zur Erhaltung von Soot. Sie können uns enorm helfen, indem Sie uns über Projekte informieren, die Ruß nutzen , sei es kommerziell oder in Form von Forschungsinstrumenten.
Vielen Dank auch für die Unterstützung von Soot mit einer kostenlosen Open-Source-Lizenz!
... für die Unterstützung der Weiterentwicklung von Soot! Amazon Web Services ist Goldsponsor.
Lesen Sie hier mehr darüber, wie Sie selbst Sponsor werden können.
Versuchen Sie, sich an der neuesten Java 9-Entwicklung von Soot zu beteiligen.
ModuleScene
Soot ist ein Java-Optimierungsframework. Es bietet vier Zwischendarstellungen zum Analysieren und Transformieren von Java-Bytecode:
Weitere Informationen finden Sie unter https://soot-oss.github.io/soot.
Wir haben einige Dokumentationen zu Soot im Wiki und auch eine große Auswahl an Tutorials zu Soot.
Für detaillierte Informationen beachten Sie bitte auch die JavaDoc- und Optionsdokumentationen von Soot.
Für jeden Commit an den master
-Zweig wird derzeit ein Soot-Release erstellt. Sie können Soot über Maven, Gradle, SBT usw. als Abhängigkeit einbinden, indem Sie die folgenden Koordinaten verwenden:
< dependencies >
< dependency >
< groupId >org.soot-oss</ groupId >
< artifactId >soot</ artifactId >
< version >4.3.0</ version >
</ dependency >
</ dependencies >
Sie können auch ältere Builds des master
Zweigs beziehen. Eine vollständige Liste der Builds finden Sie auf Maven Central.
Für jeden Commit im develop
wird derzeit ein Soot-SNAPSHOT erstellt. Sie können Soot über Maven, Gradle, SBT usw. als Abhängigkeit einbinden, indem Sie die folgenden Koordinaten verwenden:
< dependencies >
< dependency >
< groupId >org.soot-oss</ groupId >
< artifactId >soot</ artifactId >
< version >4.4.0-SNAPSHOT</ version >
</ dependency >
</ dependencies >
< repositories >
< repository >
< id >sonatype-snapshots</ id >
< url >https://oss.sonatype.org/content/repositories/snapshots</ url >
< releases >
< enabled >false</ enabled >
</ releases >
</ repository >
</ repositories >
Sie können auch ältere Builds des develop
beziehen. Eine vollständige Liste der Builds finden Sie auf Maven Central.
Wir empfehlen die Verwendung von Soot mit Maven. Sie können den neuesten Release-Build von Soot direkt erhalten. Sie können die neueste SNAPSHOT-Version von Soot direkt herunterladen.
Die Datei soot-<RELEASE>-jar-with-dependencies.jar
ist eine All-in-One-Datei, die auch alle erforderlichen Bibliotheken enthält.
Die Datei soot-<RELEASE>.jar
enthält nur Soot, sodass Sie bei Bedarf manuell Abhängigkeiten auswählen können. Wenn Sie sich nicht mit Abhängigkeiten herumschlagen möchten, empfehlen wir die Verwendung ersterer.
Wenn Sie nicht mit den vorgefertigten Versionen arbeiten können und Soot selbst erstellen müssen, schauen Sie sich für weitere Schritte bitte das Wiki an.
Soot folgt der Git-Flow-Konvention. Releases und Hotfixes werden im Master-Zweig verwaltet. Die Entwicklung findet im Entwicklungszweig statt. Schauen Sie sich Letzteres an, um die Blutspitze von Ruß einzufangen.
Gerne nehmen wir beliebige Verbesserungen an Soot in Form von GitHub-Pull-Requests entgegen. Bitte lesen Sie unsere Beitragsrichtlinien, bevor Sie eine Pull-Anfrage einrichten.
Sie nutzen Soot und möchten uns in Zukunft bei der Unterstützung unterstützen? Dann unterstützen Sie uns bitte, indem Sie dieses kleine Webformular ausfüllen.
So können Sie uns auf zwei Arten helfen:
Wenn Sie Soot mit Java > 8 ausführen möchten, sind Sie fertig. Führen Sie es einfach wie gewohnt aus. Wenn Sie Soot mit Java 8 ausführen, aber Java >8-Projekte analysieren möchten oder umgekehrt, siehe unten.
So laden Sie Module in Soots ModuleScene
aus Java:
// configure Soot's options, refer to example configurations below
Options . v (). set_soot_modulepath ( modulePath );
// load classes from modules into Soot
// Here, getClassUnderModulePath() expects the module path to be set using the Options class as seen above
Map < String , List < String >> map = ModulePathSourceLocator . v (). getClassUnderModulePath ( modulePath );
for ( String module : map . keySet ()) {
for ( String klass : map . get ( module )) {
logger . info ( "Loaded Class: " + klass + " n " );
loadClass ( klass , false , module );
// the loadClass() method is defined below
}
}
//this must be called after all classes are loaded
Scene . v (). loadNecessaryClasses ();
public static SootClass loadClass ( String name , boolean main , String module ) {
SootClass c = ModuleScene . v (). loadClassAndSupport ( name , Optional . of ( module ));
c . setApplicationClass ();
if ( main )
Scene . v (). setMainClass ( c );
return c ;
}
ModuleUtil.module_mode() hilft Ihnen zu überprüfen, ob Sie Module in Soot aktiviert haben. Dies erfolgt basierend darauf, ob der Modulpfad mithilfe der Optionsklasse festgelegt wird.
if ( java < 9 ) { // when you have a target benchmark with Java < 9 and hence no modules
Options . v (). set_prepend_classpath ( true );
Options . v (). set_process_dir ( Arrays . asList ( applicationClassPath (). split ( File . pathSeparator )));
Options . v (). set_soot_classpath ( sootClassPath ());
}
if ( java >= 9 && USE_CLASSPATH ) { // when you have a target benchmark with Java >= 9 and do not want module support
Options . v (). set_soot_classpath ( "VIRTUAL_FS_FOR_JDK" + File . pathSeparator + sootClassPath ());
Options . v (). set_process_dir ( Arrays . asList ( applicationClassPath (). split ( File . pathSeparator )));
}
if ( java >= 9 && USE_MODULEPATH ) { // when you have a target benchmark with Java >= 9 and want module support
Options . v (). set_prepend_classpath ( true );
Options . v (). set_soot_modulepath ( sootClassPath ());
Options . v (). set_process_dir ( Arrays . asList ( applicationClassPath (). split ( File . pathSeparator )));
}
In den obigen Beispielen sollte applicationClassPath() durch den Pfad zu den Anwendungsklassen für die Analyse durch Soot und sootClassPath() durch den Soot-Klassenpfad ersetzt werden.
Um Soot mit Java 1.9 auszuführen, aber einen Klassenpfad zu analysieren, führen Sie wie zuvor Folgendes aus: java -cp soot-trunk.jar soot.Main --process-dir directoryToAnalyse
Wenn Sie den Klassenpfad explizit angeben möchten, führen Sie Folgendes aus: java -cp soot-trunk.jar soot.Main -cp VIRTUAL_FS_FOR_JDK --process-dir directoryToAnalyse
Der Wert VIRTUAL_FS_FOR_JDK
gibt an, dass Soot auch das virtuelle Dateisystem jrt:/
von Java (>9) nach Klassen durchsuchen soll, obwohl Soot nicht im Modulmodus ausgeführt wird.
Um Module und Klassen in Soot mit Java 1.8 zu laden, führen Sie Folgendes aus:
java -cp PATH_TO_JAVA9/jrt-fs.jar:soot-trunk.jar soot.Main -pp -soot-modulepath modules/
Bitte ersetzen Sie PATH_TO_JAVA9
durch den Pfad zu Ihrer lokalen Installation von Java 9. jrt-fs.jar
ist ein integrierter NIO-Dateisystemanbieter für das von Java 9 verwendete jrt://-Dateisystem, das rt.jar
ersetzt.