En décembre 2022, nous avons officiellement lancé SootUp, une version de Soot avec une architecture entièrement remaniée, plus modulaire, testable, maintenable et utilisable. Veuillez vérifier ceci au cas où vous souhaiteriez démarrer un nouveau projet d'analyse de programme.
Puisqu'il y a eu une certaine confusion : SootUp n'est pas encore complet en fonctionnalités. Par conséquent, "l'ancien" Soot doit perdurer pour le moment, en particulier pour les projets qui nécessitent des capacités d'instrumentation ou une prise en charge robuste d'Android. L'"ancien" Soot est toujours conservé jusqu'à ce qu'il puisse être abandonné en toute sécurité pour un successeur complet.
Nous sollicitons régulièrement des financements pour nous aider à entretenir Soot. Vous pouvez nous aider énormément en nous faisant part de projets qui utilisent la suie , à la fois commercialement ou sous forme d'outils de recherche.
Un grand merci également à pour avoir soutenu Soot avec une licence open source gratuite !
... pour avoir soutenu le développement ultérieur de Soot! Amazon Web Services est un sponsor Or.
Apprenez-en davantage ici sur la façon de devenir sponsor par vous-même.
Essayez de vous impliquer dans le développement de pointe de Java 9 de Soot.
ModuleScene
de SootSoot est un framework d'optimisation Java. Il fournit quatre représentations intermédiaires pour analyser et transformer le bytecode Java :
Voir https://soot-oss.github.io/soot pour plus de détails.
Nous avons de la documentation sur la suie dans le wiki ainsi qu'une large gamme de tutoriels sur la suie.
Pour des informations détaillées, veuillez également consulter la documentation JavaDoc et Options de Soot.
Une version Soot est actuellement construite pour chaque commit dans la branche master
. Vous pouvez inclure Soot comme dépendance via Maven, Gradle, SBT, etc. en utilisant les coordonnées suivantes :
< dependencies >
< dependency >
< groupId >org.soot-oss</ groupId >
< artifactId >soot</ artifactId >
< version >4.3.0</ version >
</ dependency >
</ dependencies >
Vous pouvez également obtenir des versions plus anciennes de la branche master
. Une liste complète des builds est disponible sur Maven Central.
Un SNAPSHOT de suie est actuellement construit pour chaque commit dans la branche develop
. Vous pouvez inclure Soot comme dépendance via Maven, Gradle, SBT, etc. en utilisant les coordonnées suivantes :
< 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 >
Vous pouvez également obtenir des versions plus anciennes de la branche develop
. Une liste complète des builds est disponible sur Maven Central.
Nous vous recommandons d'utiliser Soot avec Maven. Vous pouvez obtenir directement la dernière version de Soot. Vous pouvez obtenir directement la dernière version SNAPSHOT de Soot.
Le fichier soot-<RELEASE>-jar-with-dependencies.jar
est un fichier tout-en-un qui contient également toutes les bibliothèques requises.
Le fichier soot-<RELEASE>.jar
contient uniquement de la suie, vous permettant de sélectionner manuellement les dépendances selon vos besoins. Si vous ne voulez pas vous soucier des dépendances, nous vous recommandons d'utiliser le premier.
Si vous ne pouvez pas travailler avec les versions préliminaires et devez créer Soot vous-même, veuillez consulter le wiki pour connaître les étapes supplémentaires.
Soot suit la convention git-flow. Les versions et les correctifs sont conservés dans la branche master. Le développement se produit dans la branche de développement. Pour profiter de la pointe de la suie, consultez cette dernière.
Nous sommes heureux d'accepter des améliorations arbitraires de Soot sous la forme de demandes d'extraction GitHub. Veuillez lire nos directives de contribution avant de créer une pull request.
Vous utilisez Soot et souhaitez nous aider à le prendre en charge à l'avenir ? Alors s'il vous plaît, soutenez-nous en remplissant ce petit formulaire Web.
Vous pouvez ainsi nous aider de deux manières :
Si vous souhaitez exécuter Soot avec Java > 8, vous avez terminé. Exécutez-le simplement comme d’habitude. Si vous souhaitez exécuter Soot avec Java 8 mais analyser des projets Java >8 ou vice versa, voir ci-dessous.
Pour charger des modules dans ModuleScene
de Soot à partir de 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() vous aide à vérifier si des modules sont activés dans Soot. Ceci est effectué selon que le chemin du module est défini ou non à l'aide de la classe Options.
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 )));
}
Dans les exemples ci-dessus, applicationClassPath() doit être remplacé par le chemin d'accès aux classes d'application pour analyse par Soot et sootClassPath() doit être remplacé par le chemin de classe Soot.
Pour exécuter Soot en utilisant Java 1.9, mais en analysant un chemin de classe, comme avant : java -cp soot-trunk.jar soot.Main --process-dir directoryToAnalyse
si vous souhaitez spécifier explicitement le chemin de classe, exécutez : java -cp soot-trunk.jar soot.Main -cp VIRTUAL_FS_FOR_JDK --process-dir directoryToAnalyse
la valeur VIRTUAL_FS_FOR_JDK
indique que Soot doit également rechercher des classes dans le système de fichiers virtuel Java (>9) jrt:/
, bien que Soot ne soit pas exécuté en mode module.
Pour charger des modules et des classes dans Soot à l'aide de Java 1.8, exécutez :
java -cp PATH_TO_JAVA9/jrt-fs.jar:soot-trunk.jar soot.Main -pp -soot-modulepath modules/
Veuillez remplacer PATH_TO_JAVA9
par le chemin d'accès à votre installation locale de Java 9. Le jrt-fs.jar
est un fournisseur NIO FileSystem intégré pour le système de fichiers jrt:// que Java 9 utilise et qui remplace rt.jar
.