Version 2403
PhASAR est principalement développé et maintenu par le Secure Software Engineering Group de l'Institut Heinz Nixdorf (Université de Paderborn) et du Fraunhofer IEM.
Les principaux développeurs de PhASAR sont : Fabian Schiebel (@fabianbs96)([email protected]), Martin Mory (@MMory)([email protected]), Philipp Dominik Schubert (@pdschubert)(philipp. [email protected]) et autres.
PhASAR nécessite C++-17.
Cependant, la construction en mode C++20 est prise en charge en tant que fonctionnalité expérimentale. Vous pouvez activer ce réglage de la variable cmake CMAKE_CXX_STANDARD
sur 20
. Bien que phasar n'utilise actuellement pas les fonctionnalités C++-20 (à l'exception de certains concept
derrière une bordure #ifdef), votre application client qui utilise simplement phasar comme bibliothèque souhaitera peut-être utiliser C++20 auparavant.
PhASAR est actuellement configuré pour prendre en charge LLVM-14.0.*
PhASAR est un framework d'analyse statique basé sur LLVM écrit en C++. Il permet aux utilisateurs de spécifier des problèmes de flux de données arbitraires qui sont ensuite résolus de manière entièrement automatisée sur le code cible IR LLVM spécifié. Le calcul des informations de points d'accès, des graphiques d'appel, etc. est effectué par le framework, vous pouvez donc vous concentrer sur ce qui compte.
Pour maintenir PhASAR dans un état qui le rend bien adapté à la recherche de pointe en analyse statique, ainsi qu'à une utilisation productive, nous devons apporter des changements radicaux. Veuillez vous référer aux dernières modifications pour obtenir des informations détaillées sur ce qui a été récemment cassé et comment migrer.
Nous avons de la documentation sur PhASAR dans notre Wiki . Vous aimeriez probablement lire ce README en premier.
Veuillez également consulter le répertoire du projet PhASAR et remarquer le répertoire du projet examples/
ainsi que l'outil personnalisé tools/example-tool/myphasartool.cpp
.
Il est recommandé de compiler PhASAR vous-même afin de bénéficier de l'expérience C++ complète et d'avoir un contrôle total sur le mode build. Cependant, vous souhaiterez peut-être également essayer l'une des versions prédéfinies de PhASAR ou du conteneur Docker.
Comme raccourci pour la toute première version de PhASAR sur votre système, vous pouvez utiliser notre script d'amorçage. Veuillez noter que Python doit être installé pour que le script fonctionne correctement.
./bootstrap.sh
Remarque : Si vous souhaitez apporter des modifications dans PhASAR, il est recommandé de le construire en mode débogage :
./bootstrap.sh -DCMAKE_BUILD_TYPE=Debug
Le script d'amorçage peut demander des autorisations de superutilisateur (pour installer les dépendances) ; cependant, il n'est pas recommandé de démarrer l'intégralité du script avec sudo
.
Pour les versions ultérieures, voir Compilation de PhASAR.
Définissez les variables système du compilateur C et C++ sur clang :
export CC=/usr/local/bin/clang
export CXX=/usr/local/bin/clang++
Vous devrez peut-être ajuster les chemins en fonction de votre système. Lorsque vous avez cloné PhASAR depuis Github, vous devez initialiser les sous-modules de PhASAR avant de le construire :
git submodule update --init
Si vous avez téléchargé PhASAR sous forme de version compressée (par exemple .zip ou .tar.gz), vous pouvez utiliser le script init-submodules-release.sh
qui clone manuellement les sous-modules requis :
utils/init-submodules-release.sh
Accédez au répertoire PhASAR. Les commandes suivantes feront le travail et compileront le framework 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
Lorsque vous avez utilisé le script bootstrap.sh
pour installer PhASAR, les étapes ci-dessus sont déjà effectuées. Utilisez-les comme référence si vous souhaitez modifier PhASAR et le recompiler.
Après compilation à l'aide de cmake, les deux binaires suivants peuvent être trouvés dans le répertoire build/tools :
phasar-cli
- l'outil de ligne de commande PhASAR (anciennement appelé phasar-llvm
) qui donne accès aux analyses déjà implémentées dans PhASAR. Utilisez-le si vous ne souhaitez pas créer votre propre outil au-dessus de PhASAR.myphasartool
- un exemple d'outil qui montre comment des outils peuvent être construits sur PhASARSoyez prudent et vérifiez si des erreurs se produisent lors de la compilation.
Lors de l'utilisation de CMake pour compiler PhASAR, les paramètres facultatifs suivants peuvent être utilisés :
Paramètre : Type | Effet |
---|---|
BUILD_SHARED_LIBS : BOOL | Créer des bibliothèques partagées – Non recommandé. Vous souhaiterez peut-être utiliser PHASAR_BUILD_DYNLIB à la place (la valeur par défaut est OFF) |
PHASAR_BUILD_DYNLIB : BOOL | Créez une grosse bibliothèque partagée (la valeur par défaut est OFF) |
CMAKE_BUILD_TYPE : CHAÎNE | Construisez PhASAR en mode 'Debug', 'RelWithDebInfo' ou 'Release' (la valeur par défaut est 'Debug') |
CMAKE_INSTALL_PREFIX : CHEMIN | Chemin où PhASAR sera installé si "ninja install" est invoqué ou si la cible "install" est construite (la valeur par défaut est /usr/local/phasar) |
PHASAR_CUSTOM_CONFIG_INSTALL_DIR : CHEMIN | S'il est défini, personnalise le répertoire dans lequel les fichiers de configuration pour PhASAR sont installés (la valeur par défaut est /usr/local/.phasar-config) |
PHASAR_ENABLE_DYNAMIC_LOG : BOOL | Permet d'allumer et d'éteindre l'enregistreur au moment de l'exécution (la valeur par défaut est ON) |
PHASAR_BUILD_DOC : BOOL | Créer la documentation PhASAR (la valeur par défaut est OFF) |
PHASAR_BUILD_UNITTESTS : BOOL | Construire des tests unitaires PhASAR (la valeur par défaut est ON) |
PHASAR_BUILD_IR : BOOL | Construire PhASAR IR (requis pour exécuter les tests unitaires) (la valeur par défaut est ON) |
PHASAR_BUILD_OPENSSL_TS_UNITTESTS : BOOL | Créez des tests unitaires PhASAR qui nécessitent OpenSSL (la valeur par défaut est OFF) |
PHASAR_ENABLE_PAMM : CHAÎNE | Activer le mécanisme de mesure des performances (« Désactivé », « Core » ou « Complet », la valeur par défaut est Désactivée) |
PHASAR_ENABLE_PIC : BOOL | Créer un code indépendant de la position (la valeur par défaut est ON) |
PHASAR_ENABLE_WARNINGS : BOOL | Activer les avertissements du compilateur (la valeur par défaut est ON) |
CMAKE_CXX_STANDARD : INT | Construire phasar en mode C++17 ou C++20 (la valeur par défaut est 17) |
Vous pouvez utiliser ces paramètres directement ou modifier le script d'installation bootstrap.sh
Les longs temps de compilation du C++ sont toujours pénibles. Comme indiqué ci-dessus, lors de l'utilisation de cmake, la compilation peut facilement être exécutée en parallèle, ce qui réduit les temps de compilation. Profitez-en !
Pour tester si tout fonctionne comme prévu, exécutez la commande suivante :
$ phasar-cli -m test/llvm_test_code/basic/module_cpp.ll -D ifds-solvertest
Vous pouvez trouver l'outil phasar-cli
dans l'arborescence de construction sous tools/phasar-cli
.
Si vous obtenez un résultat autre qu'une erreur de segmentation ou une exception mettant fin anormalement au programme, tout fonctionne comme prévu.
En raison de mises à jour malheureuses de MacOS et de la gestion du C++, notamment sur les nouveaux processeurs M1, nous ne pouvons pas prendre en charge le développement natif sur Mac. La solution la plus simple pour développer PhASAR sur un Mac à l’heure actuelle consiste à utiliser des environnements de développement Dockers. Clonez ce référentiel comme décrit dans leur documentation. Ensuite, vous devez vous connecter une fois manuellement, en tant qu'utilisateur root, en exécutant docker exec -it -u root <container name> /bin/bash
pour terminer le reste du processus de construction comme décrit dans ce fichier readme (installer les sous-modules, exécuter bootstrap. chut, ...). Vous pouvez désormais simplement attacher votre conteneur Docker à VS Code ou à tout autre IDE prenant en charge le développement à distance.
PhASAR peut être installé à l'aide des scripts d'installation comme expliqué ci-dessous. Cependant, vous n'avez pas besoin d'installer PhASAR pour l'utiliser.
Dans ce qui suit, nous aimerions donner un exemple complet de la façon d'installer PhASAR à l'aide d'un système de type Ubuntu ou Unix.
Par conséquent, nous fournissons un script d'installation. Pour installer PhASAR, accédez simplement au répertoire de niveau supérieur de PhASAR et utilisez la commande suivante :
./bootstrap.sh --install
Le script d'amorçage peut demander des autorisations de superutilisateur.
Fait!
Si vous avez déjà construit Phasar, vous pouvez simplement invoquer
sudo ninja install
Nous recommandons d'utiliser phasar comme bibliothèque avec cmake
.
Si vous avez déjà installé phasar, Utiliser-PhASAR-as-a-library peut être un bon début.
Sinon, nous vous recommandons d'ajouter PhASAR en tant que sous-module git à votre référentiel. Dans ce cas, add_subdirectory
simplement_subdirectory le répertoire du sous-module phasar dans votre CMakeLists.txt
.
En supposant que vous ayez extrait phasar dans external/phasar
, les commandes cmake liées à phasar peuvent ressembler à ceci :
add_subdirectory (external/phasar EXCLUDE_FROM_ALL ) # Build phasar with your tool
...
target_link_libraries (yourphasartool
...
phasar # Make your tool link against phasar
)
En fonction de votre utilisation de PhASAR, vous devrez peut-être également ajouter LLVM à votre build.
Pour plus d’informations, veuillez consulter nos pages wiki PhASAR.
Vous utilisez PhASAR et souhaitez nous aider à l’avenir ? Alors s'il vous plaît, soutenez-nous en remplissant ce formulaire Web.
En nous faisant part de vos commentaires, vous nous aidez à décider dans quelle direction PhASAR devrait évoluer à l'avenir et vous nous donnez des indices sur notre base d'utilisateurs. Merci beaucoup!
Vous êtes les bienvenus pour contribuer au projet PhASAR. Veuillez vous assurer d'installer notre hook de pré-commit qui garantit que votre commit respecte les règles de codage les plus importantes du projet PhASAR. Pour plus de détails, veuillez consulter les conventions de codage et la contribution au PhASAR.
Pour installer le hook de pré-commit, veuillez exécuter les commandes suivantes dans le répertoire racine de PhASAR :
pip install pre-commit
pre-commit install
Merci. Et amusez-vous avec le projet.