rupta
1.0.0
配x [Rupta的文檔]正在開發中。
這個開源框架Rupta支持在Rust Mir上操作Rust的指針/別名分析。它目前提供了基於呼叫的指針分析,如我們的CC'24論文(https://dl.acm.org/doi/10.1145/3640537.3641574)所述。
克隆存儲庫
構建和安裝
您可以通過兩種不同的方式建造Rupta:
$ cargo build該命令在target/debug目錄中生成兩個二進製文件, cargo-pta和pta 。
您也可以將Rupta安裝到cargo中:
$ cargo --locked install --path .這使您可以使用命令cargo pta對RUST項目進行指針分析,類似於其他cargo命令,例如cargo fmt 。
您可以使用二進制cargo-pta運行Rupupta進行生鏽項目:
$ cargo-pta pta -- --entry < entry-function-name > --pta-type < pta-type > --context-depth < N > --dump-call-graph < call-graph-path > --dump-pts < pts-path >如果將Rupta安裝到cargo中,您也可以使用命令cargo pta代替cargo-pta pta 。
另外,您可以使用二進制pta運行單個文件的rupta:
$ 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 >選項:
<entry-function-name> :指定輸入功能。默認值是main() 。<pta-type> :確定指針分析的類型。選項是cs (呼叫敏感性)或ander (Andersen),默認為cs 。context-depth :在呼喚敏感分析中設置上下文的深度。默認值為1。dump-call-graph :以點格式輸出呼叫圖。dump-pts :輸出點對點分析結果。dump-mir :輸出所有可觸及功能的mir。注意:Rupta需要大量的計算和內存資源來分析大型生鏽項目。如果您遇到過長的分析時間(通常是由於分析過程中的Main()功能可達到的許多功能,請考慮升級到一個更強大的計算平台,該平台配備了其他內存(例如,128GB)和更快的CPU。
設置PTA_LOG環境變量以啟用記錄:
$ export PTA_LOG=info如果遇到錯誤加載共享庫的錯誤,例如librustc_driver.so ,請嘗試設置:
$ export LD_LIBRARY_PATH= $( rustc --print sysroot ) /lib: $LD_LIBRARY_PATH 請參閱許可證
我們發布了Rupta源代碼,以支持更廣泛的研究社區並促進該領域的進步。我們希望它對您的項目很有價值。請在使用我們工具的任何出版物或演示文稿中引用以下論文來歸功於我們的貢獻:
@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}
}
歡迎任何評論,貢獻和合作。如果您有任何疑問,請聯繫作者Wei Li或Jingling Xue。