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。