2403版
PhASAR 主要由 Heinz Nixdorf Institute(帕德博恩大学)和 Fraunhofer 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 保持非常适合静态分析领域最先进的研究以及生产性使用的状态,我们必须做出突破性的改变。请参阅重大更改,了解有关最近发生的损坏以及如何迁移的详细信息。
我们的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
谢谢。并享受这个项目的乐趣。