Module qui vérifie les arguments échangés dans les appels de fonction. Par exemple, la bibliothèque peut être utilisée pour détecter des échanges dans le code comme:
/* 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 Si vous n'avez pas installé Ninja, vous pouvez utiliser -G "Unix Makefiles" pour générer des makefiles à la place et construire en utilisant make -j .
Il y a un avertissement de linker quant à l'utilisation du tmpnam . Cette API n'est utilisée que par l'infrastructure de test pour générer une base de données de statistiques temporaires et n'est pas utilisée dans le cadre de l'API de vérification d'argument échangée.
../../llvm-install/bin/scan-build -load-plugin lib/SwapDetectorPlugin.so -enable-checker gt.SwapDetector -analyzer-config gt.SwapDetector:ModelPath=sample.db clang++ ~ /dummy.cpp Le répertoire racine du référentiel a une base de données d'échantillonnage, nommée sample.db , qui peut être utilisée pour explorer le comportement de la bibliothèque. Cette base de données n'est pas complète (elle ne couvre que dix fonctions), mais contient des informations statistiquement utiles sur les fonctions qu'il couvre.
| Option | Description |
|---|---|
SWAPPED_ARGS_BUILD_CLANG_PLUGIN | Permet de construire le plugin Clang. Par défaut: sur |
SWAPPED_ARGS_BUILD_TESTS | Active les tests de construction. Par défaut: sur |
SWAPPED_ARGS_BUILD_PYTHON | Permet de construire l'extension Python. Par défaut: désactivé |
SWAPPED_ARGS_INSTALL_PYTHON | Permet d'installer l'extension Python si elle a été construite. Par défaut: désactivé |
Dans le cadre de la configuration CMake, la dernière branche maître de GoogleTest est téléchargée et construite si les fonctionnalités de test sont activées.
Pour exécuter les tests unitaires C ++, assurez-vous que SWAPPED_ARGS_BUILD_TESTS n'est pas désactivé lors de la configuration du projet CMake. L'exécutable TestSwappedArgsCpp sera généré sur une construction réussie et peut être exécuté pour effectuer des tests unitaires.
Pour exécuter les tests de plugin Clang, vous pouvez exécuter cmake --build . --target check-all DU DIRECTEUR CAMAKE BUILD.
Nous développons les concepts et les algorithmes derrière Swap Detector dans un document de recherche, publié dans la conférence d'analyse et de manipulation du code source IEEE 2020. Notez que tous les algorithmes, heuristiques et caractéristiques décrits dans le document de recherche ne sont pas présents dans cette implémentation.
Ce matériel est basé sur des recherches parrainées par le Bureau des opérations du ministère de la Sécurité intérieure (DHS), Division d'acquisition S&T via le numéro de contrat 70RSAT19C00000056. Les opinions et les conclusions contenues ici sont celles des auteurs et ne doivent pas être interprétées comme représentant nécessairement les politiques ou les mentions officielles, exprimées ou implicites du ministère de la Sécurité intérieure.