ショ和 [Ruptaのドキュメント]が開発中です。
このオープンソースフレームワークであるRuptaは、錆びたmiRで動作する錆のポインター/エイリアス分析をサポートしています。現在、CC'24ペーパー(https://dl.acm.org/doi/10.1145/3640537.3641574)で詳述されているように、Calliteベースのポインター分析を提供しています。
リポジトリをクローンします
ビルドとインストール
2つの異なる方法でRuptaを構築できます。
$ cargo buildこのコマンドはtarget/debugディレクトリに2つのバイナリ、 cargo-ptaとptaを生成します。
Ruptaをcargoに設置することもできます。
$ cargo --locked install --path .これによりcargo fmtなどの他のcargoコマンドと同様に、コマンドcargo ptaを使用して錆プロジェクトでポインター分析を実行できます。
バイナリcargo-ptaを使用して、錆プロジェクトのためにRuptaを実行できます。
$ 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 ptaの代わりにコマンドcargo 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 (Callite-Sensitive)またはander (Andersen)で、 csはデフォルトです。context-depth :Calliteに敏感な分析でコンテキストの深さを設定します。デフォルトは1です。dump-call-graph :コールグラフをドット形式で出力します。dump-pts :ポイントツー分析結果を出力します。dump-mir :すべての到達可能な機能にmiRを出力します。注:Ruptaには、大規模な錆プロジェクトを分析するために、実質的な計算およびメモリリソースが必要です。過度に長い分析時間に遭遇した場合 - 多くの場合、分析中にMain()から到達可能な多くの機能が原因で、追加のメモリ(たとえば、128GB)とより高速なCPUを装備したより強力なコンピューティングプラットフォームにアップグレードします。
PTA_LOG環境変数を設定して、ロギングを有効にします。
$ export PTA_LOG=infolibrustc_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に連絡してください。