️ [Dokumentasi untuk Rupta] sedang dalam pengembangan.
Kerangka kerja open-source ini, rupta, mendukung analisis pointer/alias untuk karat, yang beroperasi di Rust Mir. Saat ini menawarkan analisis pointer berbasis callite, sebagaimana dirinci dalam makalah CC'24 kami (https://dl.acm.org/doi/10.1145/3640537.3641574).
Klon Repositori
Bangun & instal
Anda dapat membangun rupta dengan dua cara berbeda:
$ cargo build Perintah ini menghasilkan dua binari, cargo-pta dan pta , di direktori target/debug .
Anda juga dapat memasang rupta ke dalam cargo :
$ cargo --locked install --path . Ini memungkinkan Anda untuk melakukan analisis pointer pada proyek karat menggunakan cargo pta perintah, mirip dengan perintah cargo lainnya seperti cargo fmt .
Anda dapat menjalankan rupta untuk proyek karat menggunakan cargo-pta biner:
$ cargo-pta pta -- --entry < entry-function-name > --pta-type < pta-type > --context-depth < N > --dump-call-graph < call-graph-path > --dump-pts < pts-path > Anda juga dapat menggunakan cargo pta perintah alih-alih cargo-pta pta jika rupta telah dipasang ke dalam cargo .
Atau, Anda dapat menjalankan rupta untuk satu file menggunakan pta biner:
$ 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 >Opsi:
<entry-function-name> : Menentukan fungsi entri. Default adalah main() .<pta-type> : Menentukan jenis analisis pointer. Opsi adalah cs (Callsite-sensitive) atau ander (Andersen), dengan cs sebagai default.context-depth : Menetapkan kedalaman konteks dalam analisis callsite-sensitive. Default adalah 1.dump-call-graph : output grafik panggilan dalam format dot.dump-pts : Output Hasil Point-to Analysis.dump-mir : output mir untuk semua fungsi yang dapat dijangkau.Catatan: Rupta membutuhkan sumber daya komputasi dan memori yang substansial untuk menganalisis proyek karat besar. Jika Anda menghadapi waktu analisis yang terlalu lama - seringkali karena banyak fungsi yang dapat dijangkau dari main () selama analisis - mempertimbangkan peningkatan ke platform komputasi yang lebih kuat yang dilengkapi dengan memori tambahan (misalnya, 128GB) dan CPU yang lebih cepat.
Atur variabel lingkungan PTA_LOG untuk mengaktifkan logging:
$ export PTA_LOG=info Jika Anda menemukan kesalahan yang memuat perpustakaan bersama, seperti librustc_driver.so , coba setel:
$ export LD_LIBRARY_PATH= $( rustc --print sysroot ) /lib: $LD_LIBRARY_PATH Lihat lisensi
Kami telah merilis kode sumber Rupta untuk mendukung komunitas riset yang lebih luas dan memfasilitasi kemajuan di lapangan. Kami berharap ini berharga untuk proyek Anda. Harap puji kontribusi kami dengan mengutip makalah berikut dalam publikasi atau presentasi apa pun yang memanfaatkan alat kami:
@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}
}
Setiap komentar, kontribusi, dan kolaborasi dipersilakan. Silakan hubungi penulis Wei Li atau Jingling Xue jika Anda memiliki pertanyaan.