Version 2403
PhASAR wird hauptsächlich von der Secure Software Engineering Group am Heinz Nixdorf Institut (Universität Paderborn) und dem Fraunhofer IEM entwickelt und gepflegt.
Hauptentwickler von PhASAR sind: Fabian Schiebel (@fabianbs96)([email protected]), Martin Mory (@MMory)([email protected]), Philipp Dominik Schubert (@pdschubert)(philipp. [email protected]) und andere.
PhASAR erfordert C++-17.
Allerdings wird die Erstellung im C++20-Modus als experimentelle Funktion unterstützt. Sie können dies aktivieren, indem Sie die cmake-Variable CMAKE_CXX_STANDARD
auf 20
setzen. Obwohl phasar derzeit keine C++-20-Funktionen nutzt (mit Ausnahme einiger concept
hinter einem #ifdef-Rahmen), möchte Ihre Clientanwendung, die phasar nur als Bibliothek verwendet , möglicherweise früher C++20 verwenden.
PhASAR ist derzeit für die Unterstützung von LLVM-14.0 eingerichtet.*
PhASAR ist ein LLVM-basiertes statisches Analyse-Framework, das in C++ geschrieben ist. Benutzer können damit beliebige Datenflussprobleme spezifizieren, die dann vollautomatisch auf dem angegebenen LLVM-IR-Zielcode gelöst werden. Die Berechnung von Point-to-Informationen, Aufrufdiagramm(en) usw. erfolgt durch das Framework, sodass Sie sich auf das Wesentliche konzentrieren können.
Um PhASAR in einem Zustand zu halten, in dem es sowohl für die hochmoderne Forschung in der statischen Analyse als auch für den produktiven Einsatz gut geeignet ist, müssen wir bahnbrechende Änderungen vornehmen. Ausführliche Informationen zu den kürzlich aufgetretenen Fehlern und zur Migration finden Sie unter Wichtige Änderungen.
Wir haben einige Dokumentationen zu PhASAR in unserem Wiki . Sie möchten wahrscheinlich zuerst diese README-Datei lesen.
Bitte werfen Sie auch einen Blick in das Projektverzeichnis von PhASAR und beachten Sie das Projektverzeichnis examples/
sowie das benutzerdefinierte Tool tools/example-tool/myphasartool.cpp
.
Es wird empfohlen, PhASAR selbst zu kompilieren, um die volle C++-Erfahrung zu erhalten und die volle Kontrolle über den Build-Modus zu haben. Möglicherweise möchten Sie jedoch auch eine der vorgefertigten Versionen von PhASAR oder den Docker-Container ausprobieren.
Als Verknüpfung für den allerersten PhASAR-Build auf Ihrem System können Sie unser Bootstrap-Skript verwenden. Bitte beachten Sie, dass Python installiert sein muss, damit das Skript ordnungsgemäß funktioniert.
./bootstrap.sh
Hinweis: Wenn Sie Änderungen in PhASAR vornehmen möchten, wird empfohlen, es im Debug-Modus zu erstellen:
./bootstrap.sh -DCMAKE_BUILD_TYPE=Debug
Das Bootstrap-Skript fragt möglicherweise nach Superuser-Berechtigungen (um die Abhängigkeiten zu installieren). Es wird jedoch nicht empfohlen, das gesamte Skript mit sudo
zu starten.
Informationen zu nachfolgenden Builds finden Sie unter Kompilieren von PhASAR.
Setzen Sie die Systemvariablen für den C- und C++-Compiler auf clang:
export CC=/usr/local/bin/clang
export CXX=/usr/local/bin/clang++
Möglicherweise müssen Sie die Pfade entsprechend Ihrem System anpassen. Wenn Sie PhASAR von Github geklont haben, müssen Sie die Submodule von PhASAR initialisieren, bevor Sie es erstellen:
git submodule update --init
Wenn Sie PhASAR als komprimierte Version (z. B. .zip oder .tar.gz) heruntergeladen haben, können Sie das Skript init-submodules-release.sh
verwenden, das die erforderlichen Submodule manuell klont:
utils/init-submodules-release.sh
Navigieren Sie in das PhASAR-Verzeichnis. Die folgenden Befehle erledigen die Aufgabe und kompilieren das PhASAR-Framework:
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
Wenn Sie das Skript bootstrap.sh
zur Installation von PhASAR verwendet haben, sind die oben genannten Schritte bereits abgeschlossen. Verwenden Sie sie als Referenz, wenn Sie PhASAR ändern und neu kompilieren möchten.
Nach der Kompilierung mit cmake sind die folgenden zwei Binärdateien im Verzeichnis build/tools zu finden:
phasar-cli
– das PhASAR-Befehlszeilentool (früher phasar-llvm
genannt), das Zugriff auf Analysen bietet, die bereits in PhASAR implementiert sind. Verwenden Sie dies, wenn Sie kein eigenes Tool auf PhASAR aufbauen möchten.myphasartool
– ein Beispieltool, das zeigt, wie Tools auf PhASAR aufbauen könnenBitte seien Sie vorsichtig und prüfen Sie, ob bei der Kompilierung Fehler auftreten.
Wenn Sie CMake zum Kompilieren von PhASAR verwenden, können die folgenden optionalen Parameter verwendet werden:
Parameter: Typ | Wirkung |
---|---|
BUILD_SHARED_LIBS : BOOL | Gemeinsam genutzte Bibliotheken erstellen – Nicht mehr empfohlen. Möglicherweise möchten Sie stattdessen PHASAR_BUILD_DYNLIB verwenden (Standard ist AUS). |
PHASAR_BUILD_DYNLIB : BOOL | Erstellen Sie eine gemeinsame Fat-Bibliothek (Standard ist AUS). |
CMAKE_BUILD_TYPE : STRING | Erstellen Sie PhASAR im Modus „Debug“, „RelWithDebInfo“ oder „Release“ (Standard ist „Debug“). |
CMAKE_INSTALL_PREFIX : PFAD | Pfad, in dem PhASAR installiert wird, wenn „ninja install“ aufgerufen oder das „install“-Ziel erstellt wird (Standard ist /usr/local/phasar) |
PHASAR_CUSTOM_CONFIG_INSTALL_DIR : PFAD | Wenn festgelegt, wird das Verzeichnis angepasst, in dem Konfigurationsdateien für PhASAR installiert werden (Standard ist /usr/local/.phasar-config). |
PHASAR_ENABLE_DYNAMIC_LOG : BOOL | Ermöglicht das Ein- und Ausschalten des Loggers zur Laufzeit (Standard ist ON) |
PHASAR_BUILD_DOC : BOOL | PhASAR-Dokumentation erstellen (Standard ist AUS) |
PHASAR_BUILD_UNITTESTS : BOOL | Erstellen Sie PhASAR-Einheitentests (Standard ist EIN) |
PHASAR_BUILD_IR : BOOL | Erstellen Sie PhASAR IR (erforderlich zum Ausführen der Komponententests) (Standard ist EIN) |
PHASAR_BUILD_OPENSSL_TS_UNITTESTS : BOOL | Erstellen Sie PhASAR-Einheitentests, die OpenSSL erfordern (Standard ist AUS). |
PHASAR_ENABLE_PAMM : STRING | Aktivieren Sie den Leistungsmessmechanismus („Aus“, „Kern“ oder „Vollständig“, die Standardeinstellung ist „Aus“). |
PHASAR_ENABLE_PIC : BOOL | Positionsunabhängigen Code erstellen (Standard ist EIN) |
PHASAR_ENABLE_WARNINGS : BOOL | Compiler-Warnungen aktivieren (Standard ist EIN) |
CMAKE_CXX_STANDARD : INT | Phasar im C++17- oder C++20-Modus erstellen (Standard ist 17) |
Sie können diese Parameter entweder direkt verwenden oder das Installationsskript bootstrap.sh
ändern
Die langen Kompilierungszeiten von C++ sind immer ein Ärgernis. Wie oben gezeigt, kann die Kompilierung bei Verwendung von cmake problemlos parallel ausgeführt werden, was zu kürzeren Kompilierungszeiten führt. Nutzen Sie es!
Um zu testen, ob alles wie erwartet funktioniert, führen Sie bitte den folgenden Befehl aus:
$ phasar-cli -m test/llvm_test_code/basic/module_cpp.ll -D ifds-solvertest
Sie finden das Tool phasar-cli
im Build-Tree unter tools/phasar-cli
.
Wenn Sie eine andere Ausgabe als einen Segmentierungsfehler oder eine Ausnahme erhalten, die das Programm abnormal beendet, funktioniert alles wie erwartet.
Aufgrund unglücklicher Updates auf MacOS und der Handhabung von C++, insbesondere auf den neueren M1-Prozessoren, können wir die native Entwicklung auf dem Mac nicht unterstützen. Die einfachste Lösung, PhASAR auf einem Mac zu entwickeln, ist derzeit die Verwendung von Dockers-Entwicklungsumgebungen. Klonen Sie dieses Repository wie in der Dokumentation beschrieben. Anschließend müssen Sie sich einmal manuell als Root-Benutzer anmelden, indem Sie docker exec -it -u root <container name> /bin/bash
ausführen, um den Rest des Build-Prozesses wie in dieser Readme-Datei beschrieben abzuschließen (Submodule installieren, Bootstrap ausführen). sch, ...). Jetzt können Sie Ihren Docker-Container einfach an VS Code oder eine andere IDE anhängen, die die Remote-Entwicklung unterstützt.
PhASAR kann mithilfe der im Folgenden erläuterten Installationsskripte installiert werden. Sie müssen PhASAR jedoch nicht installieren, um es nutzen zu können.
Im Folgenden möchten wir ein vollständiges Beispiel für die Installation von PhASAR unter Verwendung eines Ubuntu- oder Unix-ähnlichen Systems geben.
Daher stellen wir ein Installationsskript zur Verfügung. Um PhASAR zu installieren, navigieren Sie einfach zum Verzeichnis der obersten Ebene von PhASAR und verwenden Sie den folgenden Befehl:
./bootstrap.sh --install
Das Bootstrap-Skript fragt möglicherweise nach Superuser-Berechtigungen.
Erledigt!
Wenn Sie Phasar bereits erstellt haben, können Sie es einfach aufrufen
sudo ninja install
Wir empfehlen die Verwendung von Phasar als Bibliothek mit cmake
.
Wenn Sie Phasar bereits installiert haben, ist Use-PhASAR-as-a-library möglicherweise ein guter Anfang.
Andernfalls empfehlen wir, PhASAR als Git-Submodul zu Ihrem Repository hinzuzufügen. In diesem Fall fügen Sie einfach add_subdirectory
das Phasar-Submodulverzeichnis in Ihrer CMakeLists.txt
hinzu.
Vorausgesetzt, Sie haben phasar in external/phasar
ausgecheckt, könnten die phasar-bezogenen cmake-Befehle wie folgt aussehen:
add_subdirectory (external/phasar EXCLUDE_FROM_ALL ) # Build phasar with your tool
...
target_link_libraries (yourphasartool
...
phasar # Make your tool link against phasar
)
Abhängig von Ihrer Verwendung von PhASAR müssen Sie möglicherweise auch LLVM zu Ihrem Build hinzufügen.
Weitere Informationen finden Sie auf unseren PhASAR-Wiki-Seiten.
Sie nutzen PhASAR und möchten uns in Zukunft unterstützen? Dann unterstützen Sie uns bitte, indem Sie dieses Webformular ausfüllen.
Indem Sie uns Feedback geben, helfen Sie bei der Entscheidung, in welche Richtung PhASAR in Zukunft gehen soll, und geben uns Hinweise auf unsere Benutzerbasis. Vielen Dank!
Sie sind herzlich willkommen, einen Beitrag zum PhASAR-Projekt zu leisten. Bitte stellen Sie sicher, dass Sie unseren Pre-Commit-Hook installieren, der sicherstellt, dass Ihr Commit den wichtigsten Codierungsregeln des PhASAR-Projekts entspricht. Weitere Einzelheiten finden Sie unter Coding Conventions und Contributing to PhASAR.
Um den Pre-Commit-Hook zu installieren, führen Sie bitte die folgenden Befehle im PhASAR-Stammverzeichnis aus:
pip install pre-commit
pre-commit install
Danke. Und viel Spaß mit dem Projekt.