️ [La documentation pour RUPTA] est en cours de développement.
Ce cadre open source, Rupta, prend en charge l'analyse du pointeur / alias pour la rouille, opérant sur Rust Mir. Il propose actuellement une analyse de pointeur basée sur Calsite, comme détaillé dans notre article CC'24 (https://dl.acm.org/doi/10.1145/3640537.3641574).
Cloner le référentiel
Construire et installer
Vous pouvez construire Rupta de deux manières différentes:
$ cargo build Cette commande génère deux binaires, cargo-pta et pta , dans le répertoire target/debug .
Vous pouvez également installer Rupta dans cargo :
$ cargo --locked install --path . Cela vous permet d'effectuer une analyse du pointeur sur un projet de rouille en utilisant la Command cargo pta , similaire à d'autres commandes cargo telles que cargo fmt .
Vous pouvez exécuter Rupta pour un projet de rouille en utilisant le cargo-pta binaire:
$ cargo-pta pta -- --entry < entry-function-name > --pta-type < pta-type > --context-depth < N > --dump-call-graph < call-graph-path > --dump-pts < pts-path > Vous pouvez également utiliser la Command cargo pta au lieu de cargo-pta pta si Rupta a été installé dans cargo .
Alternativement, vous pouvez exécuter RUPTA pour un seul fichier en utilisant le pta binaire:
$ 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 >Options:
<entry-function-name> : Spécifie la fonction d'entrée. La valeur par défaut est main() .<pta-type> : détermine le type d'analyse du pointeur. Les options sont cs (SAPSITE-SENSITIVE) ou ander (Andersen), avec cs comme défaut.context-depth : Définit la profondeur des contextes dans l'analyse sensible à l'appel. La valeur par défaut est 1.dump-call-graph : sortit le graphique d'appel au format DOT.dump-pts : Sorte les résultats de l'analyse des points-à-point.dump-mir : sortit le MIR pour toutes les fonctions accessibles.Remarque: Rupta nécessite des ressources de calcul et de mémoire substantielles pour analyser de grands projets de rouille. Si vous rencontrez des temps d'analyse excessivement longs - souvent en raison de nombreuses fonctions accessibles à partir de Main () pendant l'analyse - considérez la mise à niveau vers une plate-forme informatique plus puissante équipée d'une mémoire supplémentaire (par exemple, 128 Go) et des processeurs plus rapides.
Définissez la variable d'environnement PTA_LOG pour activer la journalisation:
$ export PTA_LOG=info Si vous rencontrez des erreurs de chargement de bibliothèques partagées, telles que librustc_driver.so , essayez de se définir:
$ export LD_LIBRARY_PATH= $( rustc --print sysroot ) /lib: $LD_LIBRARY_PATH Voir la licence
Nous avons publié le code source RUPTA pour soutenir la communauté de recherche plus large et faciliter les progrès dans le domaine. Nous espérons que cela est précieux pour vos projets. Veuillez créditer notre contribution en citant l'article suivant dans toutes les publications ou présentations qui utilisent notre outil:
@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}
}
Tous les commentaires, contributions et collaborations sont les bienvenus. Veuillez contacter les auteurs Wei Li ou Jingling Xue si vous avez des questions.