En el análisis estático de programas , Soot es un marco de manipulación y optimización de código de bytes que consta de lenguajes intermedios para Java . Ha sido desarrollado por el Grupo de Investigación Sable en la Universidad McGill . Actualmente, Soot es mantenido por el Grupo de Ingeniería de Software Seguro en la Universidad de Paderborn . [ 1 ] Soot proporciona cuatro representaciones intermedias para su uso a través de su API para que otros programas de análisis puedan acceder a ellas y desarrollarlas: [ 2 ]
- Baf: una representación cercana al código de bytes .
- Jimple : una versión simplificada del código fuente de Java que tiene un máximo de tres componentes por instrucción. También se utiliza como IR para el bytecode Dalvik de Android con Dexpler. [ 3 ]
- Shimple: una variación SSA de Jimple (similar a GIMPLE ).
- Grimp: una versión agregada de Jimple adecuada para la descompilación y la inspección de código.
La versión actual del software Soot también contiene análisis de programas detallados que se pueden usar directamente, como el análisis de punteros sensible al contexto e independiente del flujo , [ 4 ] el análisis de grafos de llamadas y el análisis de dominación (que responde a la pregunta "¿debe el evento a seguir al evento b ?"). También tiene un descompilador llamado dava.
Soot es software libre disponible bajo la Licencia Pública General Reducida de GNU (LGPL). En 2010, dos artículos de investigación sobre Soot ( Vallée-Rai et al. 1999 y Pominville et al. 2000 ) fueron seleccionados como Artículos de Alto Impacto de la Primera Década de IBM CASCON entre otros 12 artículos de las 425 entradas. [ 5 ]
Jimple
Jimple es una representación intermedia de un programa Java diseñada para ser más fácil de optimizar que el bytecode de Java . Es tipado , tiene una sintaxis concreta y se basa en un código de tres direcciones .
Jimple incluye solo 15 operaciones diferentes, lo que simplifica el análisis de flujo. Por el contrario, el bytecode de Java incluye más de 200 operaciones diferentes . [ 6 ] [ 7 ]
A diferencia del código de bytes de Java, en Jimple las variables locales y de pila tienen un tipo definido, y Jimple es inherentemente seguro en cuanto a tipos.
La conversión a Jimple, o "Jimplificación" (en referencia a "simplificar"), consiste en convertir el código de bytes a código de tres direcciones. La idea detrás de esta conversión, investigada inicialmente por Clark Verbrugge, es asociar una variable a cada posición de la pila. De este modo, las operaciones de pila se convierten en asignaciones que involucran las variables de la pila.
Ejemplo
Considere el siguiente código de bytes, que proviene de [ 8 ].
iload 1 // carga la variable x1 y la agrega a la pila. iload 2 // carga la variable x2 y la agrega a la pila. iadd // extrae dos valores y agrega su suma a la pila. istore 1 // Extrae un valor de la pila y lo almacena en la variable x1
Lo anterior se traduce en el siguiente código de tres direcciones:
pila1 = x1 // carga 1 pila2 = x2 // carga 2 pila1 = pila1 + pila2 // iadd x1 = pila1 // istore 1
En general, el código resultante no tiene una forma de asignación única estática .
Hollín
Soot ha sido reemplazado por el marco SootUp, desarrollado por el Grupo de Ingeniería de Software Seguro de la Universidad de Paderborn . [ 9 ] SootUp es una reimplementación completa de Soot con un diseño novedoso, que se centra más en el análisis estático del programa que en la optimización del código de bytes.
Referencias
- ↑ "Soot - Un marco de optimización de Java" . github.com . Consultado el 16 de enero de 2024 .
- ↑ "Un marco para analizar y transformar aplicaciones Java y Android" . Sable.mcgill.ca . Archivado del original el 28 de diciembre de 2008. Consultado el 10 de agosto de 2016 .
- ↑ Bartel, Alexandre; Klein, Jacques; Le Traon, Yves; Monperrus, Martin (junio de 2012). "Dexpler: Conversión de código de bytes Dalvik de Android a Jimple para análisis estático con Soot" . Actas del Taller Internacional ACM SIGPLAN sobre el Estado del Arte en el análisis de programas Java . págs. 27–38 . arXiv : 1205.3576 . doi : 10.1145/2259051.2259056 . ISBN 978-1-4503-1490-9. Consultado el 12 de mayo de 2026 .
- ↑ "Tutoriales · Wiki de sable/hollín · GitHub" . Sable.mcgill.ca . 12-01-2016 . Consultado el 10-08-2016 .
- ↑ "Artículos de alto impacto de la primera década de CASCON" . Dl.acm.org . Consultado el 10 de agosto de 2016 .
- ^ Vallee-Rai, Raja (1998). "El marco Jimple" . Sable.mcgill.ca .
- ↑ Vallee-Rai, Raja; Hendren, Laurie J. (1998). "Jimple: Simplificando el código de bytes de Java para análisis y transformaciones" . Sable.mcgill.ca .
- ↑ Vallee-Rai 1998 .
- ↑ "Una nueva versión de Soot con una arquitectura completamente renovada" . github.com . Consultado el 16 de enero de 2024 .
Fuentes
- Pominville, Patrice; Qian, Feng; Vallée-Rai, Raja; Hendren, Laurie; Verbrugge, Clark (2000). Un marco para optimizar Java usando atributos .Republicado en CASCON First Decade High Impact Papers . CASCON '10. pp. 225– 241. doi : 10.1145/1925805.1925819 .
- Vallée-Rai, Raja; Co, Phong; Gagnon, Etienne; Hendren, Laurie; Lam, Patrick; Sundaresan, Vijay (1999). "Soot: Un marco de optimización de código de bytes de Java" . Actas de la conferencia de 1999 del Centro de Estudios Avanzados sobre Investigación Colaborativa . CASCON '99.Republicado en CASCON First Decade High Impact Papers . CASCON '10. pp. 214– 224. doi : 10.1145/1925805.1925818 .
Lecturas adicionales
- Lam, Patrick; Bodden, Eric; Lhoták, Ondřej; Hendren, Laurie (2011). "El marco Soot para el análisis de programas Java: una retrospectiva" (PDF) . Taller de infraestructura de compiladores y usuarios de Cetus .
Enlaces externos
- Sitio web oficial
- Publicaciones científicas que citan el hollín (en Google Académico )
- Software libre programado en Java.
- Herramientas de programación informática gratuitas
- Herramientas de análisis estático de programas
- Universidad McGill