バージョン2403
PhASAR は主に、ハインツ ニクスドルフ研究所 (パーダーボルン大学) のセキュア ソフトウェア エンジニアリング グループとフラウンホーファー IEM によって開発および保守されています。
PhASAR の主な開発者は、Fabian Schiebel (@fabianbs96)([email protected])、Martin Mory (@MMory)([email protected])、Philipp Dominik Schubert (@pdschubert)(philipp. [email protected]) など。
PhASAR には C++-17 が必要です。
ただし、C++20 モードでのビルドは実験的な機能としてサポートされています。 cmake 変数CMAKE_CXX_STANDARD
を20
に設定すると、これを有効にすることができます。 phasar は現在 C++-20 の機能を使用していませんが (#ifdef ボーダーの背後にあるいくつかのconcept
を除く)、phasar をライブラリとしてのみ使用するクライアント アプリケーションでは、C++20 を早期に使用する必要があるかもしれません。
PhASAR は現在、LLVM-14.0.* をサポートするように設定されています。
PhASAR は、C++ で書かれた LLVM ベースの静的分析フレームワークです。これにより、ユーザーは任意のデータフロー問題を指定でき、指定された LLVM IR ターゲット コード上で完全に自動化された方法で解決されます。ポイント情報やコールグラフなどの計算はフレームワークによって行われるため、重要なことに集中できます。
PhASAR を静的解析における最先端の研究や生産的な使用に適した状態に維持するには、大幅な変更を加える必要があります。最近問題が発生した内容と移行方法の詳細については、「重大な変更」を参照してください。
PhASAR に関するドキュメントがWikiにあります。おそらく最初にこの README をお読みになることをお勧めします。
また、PhASAR のプロジェクト ディレクトリを見て、プロジェクト ディレクトリexamples/
とカスタム ツールtools/example-tool/myphasartool.cpp
に注目してください。
完全な C++ エクスペリエンスを取得し、ビルド モードを完全に制御するには、PhASAR を自分でコンパイルすることをお勧めします。ただし、事前に構築されたバージョンの PhASAR または Docker コンテナのいずれかを試してみることもできます。
システム上の最初の PhASAR ビルドのショートカットとして、ブートストラップ スクリプトを使用できます。スクリプトが正しく動作するには、Python がインストールされている必要があることに注意してください。
./bootstrap.sh
注: PhASAR 内で変更を行いたい場合は、デバッグ モードでビルドすることをお勧めします。
./bootstrap.sh -DCMAKE_BUILD_TYPE=Debug
ブートストラップ スクリプトは、(依存関係をインストールするために) スーパーユーザーの権限を要求する場合があります。ただし、スクリプト全体をsudo
で開始することはお勧めできません。
以降のビルドについては、「PhASAR のコンパイル」を参照してください。
C および C++ コンパイラのシステム変数を clang に設定します。
export CC=/usr/local/bin/clang
export CXX=/usr/local/bin/clang++
システムに応じてパスを調整する必要がある場合があります。 Github から PhASAR をクローンした場合は、ビルドする前に PhASAR のサブモジュールを初期化する必要があります。
git submodule update --init
PhASAR を圧縮リリース (.zip または .tar.gz など) としてダウンロードした場合は、必要なサブモジュールのクローンを手動で作成するinit-submodules-release.sh
スクリプトを使用できます。
utils/init-submodules-release.sh
PhASAR ディレクトリに移動します。次のコマンドが仕事を実行し、PhASAR フレームワークをコンパイルします。
mkdir build
cd build/
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ..
ninja -j $( nproc ) # or use a different number of cores to compile it
sudo ninja install # only if you wish to install PhASAR system wide
bootstrap.sh
スクリプトを使用して PhASAR をインストールすると、上記の手順はすでに完了しています。 PhASAR を修正して再コンパイルする場合は、これらを参考にしてください。
cmake を使用してコンパイルすると、次の 2 つのバイナリが build/tools ディレクトリに見つかります。
phasar-cli
- PhASAR 内に既に実装されている分析へのアクセスを提供する PhASAR コマンドライン ツール (以前はphasar-llvm
と呼ばれていました)。 PhASAR 上に独自のツールを構築したくない場合は、これを使用してください。myphasartool
- PhASAR 上にツールを構築する方法を示すツール例コンパイル中にエラーが発生しないか注意して確認してください。
CMake を使用して PhASAR をコンパイルする場合、次のオプションのパラメーターを使用できます。
パラメータ: タイプ | 効果 |
---|---|
BUILD_SHARED_LIBS : BOOL | 共有ライブラリを構築する -- もう推奨されません。代わりに PHASAR_BUILD_DYNLIB を使用することもできます (デフォルトは OFF)。 |
PHASAR_BUILD_DYNLIB : BOOL | ファット共有ライブラリを 1 つ構築します (デフォルトは OFF) |
CMAKE_BUILD_TYPE : STRING | 「Debug」、「RelWithDebInfo」、または「Release」モードで PhASAR をビルドします (デフォルトは「Debug」) |
CMAKE_INSTALL_PREFIX : パス | 「ninja install」が呼び出された場合、または「install」ターゲットがビルドされた場合に PhASAR がインストールされるパス (デフォルトは /usr/local/phasar) |
PHASAR_CUSTOM_CONFIG_INSTALL_DIR : パス | 設定すると、PhASAR の構成ファイルがインストールされるディレクトリをカスタマイズします (デフォルトは /usr/local/.phasar-config)。 |
PHASAR_ENABLE_DYNAMIC_LOG : BOOL | 実行時にロガーのオンとオフを切り替えられるようにします (デフォルトはオン) |
PHASAR_BUILD_DOC : BOOL | PhASAR ドキュメントのビルド (デフォルトはオフ) |
PHASAR_BUILD_UNITTESTS : BOOL | PhASAR 単体テストを構築する (デフォルトは ON) |
PHASAR_BUILD_IR : BOOL | PhASAR IR のビルド (単体テストの実行に必要) (デフォルトは ON) |
PHASAR_BUILD_OPENSSL_TS_UNITTESTS : BOOL | OpenSSL を必要とする PhASAR 単体テストを構築する (デフォルトはオフ) |
PHASAR_ENABLE_PAMM : STRING | パフォーマンス測定メカニズムを有効にします (「オフ」、「コア」、または「フル」、デフォルトはオフ) |
PHASAR_ENABLE_PIC : BOOL | 位置に依存しないコードを構築 (デフォルトは ON) |
PHASAR_ENABLE_WARNINGS : BOOL | コンパイラ警告を有効にする (デフォルトは ON) |
CMAKE_CXX_STANDARD : INT | C++17 または C++20 モードで phasar をビルドします (デフォルトは 17) |
これらのパラメータは直接使用することも、インストーラ スクリプトbootstrap.sh
変更することもできます。
C++ の長いコンパイル時間は常に苦痛です。上で示したように、cmake を使用するとコンパイルを簡単に並列実行できるため、コンパイル時間が短縮されます。ぜひ活用してください!
すべてが期待どおりに動作するかどうかをテストするには、次のコマンドを実行してください。
$ phasar-cli -m test/llvm_test_code/basic/module_cpp.ll -D ifds-solvertest
phasar-cli
ツールはtools/phasar-cli
の下のビルド ツリーにあります。
セグメンテーション違反またはプログラムを異常終了させる例外以外の出力が得られた場合は、すべてが期待どおりに動作します。
MacOS の残念なアップデートと、特に新しい M1 プロセッサでの C++ の処理のため、Mac でのネイティブ開発をサポートできません。現時点で Mac 上で PhASAR を開発する最も簡単な解決策は、Dockers 開発環境を使用することです。ドキュメントの説明に従って、このリポジトリのクローンを作成します。その後、 docker exec -it -u root <container name> /bin/bash
実行して root ユーザーとして手動でログインし、この Readme に記載されている残りのビルド プロセス (サブモジュールのインストール、ブートストラップの実行) を完了する必要があります。し、...)。これで、リモート開発をサポートする VS Code またはその他の IDE に Docker コンテナーをアタッチするだけで済みます。
PhASAR は、以下で説明するインストーラー スクリプトを使用してインストールできます。ただし、PhASAR を使用するためにインストールする必要はありません。
以下では、Ubuntu または Unix 系システムを使用して PhASAR をインストールする方法の完全な例を示したいと思います。
そのため、インストール スクリプトを提供します。 PhASAR をインストールするには、PhASAR の最上位ディレクトリに移動し、次のコマンドを使用するだけです。
./bootstrap.sh --install
ブートストラップ スクリプトはスーパーユーザーの権限を要求する場合があります。
終わり!
すでにphasarを構築している場合は、単に呼び出すことができます
sudo ninja install
cmake
のライブラリとして phasar を使用することをお勧めします。
すでに phasar をインストールしている場合は、Use-PhASAR-as-a-library から始めるとよいでしょう。
それ以外の場合は、PhASAR を git サブモジュールとしてリポジトリに追加することをお勧めします。この場合、 CMakeLists.txt
内の phasar サブモジュール ディレクトリにadd_subdirectory
だけです。
external/phasar
で phasar をチェックアウトしていると仮定すると、phasar 関連の cmake コマンドは次のようになります。
add_subdirectory (external/phasar EXCLUDE_FROM_ALL ) # Build phasar with your tool
...
target_link_libraries (yourphasartool
...
phasar # Make your tool link against phasar
)
PhASAR の使用状況によっては、ビルドに LLVM を追加する必要がある場合もあります。
詳細については、PhASAR wiki ページを参照してください。
PhASAR を使用していて、将来的に私たちを助けたいと思っていますか?それでは、この Web フォームにご記入の上、サポートをお願いいたします。
フィードバックをお寄せいただくことで、PhASAR が将来どのような方向に歩むべきかを決定し、ユーザー ベースに関するヒントを得ることができます。どうもありがとうございます!
PhASAR プロジェクトへの貢献を大歓迎します。コミットが PhASAR プロジェクトの最も重要なコーディング ルールに確実に準拠するようにするためのプリコミット フックを必ずインストールしてください。詳細については、「コーディング規約と PhASAR への貢献」を参照してください。
コミット前フックをインストールするには、PhASAR のルート ディレクトリで次のコマンドを実行してください。
pip install pre-commit
pre-commit install
ありがとう。そしてプロジェクトを楽しんでください。