CLAM-это абстрактный статический анализатор, основанный на интерпретации, который вычисляет индуктивные инварианты для биткода LLVM на основе библиотеки крабов. Эта ветвь поддерживает LLVM 14.
Доступную документацию можно найти как в вики, так и в Crab Wiki.
Вы можете получить моллюсков от Docker Hub (ночной построенной), используя команду:
docker pull seahorn/clam-llvm14:nightly
Клуп написан в C ++ и сильно использует библиотеку Boost. Основные требования:
-DCRAB_USE_APRON=ON или -DCRAB_USE_ELINA=ON )-DCRAB_USE_PPLITE=ON )В Linux вы можете установить требования, набирающие команды:
sudo apt-get install libboost-all-dev libboost-program-options-dev
sudo apt-get install libgmp-dev
sudo apt-get install libmpfr-dev
sudo apt-get install libflint-dev
Инфраструктура тестирования зависит от нескольких пакетов Python. Для запуска тестов вам нужно установить lit и OutputCheck :
pip3 install lit
pip3 install OutputCheck
Основные шаги компиляции:
1. mkdir build && cd build
2. cmake -DCMAKE_INSTALL_PREFIX=$DIR ../
3. cmake --build . --target crab && cmake ..
4. cmake --build . --target extra && cmake ..
5. cmake --build . --target install
Команда в строке 2 попытается найти LLVM 14 по стандартным путям. Если вы установили LLVM 14 в нестандартном пути, то добавьте опцию -DLLVM_DIR=$LLVM-14_INSTALL_DIR/lib/cmake/llvm в строку 2. Команда в строке 3 будет загружать краб и компилировать его из источников. Clam использует два внешних компонента, которые установлены через extra цель в строке 4. Эти компоненты:
SEA-DSA-это анализ кучи, используемый для перевода инструкций по памяти LLVM. Подробности можно найти здесь и здесь.
LLVM-Seahorn предоставляет специализированные версии компонентов LLVM, чтобы сделать их более поддающимися проверке. llvm-seahorn не является обязательным, но рекомендуется.
Домены коробок/фартук/Elina/pplite требуют сторонних библиотек. Чтобы избежать бремени для пользователей, которые не заинтересованы в этих доменах, установка библиотек не является обязательной.
Если вы хотите использовать домен полетов, добавьте -DCRAB_USE_LDD=ON option.
Если вы хотите использовать домены библиотеки фартука, добавьте -DCRAB_USE_APRON=ON опция.
Если вы хотите использовать домены библиотеки Elina, добавьте -DCRAB_USE_ELINA=ON опцию.
Если вы хотите использовать домены библиотеки Pplite, добавьте -DCRAB_USE_APRON=ON -DCRAB_USE_PPLITE=ON параметрах.
ВАЖНО: Фартук и Элина в настоящее время не совместимы, поэтому вы не можете включить -DCRAB_USE_APRON=ON и -DCRAB_USE_ELINA=ON в то же время.
Например, чтобы установить моллюсков с коробками и фартуком:
1. mkdir build && cd build
2. cmake -DCMAKE_INSTALL_PREFIX=$DIR -DCRAB_USE_LDD=ON -DCRAB_USE_APRON=ON ../
3. cmake --build . --target crab && cmake ..
4. cmake --build . --target extra && cmake ..
5. cmake --build . --target ldd && cmake ..
6. cmake --build . --target apron && cmake ..
7. cmake --build . --target install
Например, строки 5 и 6 будут загружать, компилировать и установить коробки и библиотеки фартуков соответственно. Если вы уже собрали и установили эти библиотеки в своем компьютере, пропустите команды в строке 5 и 6 и добавьте следующие параметры в строке 2.
-DAPRON_ROOT=$APRON_INSTALL_DIR-DELINA_ROOT=$ELINA_INSTALL_DIR-DCUDD_ROOT=$CUDD_INSTALL_DIR -DLDD_ROOT=$LDD_INSTALL_DIR-DPPLITE_ROOT=$PPLITE_INSTALL_DIR -DFLINT_ROOT=$FLINT_INSTALL_DIR Чтобы провести некоторые регрессионные тесты:
cmake --build . --target test-simple
Clam предоставляет сценарий Python под названием clam.py (расположенный в $DIR/bin , где $DIR - это каталог, где был установлен Clam) для взаимодействия с пользователями. Самая простая команда - clam.py test.c Тип clam.py --help для всех вариантов и прочитайте нашу вики.