️ [La documentación para Rupta] está en desarrollo.
Este marco de código abierto, Rupta, admite el análisis de puntero/alias para Rust, que funciona en Rust Mir. Actualmente ofrece un análisis de puntero basado en el sitio, como se detalla en nuestro documento CC'24 (https://dl.acm.org/doi/10.1145/3640537.3641574).
Clonar el repositorio
Construir e instalar
Puedes construir rupta de dos maneras diferentes:
$ cargo build Este comando genera dos binarios, cargo-pta y pta , en el directorio target/debug .
También puede instalar rupta en cargo :
$ cargo --locked install --path . Esto le permite realizar un análisis de puntero en un proyecto de óxido utilizando el comando cargo pta , similar a otros comandos cargo como cargo fmt .
Puede ejecutar Rupta para un proyecto de óxido utilizando el binary cargo-pta :
$ cargo-pta pta -- --entry < entry-function-name > --pta-type < pta-type > --context-depth < N > --dump-call-graph < call-graph-path > --dump-pts < pts-path > También puede usar el comando cargo pta en lugar de cargo-pta pta si se ha instalado Rupta en cargo .
Alternativamente, puede ejecutar Rupta para un solo archivo utilizando el pta binario:
$ pta < path-to-file > --entry-func < entry-function-name > --pta-type < pta-type > --context-depth < N > --dump-call-graph < call-graph-path > --dump-pts < pts-path >Opciones:
<entry-function-name> : Especifica la función de entrada. El valor predeterminado es main() .<pta-type> : determina el tipo de análisis de puntero. Las opciones son cs (llamadas sensibles al sitio) o ander (Andersen), con cs como el valor predeterminado.context-depth : establece la profundidad de los contextos en el análisis sensible al sitio de llamadas. El valor predeterminado es 1.dump-call-graph : emite el gráfico de llamadas en formato DOT.dump-pts : genera los resultados del análisis de puntos a.dump-mir : genera el MIR para todas las funciones accesibles.Nota: Rupta requiere recursos sustanciales computacionales y de memoria para analizar grandes proyectos de óxido. Si encuentra tiempos de análisis excesivamente largos, a menudo debido a muchas funciones accesibles desde Main () durante el análisis, considere la actualización a una plataforma informática más potente equipada con memoria adicional (por ejemplo, 128 GB) y CPU más rápidas.
Establezca la variable de entorno PTA_LOG para habilitar el registro:
$ export PTA_LOG=info Si encuentra errores que cargan bibliotecas compartidas, como librustc_driver.so , intente configurar:
$ export LD_LIBRARY_PATH= $( rustc --print sysroot ) /lib: $LD_LIBRARY_PATH Ver licencia
Hemos publicado el código fuente de Rupta para apoyar a la comunidad de investigación más amplia y facilitar los avances en el campo. Esperamos que sea valioso para sus proyectos. Acredite nuestra contribución citando el siguiente documento en cualquier publicación o presentación que utilice nuestra herramienta:
@inproceedings{li2024context,
title={A Context-Sensitive Pointer Analysis Framework for Rust and Its Application to Call Graph Construction},
author={Li, Wei and He, Dongjie and Gui, Yujiang and Chen, Wenguang and Xue, Jingling},
booktitle={Proceedings of the 33rd ACM SIGPLAN International Conference on Compiler Construction},
pages={60--72},
year={2024},
publisher={ACM},
doi = {10.1145/3640537.3641574}
}
Cualquier comentario, contribuciones y colaboraciones es bienvenido. Póngase en contacto con los autores Wei Li o Jingling Xue si tiene alguna pregunta.