Versión 2403
PhASAR es desarrollado y mantenido principalmente por Secure Software Engineering Group del Instituto Heinz Nixdorf (Universidad de Paderborn) y Fraunhofer IEM.
Los principales desarrolladores de PhASAR son: Fabian Schiebel (@fabianbs96)([email protected]), Martin Mory (@MMory)([email protected]), Philipp Dominik Schubert (@pdschubert)(philipp. [email protected]) y otros.
PhASAR requiere C++-17.
Sin embargo, la compilación en modo C++20 se admite como característica experimental. Puede habilitar esta configuración configurando la variable cmake CMAKE_CXX_STANDARD
en 20
. Aunque actualmente phasar no utiliza características de C++-20 (a excepción de algunos concept
detrás de un borde #ifdef), su aplicación cliente que solo usa phasar como biblioteca puede querer usar C++20 antes.
PhASAR está actualmente configurado para soportar LLVM-14.0.*
PhASAR es un marco de análisis estático basado en LLVM escrito en C++. Permite a los usuarios especificar problemas de flujo de datos arbitrarios que luego se resuelven de manera totalmente automática en el código de destino IR LLVM especificado. El marco realiza el cálculo de información de puntos de destino, gráficos de llamadas, etc., por lo que usted puede centrarse en lo que importa.
Para mantener PhASAR en un estado que sea adecuado para la investigación de vanguardia en análisis estático, así como para un uso productivo, tenemos que realizar cambios importantes. Consulte Cambios importantes para obtener información detallada sobre lo que se rompió recientemente y cómo migrar.
Tenemos alguna documentación sobre PhASAR en nuestra Wiki . Probablemente le gustaría leer este LÉAME primero.
Eche también un vistazo al directorio de proyectos de PhASAR y observe los examples/
así como la herramienta personalizada tools/example-tool/myphasartool.cpp
.
Se recomienda compilar PhASAR usted mismo para obtener la experiencia completa de C++ y tener control total sobre el modo de compilación. Sin embargo, es posible que también quieras probar una de las versiones prediseñadas de PhASAR o el contenedor Docker.
Como atajo para la primera compilación de PhASAR en su sistema, puede utilizar nuestro script de arranque. Tenga en cuenta que debe tener Python instalado para que el script funcione correctamente.
./bootstrap.sh
Nota: Si desea realizar cambios dentro de PhASAR, se recomienda compilarlo en modo de depuración:
./bootstrap.sh -DCMAKE_BUILD_TYPE=Debug
El script de arranque puede solicitar permisos de superusuario (para instalar las dependencias); sin embargo, no se recomienda iniciar todo el script con sudo
.
Para compilaciones posteriores, consulte Compilación de PhASAR.
Configure las variables del sistema para que el compilador de C y C++ suenen:
export CC=/usr/local/bin/clang
export CXX=/usr/local/bin/clang++
Es posible que deba ajustar las rutas según su sistema. Cuando clonaste PhASAR desde Github, necesitas inicializar los submódulos de PhASAR antes de construirlo:
git submodule update --init
Si descargó PhASAR como una versión comprimida (por ejemplo, .zip o .tar.gz), puede usar el script init-submodules-release.sh
que clona manualmente los submódulos requeridos:
utils/init-submodules-release.sh
Navegue hasta el directorio PhASAR. Los siguientes comandos harán el trabajo y compilarán el marco 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
Cuando haya utilizado el script bootstrap.sh
para instalar PhASAR, los pasos anteriores ya estarán realizados. Úselos como referencia si desea modificar PhASAR y recompilarlo.
Después de la compilación usando cmake, se pueden encontrar los dos binarios siguientes en el directorio build/tools:
phasar-cli
: la herramienta de línea de comandos de PhASAR (anteriormente llamada phasar-llvm
) que proporciona acceso a análisis que ya están implementados en PhASAR. Úselo si no desea crear una herramienta propia sobre PhASAR.myphasartool
: una herramienta de ejemplo que muestra cómo se pueden crear herramientas sobre PhASARTenga cuidado y compruebe si se producen errores durante la compilación.
Cuando se utiliza CMake para compilar PhASAR, se pueden utilizar los siguientes parámetros opcionales:
Parámetro: Tipo | Efecto |
---|---|
BUILD_SHARED_LIBS : BOOL | Cree bibliotecas compartidas: ya no se recomienda. Es posible que desee utilizar PHASAR_BUILD_DYNLIB en su lugar (el valor predeterminado es APAGADO) |
PHASAR_BUILD_DYNLIB : BOOL | Cree una biblioteca compartida completa (el valor predeterminado es APAGADO) |
CMAKE_BUILD_TYPE : CADENA | Compile PhASAR en modo 'Debug', 'RelWithDebInfo' o 'Release' (el valor predeterminado es 'Debug') |
CMAKE_INSTALL_PREFIX : RUTA | Ruta donde se instalará PhASAR si se invoca "ninja install" o se crea el destino de "instalación" (el valor predeterminado es /usr/local/phasar) |
PHASAR_CUSTOM_CONFIG_INSTALL_DIR : RUTA | Si está configurado, personaliza el directorio donde se instalan los archivos de configuración para PhASAR (el valor predeterminado es /usr/local/.phasar-config) |
PHASAR_ENABLE_DYNAMIC_LOG : BOOL | Hace posible encender y apagar el registrador en tiempo de ejecución (el valor predeterminado es ON) |
PHASAR_BUILD_DOC : BOOL | Crear documentación PhASAR (el valor predeterminado es APAGADO) |
PHASAR_BUILD_UNITTESTS : BOOL | Construir pruebas unitarias PhASAR (el valor predeterminado está activado) |
PHASAR_BUILD_IR : BOOL | Build PhASAR IR (requerido para ejecutar las pruebas unitarias) (el valor predeterminado está activado) |
PHASAR_BUILD_OPENSSL_TS_UNITTESTS : BOOL | Cree pruebas unitarias PhASAR que requieran OpenSSL (el valor predeterminado es APAGADO) |
PHASAR_ENABLE_PAMM : CADENA | Habilite el mecanismo de medición del rendimiento ('Desactivado', 'Núcleo' o 'Completo', el valor predeterminado es Desactivado) |
PHASAR_ENABLE_PIC : BOOL | Crear código independiente de la posición (el valor predeterminado es ACTIVADO) |
PHASAR_ENABLE_WARNINGS : BOOL | Habilitar advertencias del compilador (el valor predeterminado está activado) |
CMAKE_CXX_STANDARD : INT | Compile phasar en modo C++17 o C++20 (el valor predeterminado es 17) |
Puede utilizar estos parámetros directamente o modificar el script del instalador bootstrap.sh
Los largos tiempos de compilación de C++ siempre son una molestia. Como se muestra arriba, cuando se usa cmake, la compilación se puede ejecutar fácilmente en paralelo, lo que resulta en tiempos de compilación más cortos. ¡Haz uso de ello!
Para probar si todo funciona como se esperaba, ejecute el siguiente comando:
$ phasar-cli -m test/llvm_test_code/basic/module_cpp.ll -D ifds-solvertest
Puede encontrar la herramienta phasar-cli
en el árbol de compilación en tools/phasar-cli
.
Si obtiene un resultado que no sea un error de segmentación o una excepción que finalice el programa de forma anormal, todo funciona como se esperaba.
Debido a actualizaciones desafortunadas de MacOS y el manejo de C++, especialmente en los procesadores M1 más nuevos, no podemos admitir el desarrollo nativo en Mac. La solución más sencilla para desarrollar PhASAR en una Mac en este momento es utilizar entornos de desarrollo Dockers. Clona este repositorio como se describe en su documentación. Luego, debe iniciar sesión una vez manualmente, como usuario root, ejecutando docker exec -it -u root <container name> /bin/bash
para completar el resto del proceso de compilación como se describe en este archivo Léame (instalar submódulos, ejecutar bootstrap. sh, ...). Ahora puede simplemente adjuntar su contenedor acoplable a VS Code o cualquier otro IDE que admita el desarrollo remoto.
PhASAR se puede instalar utilizando los scripts del instalador como se explica a continuación. Sin embargo, no es necesario instalar PhASAR para poder utilizarlo.
A continuación, nos gustaría dar un ejemplo completo de cómo instalar PhASAR usando un sistema Ubuntu o tipo Unix.
Por lo tanto, proporcionamos un script de instalación. Para instalar PhASAR, simplemente navegue hasta el directorio de nivel superior de PhASAR y use el siguiente comando:
./bootstrap.sh --install
El script de arranque puede solicitar permisos de superusuario.
¡Hecho!
Si ya has construido phasar, puedes simplemente invocar
sudo ninja install
Recomendamos usar phasar como biblioteca con cmake
.
Si ya ha instalado phasar, Use-PhASAR-as-a-library puede ser un buen comienzo.
De lo contrario, recomendamos agregar PhASAR como un submódulo git a su repositorio. En este caso, simplemente add_subdirectory
el directorio del submódulo phasar dentro de su CMakeLists.txt
.
Suponiendo que haya verificado phasar en external/phasar
, los comandos cmake relacionados con phasar pueden verse así:
add_subdirectory (external/phasar EXCLUDE_FROM_ALL ) # Build phasar with your tool
...
target_link_libraries (yourphasartool
...
phasar # Make your tool link against phasar
)
Dependiendo de su uso de PhASAR, es posible que también necesite agregar LLVM a su compilación.
Para obtener más información, consulte nuestras páginas wiki de PhASAR.
¿Estás utilizando PhASAR y te gustaría ayudarnos en el futuro? Entonces apóyenos completando este formulario web.
Al brindarnos su opinión, ayuda a decidir en qué dirección debe avanzar PhASAR en el futuro y nos da pistas sobre nuestra base de usuarios. ¡Muchas gracias!
Le invitamos a contribuir al proyecto PhASAR. Asegúrese de instalar nuestro gancho de confirmación previa que garantiza que su confirmación cumpla con las reglas de codificación más importantes del proyecto PhASAR. Para obtener más detalles, consulte Convenciones de codificación y Contribución a PhASAR.
Para instalar el enlace de confirmación previa, ejecute los siguientes comandos en el directorio raíz de PhASAR:
pip install pre-commit
pre-commit install
Gracias. Y diviértete con el proyecto.