En diciembre de 2022, lanzamos oficialmente SootUp, una versión de Soot con una arquitectura completamente revisada, más modular, comprobable, mantenible y utilizable. Consulte esto en caso de que desee iniciar un nuevo proyecto de análisis de programa.
Dado que ha habido cierta confusión: SootUp aún no tiene todas las funciones. Por lo tanto, el "viejo" Soot debe seguir vivo por el momento, especialmente para proyectos que requieren capacidades de instrumentación o soporte sólido de Android. El "viejo" hollín todavía se mantiene hasta que se pueda eliminar de manera segura para un sucesor con funciones completas.
Solicitamos financiación periódicamente para ayudarnos a mantener Soot. Puede ayudarnos enormemente informándonos sobre proyectos que utilizan Soot , tanto comercialmente como como herramientas de investigación.
¡También muchas gracias por apoyar a Soot con una licencia de código abierto de uso gratuito!
... por apoyar el desarrollo de Soot! Amazon Web Services es un patrocinador de oro.
Lea más aquí sobre cómo convertirse en patrocinador por su cuenta.
Intente participar en el desarrollo de vanguardia de Java 9 de Soot.
ModuleScene
de SootSoot es un marco de optimización de Java. Proporciona cuatro representaciones intermedias para analizar y transformar el código de bytes de Java:
Consulte https://soot-oss.github.io/soot para obtener más detalles.
Tenemos documentación sobre Soot en la wiki y también una amplia gama de tutoriales sobre Soot.
Para obtener información detallada, considere también el JavaDoc y la documentación de opciones de Soot.
Actualmente se crea una versión de Soot para cada confirmación en la rama master
. Puede incluir Soot como dependencia a través de Maven, Gradle, SBT, etc. utilizando las siguientes coordenadas:
< dependencies >
< dependency >
< groupId >org.soot-oss</ groupId >
< artifactId >soot</ artifactId >
< version >4.3.0</ version >
</ dependency >
</ dependencies >
También puede obtener versiones anteriores de la rama master
. Puede encontrar una lista completa de compilaciones en Maven Central.
Actualmente se crea una instantánea de hollín para cada confirmación con la rama develop
. Puede incluir Soot como dependencia a través de Maven, Gradle, SBT, etc. utilizando las siguientes coordenadas:
< 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 >
También puede obtener versiones anteriores de la rama develop
. Puede encontrar una lista completa de compilaciones en Maven Central.
Recomendamos usar Soot con Maven. Puede obtener la última versión de Soot directamente. Puede obtener la última versión SNAPSHOT de Soot directamente.
El archivo soot-<RELEASE>-jar-with-dependencies.jar
es un archivo todo en uno que también contiene todas las bibliotecas necesarias.
El archivo soot-<RELEASE>.jar
contiene solo hollín, lo que le permite seleccionar manualmente las dependencias que necesite. Si no quiere preocuparse por las dependencias, le recomendamos utilizar el primero.
Si no puede trabajar con las versiones previas a la compilación y necesita crear Soot usted mismo, consulte la wiki para conocer más pasos.
Soot sigue la convención git-flow. Las versiones y revisiones se mantienen en la rama maestra. El desarrollo ocurre en la rama de desarrollo. Para captar la vanguardia del hollín, echa un vistazo a este último.
Nos complace aceptar mejoras arbitrarias en Soot en forma de solicitudes de extracción de GitHub. Lea nuestras pautas de contribución antes de configurar una solicitud de extracción.
¿Estás utilizando Soot y te gustaría ayudarnos a respaldarlo en el futuro? Entonces apóyanos completando este pequeño formulario web.
De esa forma podrás ayudarnos de dos maneras:
Si desea ejecutar Soot con Java > 8, ya está. Simplemente ejecútelo como de costumbre. Si desea ejecutar Soot con Java 8 pero analizar proyectos Java >8 o viceversa, consulte a continuación.
Para cargar módulos en ModuleScene
de Soot desde 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() le ayuda a comprobar si tiene módulos habilitados en Soot. Esto se hace en función de si la ruta del módulo se establece mediante la clase Opciones.
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 )));
}
En los ejemplos anteriores, applicationClassPath() debe reemplazarse con la ruta a las clases de aplicación para que Soot las analice y sotClassPath() debe reemplazarse con la ruta de clases de Soot.
Para ejecutar Soot usando Java 1.9, pero analizando un classpath, ejecute, como antes: java -cp soot-trunk.jar soot.Main --process-dir directoryToAnalyse
si desea especificar el classpath explícitamente, ejecute: java -cp soot-trunk.jar soot.Main -cp VIRTUAL_FS_FOR_JDK --process-dir directoryToAnalyse
el valor VIRTUAL_FS_FOR_JDK
indica que Soot también debe buscar clases en el sistema de archivos virtual jrt:/
de Java (>9), aunque Soot no se ejecuta en modo módulo.
Para cargar módulos y clases en Soot usando java 1.8 ejecute:
java -cp PATH_TO_JAVA9/jrt-fs.jar:soot-trunk.jar soot.Main -pp -soot-modulepath modules/
Reemplace PATH_TO_JAVA9
con la ruta a su instalación local de java 9. jrt-fs.jar
es un proveedor de sistema de archivos NIO integrado para el sistema de archivos jrt:// que utiliza java 9 y que reemplaza rt.jar
.