2403版
PhASAR 主要由 Heinz Nixdorf Institute(帕德博恩大學)和 Fraunhofer IEM 的安全軟體工程小組開發和維護。
PhASAR 的主要開發人員有:Fabian Schiebel (@fabianbs96)([email protected])、Martin Mory (@MMory)([email protected])、Philipp Dominik Schubert (@pdschubert)(philippp . [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 保持非常適合靜態分析領域最先進的研究以及生產性使用的狀態,我們必須做出突破性的改變。請參閱重大更改,以了解有關最近發生的損壞以及如何遷移的詳細資訊。
我們的Wiki中有一些有關 PhASAR 的文檔。您可能想先閱讀此自述文件。
請同時查看 PhASAR 的專案目錄並注意專案目錄examples/
以及自訂工具tools/example-tool/myphasartool.cpp
。
建議您自己編譯 PhASAR,以獲得完整的 C++ 體驗並完全控制建置模式。但是,您可能還想嘗試 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 編譯後,可以在 build/tools 目錄中找到以下兩個二進位檔案:
phasar-cli
- PhASAR 命令列工具(以前稱為phasar-llvm
),提供對 PhASAR 中已實施的分析的存取。如果您不想在 PhASAR 之上建立自己的工具,請使用此工具。myphasartool
- 一個範例工具,展示如何在 PhASAR 之上建立工具請注意編譯過程中是否出現錯誤。
當使用 CMake 編譯 PhASAR 時,可以使用下列可選參數:
參數:類型 | 影響 |
---|---|
BUILD_SHARED_LIBS :布爾 | 建立共享庫—不再推薦。您可能想要使用 PHASAR_BUILD_DYNLIB 代替(預設為 OFF) |
PHASAR_BUILD_DYNLIB : BOOL | 建立一個胖共享庫(預設為關閉) |
CMAKE_BUILD_TYPE :字串 | 在「調試」、「RelWithDebInfo」或「發布」模式下建構 PhASAR(預設為「調試」) |
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 :布爾 | 建置 PhASAR 文件(預設為關閉) |
PHASAR_BUILD_UNITTESTS : BOOL | 建構 PhASAR 單元測試(預設為開啟) |
PHASAR_BUILD_IR :布爾 | 建置 PhASAR IR(執行單元測試所需)(預設為開啟) |
PHASAR_BUILD_OPENSSL_TS_UNITTESTS : BOOL | 建置需要 OpenSSL 的 PhASAR 單元測試(預設為關閉) |
PHASAR_ENABLE_PAMM :字串 | 啟用效能測量機制(“Off”、“Core”或“Full”,預設為“Off”) |
PHASAR_ENABLE_PIC :布爾 | 建構與位置無關的程式碼(預設為開) |
PHASAR_ENABLE_WARNINGS :布爾 | 啟用編譯器警告(預設為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
您可以在tools/phasar-cli
下的建置樹中找到phasar-cli
工具。
如果您獲得除分段錯誤或異常終止程序之外的輸出,則一切都會按預期進行。
由於 MacOS 和 C++ 處理的不幸更新,尤其是在較新的 M1 處理器上,我們無法支援 Mac 上的本機開發。目前在Mac上開發PhASAR最簡單的解決方案是使用dockers開發環境。按照其文件中的描述複製此儲存庫。之後,您必須透過執行docker exec -it -u root <container name> /bin/bash
以root 使用者身分手動登入一次,以完成本自述文件中所述的其餘建置程序(安裝子模組,執行bootstrap.txt )。現在,您可以將 docker 容器附加到 VS Code 或任何其他支援遠端開發的 IDE。
可以使用安裝程式腳本安裝 PhASAR,如下所述。但是,您不需要安裝 PhASAR 即可使用它。
下面,我們將給出一個完整的範例,說明如何使用 Ubuntu 或類別 Unix 系統安裝 PhASAR。
因此,我們提供了一個安裝腳本。要安裝 PhASAR,只需導航到 PhASAR 的頂級目錄並使用以下命令:
./bootstrap.sh --install
引導腳本可能會要求超級使用者權限。
完畢!
如果你已經建構了 phasar,你可以呼叫
sudo ninja install
我們建議使用 phasar 作為cmake
的函式庫。
如果您已經安裝了 phasar,Use-PhASAR-as-a-library 可能是個好的開始。
否則,我們建議將 PhASAR 作為 git 子模組新增到您的儲存庫中。在這種情況下,只需在CMakeLists.txt
中add_subdirectory
phasar 子模組目錄。
假設您已在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 維基頁面。
您正在使用 PhASAR 並希望將來為我們提供幫助?那麼請填寫此網頁表格來支持我們。
透過向我們提供回饋,您可以幫助我們決定 PhASAR 未來的發展方向,並為我們提供有關用戶群的線索。非常感謝!
非常歡迎您為 PhASAR 專案做出貢獻。請確保安裝我們的預提交掛鉤,以確保您的提交遵守 PhASAR 專案最重要的編碼規則。有關更多詳細信息,請參閱編碼約定和向 PhASAR 做出貢獻。
若要安裝預先提交掛鉤,請在 PhASAR 的根目錄中執行以下命令:
pip install pre-commit
pre-commit install
謝謝。並享受這個項目的樂趣。