Euen [Dokumentation für Rupta] befindet sich in der Entwicklung.
Dieser Open-Source-Framework, Rupta, unterstützt die Zeiger-/Alias-Analyse für Rost und arbeitet auf Rust Mir. Derzeit bietet es Callsit-basierte Zeigeranalyse, wie in unserem CC'24-Papier aufgeführt (https://dl.acm.org/doi/10.1145/3640537.3641574).
Klonen Sie das Repository
Bauen und installieren
Sie können Brupta auf zwei verschiedene Arten bauen:
$ cargo build Dieser Befehl generiert im target/debug -Verzeichnis zwei Binärdateien, cargo-pta und pta .
Sie können auch Rupta in cargo installieren:
$ cargo --locked install --path . Auf diese Weise können Sie die Zeigeranalyse in einem Rust -Projekt mit der cargo pta durchführen, ähnlich wie bei anderen cargo wie cargo fmt .
Sie können Brupta für ein Rust-Projekt mit der binären cargo-pta durchführen:
$ cargo-pta pta -- --entry < entry-function-name > --pta-type < pta-type > --context-depth < N > --dump-call-graph < call-graph-path > --dump-pts < pts-path > Sie können auch die Befehlsfracht cargo pta anstelle von cargo-pta pta verwenden, wenn Rupta in cargo eingebaut wurde.
Alternativ können Sie Rupta für eine einzelne Datei mit dem binären pta ausführen:
$ 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 >Optionen:
<entry-function-name> : Gibt die Eingangsfunktion an. Standard ist main() .<pta-type> : Bestimmt die Art der Zeigeranalyse. Optionen sind cs (CallSite-sensitiv) oder ander (Andersen), wobei cs als Standardeinstellung.context-depth : Legt die Tiefe der Kontexte in der Callsit-sensitiven Analyse fest. Standard ist 1.dump-call-graph : Aus den Anrufdiagramm im DOT-Format ausgibt.dump-pts : Ausgibt die Punkte-zu-Analyse-Ergebnisse.dump-mir : gibt die miR für alle erreichbaren Funktionen aus.HINWEIS: BUPTA erfordert erhebliche Rechen- und Speicherressourcen, um große Rostprojekte zu analysieren. Wenn Sie übermäßig lange Analysezeiten begegnen - häufig aufgrund vieler Funktionen, die von Main () während der Analyse erreichbar sind -, müssen Sie auf eine leistungsstärkere Computerplattform mit zusätzlichem Speicher (z. B. 128 GB) und schnellerem CPUs aufgerüstet werden.
Legen Sie die Variable der PTA_LOG -Umgebung ein, um die Protokollierung zu aktivieren:
$ export PTA_LOG=info Wenn Sie auf Fehler stoßen, um gemeinsam genutzte Bibliotheken wie librustc_driver.so zu laden.
$ export LD_LIBRARY_PATH= $( rustc --print sysroot ) /lib: $LD_LIBRARY_PATH Siehe Lizenz
Wir haben den Ropta -Quellcode veröffentlicht, um die breitere Forschungsgemeinschaft zu unterstützen und die Fortschritte vor Ort zu erleichtern. Wir hoffen, dass es für Ihre Projekte wertvoll ist. Bitte schreiben Sie unseren Beitrag zu, indem Sie das folgende Papier in Veröffentlichungen oder Präsentationen zitieren, die unser Tool verwenden:
@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}
}
Kommentare, Beiträge und Kooperationen sind willkommen. Bitte wenden Sie sich an die Autoren Wei oder Jingling Xue, wenn Sie Fragen haben.