Версия 2403
PhASAR в основном разрабатывается и поддерживается группой Secure Software Engineering Group Института Хайнца Никсдорфа (Университет Падерборна) и Fraunhofer IEM.
Ведущими разработчиками PhASAR являются: Фабиан Шибель (@fabianbs96)([email protected]), Мартин Мори (@MMory)([email protected]), Филипп Доминик Шуберт (@pdschubert)(philipp. [email protected]) и другие.
PhASAR требует C++-17.
Однако сборка в режиме C++20 поддерживается в качестве экспериментальной функции. Вы можете включить эту настройку для переменной cmake CMAKE_CXX_STANDARD
равным 20
. Хотя phasar в настоящее время не использует возможности C++-20 (за исключением некоторых concept
за рамкой #ifdef), ваше клиентское приложение, которое использует phasar только в качестве библиотеки, может захотеть использовать C++20 раньше.
PhASAR в настоящее время настроен для поддержки LLVM-14.0.*
PhASAR — это платформа статического анализа на основе LLVM, написанная на C++. Он позволяет пользователям указывать произвольные проблемы с потоком данных, которые затем решаются полностью автоматически с использованием указанного целевого кода LLVM IR. Вычисление информации о точках, графа(ов) вызовов и т. д. выполняется платформой, поэтому вы можете сосредоточиться на том, что важно.
Чтобы сохранить PhASAR в состоянии, пригодном для современных исследований в области статического анализа, а также для продуктивного использования, нам необходимо внести кардинальные изменения. Пожалуйста, обратитесь к разделу «Критические изменения» для получения подробной информации о том, что было сломано в последнее время и как выполнить миграцию.
У нас есть некоторая документация по PhASAR в нашей Wiki . Вероятно, вы захотите сначала прочитать этот README.
Пожалуйста, также загляните в каталог проекта 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++
Возможно, вам придется настроить пути в соответствии с вашей системой. Когда вы клонируете PhASAR из Github, вам необходимо инициализировать подмодули 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 : BOOL | Создание общих библиотек. Больше не рекомендуется. Вместо этого вы можете использовать PHASAR_BUILD_DYNLIB (по умолчанию OFF). |
PHASAR_BUILD_DYNLIB : BOOL | Создайте одну толстую общую библиотеку (по умолчанию ВЫКЛ.) |
CMAKE_BUILD_TYPE : STRING | Создайте PhASAR в режиме «Отладка», «RelWithDebInfo» или «Выпуск» (по умолчанию — «Отладка»). |
CMAKE_INSTALL_PREFIX : ПУТЬ | Путь, по которому PhASAR будет установлен, если вызывается «ninja install» или создается цель «install» (по умолчанию — /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 (по умолчанию включено) |
PHASAR_BUILD_IR : BOOL | Создайте PhASAR IR (требуется для запуска модульных тестов) (по умолчанию включено). |
PHASAR_BUILD_OPENSSL_TS_UNITTESTS : BOOL | Создайте модульные тесты PhASAR, требующие OpenSSL (по умолчанию отключено). |
PHASAR_ENABLE_PAMM : STRING | Включить механизм измерения производительности («Выкл.», «Ядро» или «Полный», по умолчанию отключено). |
PHASAR_ENABLE_PIC : BOOL | Построить независимый от позиции код (по умолчанию включено) |
PHASAR_ENABLE_WARNINGS : BOOL | Включить предупреждения компилятора (по умолчанию включено) |
CMAKE_CXX_STANDARD : ИНТ. | Сборка фазара в режиме C++17 или C++20 (по умолчанию — 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 и обработки C++, особенно на новых процессорах M1, мы не можем поддерживать встроенную разработку на Mac. Самое простое решение для разработки PhASAR на Mac прямо сейчас — использовать среды разработки докеров. Клонируйте этот репозиторий, как описано в документации. После этого вам необходимо один раз войти в систему вручную как пользователь root, запустив docker exec -it -u root <container name> /bin/bash
чтобы завершить остальную часть процесса сборки, как описано в этом файле readme (установите подмодули, запустите bootstrap. шш, ...). Теперь вы можете просто подключить свой докер-контейнер к VS Code или любой другой IDE, поддерживающей удаленную разработку.
PhASAR можно установить с помощью сценариев установщика, как описано ниже. Однако для его использования не обязательно устанавливать PhASAR.
Далее мы хотели бы привести полный пример установки PhASAR с использованием Ubuntu или Unix-подобной системы.
Поэтому мы предоставляем скрипт установки. Чтобы установить PhASAR, просто перейдите в каталог верхнего уровня PhASAR и используйте следующую команду:
./bootstrap.sh --install
Сценарий начальной загрузки может запросить права суперпользователя.
Сделанный!
Если вы уже создали фазар, вы можете просто вызвать
sudo ninja install
Мы рекомендуем использовать phasar в качестве библиотеки с cmake
.
Если у вас уже установлен phasar, хорошим началом может стать использование PhASAR-as-a-library.
В противном случае мы рекомендуем добавить PhASAR в качестве подмодуля git в ваш репозиторий. В этом случае просто add_subdirectory
каталог подмодуля phasar в вашем CMakeLists.txt
.
Предполагая, что вы извлекли phasar из external/phasar
, команды cmake, связанные с phasar, могут выглядеть следующим образом:
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
Спасибо. И получайте удовольствие от проекта.