Модуль, который проверяет на наличие поменяемых аргументов в функциональных вызовах. Например, библиотека можно использовать для обнаружения изменений в коде, как:
/* Apparent swap of 'e' and 'n' based on parameter names. */
RSA_get0_key ( rkey , & e , & n , NULL );git clone https://github.com/llvm/llvm-project.git
git checkout llvmorg-10.0.0mkdir llvm-build ; pushd llvm-build
cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLLVM_ENABLE_ASSERTIONS=1 -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_INSTALL_UTILS=1 -DLLVM_ENABLE_PROJECTS=clang -DLLVM_TOOL_CLANG_BUILD=1 -DCMAKE_INSTALL_PREFIX= $PWD /../llvm-install ../llvm-src
cmake --build . --target check-clang
cmake --build . --target install
popdpip install --user lit
export PATH= $PATH : $HOME /.local/binmkdir build ; cd build
cmake -G Ninja -DLLVM_EXTERNAL_LIT= $( which lit ) -DSWAPPED_ARGS_BUILD_CLANG_PLUGIN=ON -DCMAKE_PREFIX_PATH= $PWD /../../llvm-install/lib/cmake ~ /path/to/swap-detector
cmake --build . --target check-all Если у вас нет установки Ninja, вы можете использовать -G "Unix Makefiles" для создания Makefiles и создания с помощью make -j .
Существует предупреждение о линкере об использовании tmpnam . Этот API используется только в инфраструктуре тестирования для создания временной статистической базы данных и не используется как часть API проверки API Argive Argiry.
../../llvm-install/bin/scan-build -load-plugin lib/SwapDetectorPlugin.so -enable-checker gt.SwapDetector -analyzer-config gt.SwapDetector:ModelPath=sample.db clang++ ~ /dummy.cpp Корневой каталог репозитория имеет примерную базу данных с именем sample.db , которая может использоваться для изучения поведения библиотеки. Эта база данных не завершена (она охватывает только десять функций), но содержит статистически полезную информацию о функциях, которые она охватывает.
| Вариант | Описание |
|---|---|
SWAPPED_ARGS_BUILD_CLANG_PLUGIN | Позволяет создавать плагин Clang. По умолчанию: включено |
SWAPPED_ARGS_BUILD_TESTS | Позволяет строить тесты. По умолчанию: включено |
SWAPPED_ARGS_BUILD_PYTHON | Позволяет строить расширение Python. По умолчанию: выключен |
SWAPPED_ARGS_INSTALL_PYTHON | Включает установку расширения Python, если оно будет построено. По умолчанию: выключен |
В рамках конфигурации Cmake последняя главная ветвь Googletest загружается и создана, если включена функциональность тестирования.
Чтобы запустить модульные тесты C ++, убедитесь, что SWAPPED_ARGS_BUILD_TESTS не отключена при настройке проекта CMAKE. Исполняемый файл TestSwappedArgsCpp будет генерироваться при успешной сборке и может быть запущена для выполнения модульного тестирования.
Чтобы запустить тесты плагина Clang, вы можете выполнить cmake --build . --target check-all из каталога сборки Cmake.
Мы расширяем концепции и алгоритмы, лежащие в основе детектора SWAP в исследовательской статье, опубликованной на конференции анализа исходного кода IEEE в 2020 году. Обратите внимание, что не все алгоритмы, эвристика и функции, описанные в исследовательской статье, присутствуют в этой реализации.
Этот материал основан на исследованиях, спонсируемых Департаментом министерства внутренней безопасности (DHS) по закупку, Отдел приобретения S & T через контракт № 70RSAT19C00000056. Мнения и выводы, содержащиеся в данном документе, относятся к авторам и не должны интерпретироваться как обязательно представляющие официальные политики или одобрения, выраженные или подразумеваемые Министерства внутренней безопасности.