Versão 2403
PhASAR é desenvolvido e mantido principalmente pelo Secure Software Engineering Group do Heinz Nixdorf Institute (Universidade de Paderborn) e Fraunhofer IEM.
Os principais desenvolvedores do PhASAR são: Fabian Schiebel (@fabianbs96)([email protected]), Martin Mory (@MMory)([email protected]), Philipp Dominik Schubert (@pdschubert)(philipp. [email protected]) e outros.
PhASAR requer C++-17.
No entanto, a construção no modo C++20 é suportada como um recurso experimental. Você pode habilitar esta configuração da variável cmake CMAKE_CXX_STANDARD
para 20
. Embora o phasar atualmente não faça uso dos recursos do C++-20 (exceto alguns concept
s atrás de uma borda #ifdef), seu aplicativo cliente que usa apenas o phasar como uma biblioteca pode querer usar o C++20 anterior.
PhASAR está atualmente configurado para suportar LLVM-14.0.*
PhASAR é uma estrutura de análise estática baseada em LLVM escrita em C++. Ele permite que os usuários especifiquem problemas arbitrários de fluxo de dados que são então resolvidos de maneira totalmente automatizada no código alvo IR LLVM especificado. A computação de informações de pontos, gráfico(s) de chamada, etc. é feita pela estrutura, portanto, você pode se concentrar no que importa.
Para manter o PhASAR em um estado adequado para pesquisas de última geração em análise estática, bem como para uso produtivo, temos que fazer alterações radicais. Consulte Alterações recentes para obter informações detalhadas sobre o que foi quebrado recentemente e como migrar.
Temos alguma documentação sobre PhASAR em nosso Wiki . Você provavelmente gostaria de ler este README primeiro.
Por favor, dê também uma olhada no diretório do projeto PhASAR e observe o diretório do projeto examples/
bem como a ferramenta personalizada tools/example-tool/myphasartool.cpp
.
Recomenda-se compilar o PhASAR você mesmo para obter a experiência completa do C++ e ter controle total sobre o modo de construção. No entanto, você também pode experimentar uma das versões pré-construídas do PhASAR ou do contêiner Docker.
Como atalho para a primeira compilação do PhASAR em seu sistema, você pode usar nosso script de bootstrap. Observe que você deve ter o python instalado para que o script funcione corretamente.
./bootstrap.sh
Nota: Se você quiser fazer alterações no PhASAR, é recomendado construí-lo no modo Debug:
./bootstrap.sh -DCMAKE_BUILD_TYPE=Debug
O script de bootstrap pode solicitar permissões de superusuário (para instalar as dependências); entretanto não é recomendado iniciar o script inteiro com sudo
.
Para compilações subsequentes, consulte Compilando PhASAR.
Defina as variáveis do sistema para o compilador C e C++ como clang:
export CC=/usr/local/bin/clang
export CXX=/usr/local/bin/clang++
Pode ser necessário ajustar os caminhos de acordo com o seu sistema. Ao clonar o PhASAR do Github, você precisa inicializar os submódulos do PhASAR antes de construí-lo:
git submodule update --init
Se você baixou o PhASAR como uma versão compactada (por exemplo, .zip ou .tar.gz), você pode usar o script init-submodules-release.sh
que clona manualmente os submódulos necessários:
utils/init-submodules-release.sh
Navegue até o diretório PhASAR. Os seguintes comandos farão o trabalho e compilarão a estrutura 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
Depois de usar o script bootstrap.sh
para instalar o PhASAR, as etapas acima já foram concluídas. Use-os como referência se desejar modificar o PhASAR e recompilá-lo.
Após a compilação usando cmake, os dois binários a seguir podem ser encontrados no diretório build/tools:
phasar-cli
- a ferramenta de linha de comando PhASAR (anteriormente chamada de phasar-llvm
) que fornece acesso a análises que já estão implementadas no PhASAR. Use isto se não quiser construir uma ferramenta própria sobre o PhASAR.myphasartool
- um exemplo de ferramenta que mostra como ferramentas podem ser construídas em cima do PhASARTenha cuidado e verifique se ocorrem erros durante a compilação.
Ao usar o CMake para compilar o PhASAR, os seguintes parâmetros opcionais podem ser usados:
Parâmetro: Tipo | Efeito |
---|---|
BUILD_SHARED_LIBS : BOOL | Crie bibliotecas compartilhadas – não é mais recomendado. Você pode querer usar PHASAR_BUILD_DYNLIB (o padrão é OFF) |
PHASAR_BUILD_DYNLIB : BOOL | Crie uma biblioteca compartilhada gorda (o padrão é DESLIGADO) |
CMAKE_BUILD_TYPE :STRING | Construa PhASAR no modo 'Debug', 'RelWithDebInfo' ou 'Release' (o padrão é 'Debug') |
CMAKE_INSTALL_PREFIX : CAMINHO | Caminho onde o PhASAR será instalado se “ninja install” for invocado ou o alvo “install” for compilado (o padrão é /usr/local/phasar) |
PHASAR_CUSTOM_CONFIG_INSTALL_DIR : CAMINHO | Se definido, personaliza o diretório onde os arquivos de configuração do PhASAR estão instalados (o padrão é /usr/local/.phasar-config) |
PHASAR_ENABLE_DYNAMIC_LOG : BOOL | Torna possível ligar e desligar o registrador em tempo de execução (o padrão é ON) |
PHASAR_BUILD_DOC : BOOL | Construa a documentação do PhASAR (o padrão é OFF) |
PHASAR_BUILD_UNITTESTS : BOOL | Construir testes de unidade PhASAR (o padrão é ON) |
PHASAR_BUILD_IR : BOOL | Construir PhASAR IR (necessário para executar os testes de unidade) (o padrão é ON) |
PHASAR_BUILD_OPENSSL_TS_UNITTESTS : BOOL | Crie testes de unidade PhASAR que requerem OpenSSL (o padrão é OFF) |
PHASAR_ENABLE_PAMM :STRING | Habilite o mecanismo de medição de desempenho ('Desativado', 'Core' ou 'Completo', o padrão é Desativado) |
PHASAR_ENABLE_PIC : BOOL | Construir código independente de posição (o padrão é ON) |
PHASAR_ENABLE_WARNINGS : BOOL | Habilitar avisos do compilador (o padrão é ON) |
CMAKE_CXX_STANDARD :INT | Construir phasar no modo C++17 ou C++20 (o padrão é 17) |
Você pode usar esses parâmetros diretamente ou modificar o script do instalador bootstrap.sh
Os longos tempos de compilação do C++ são sempre um problema. Conforme mostrado acima, ao usar cmake a compilação pode ser facilmente executada em paralelo, resultando em tempos de compilação mais curtos. Faça uso disso!
Para testar se tudo funciona conforme o esperado, execute o seguinte comando:
$ phasar-cli -m test/llvm_test_code/basic/module_cpp.ll -D ifds-solvertest
Você pode encontrar a ferramenta phasar-cli
na árvore de construção em tools/phasar-cli
.
Se você obtiver uma saída diferente de uma falha de segmentação ou uma exceção que encerra o programa de forma anormal, tudo funcionará conforme o esperado.
Devido a atualizações infelizes no MacOS e ao manuseio de C++, especialmente nos processadores M1 mais recentes, não podemos oferecer suporte ao desenvolvimento nativo no Mac. A solução mais fácil para desenvolver PhASAR em um Mac agora é usar ambientes de desenvolvimento dockers. Clone este repositório conforme descrito em sua documentação. Depois disso, você deve fazer login uma vez manualmente, como usuário root, executando docker exec -it -u root <container name> /bin/bash
para concluir o restante do processo de construção conforme descrito neste leia-me (instalar submódulos, executar bootstrap. eh, ...). Agora você pode simplesmente anexar seu contêiner docker ao VS Code ou qualquer outro IDE que suporte desenvolvimento remoto.
O PhASAR pode ser instalado usando os scripts de instalação conforme explicado a seguir. No entanto, você não precisa instalar o PhASAR para usá-lo.
A seguir, gostaríamos de dar um exemplo completo de como instalar o PhASAR usando um sistema Ubuntu ou semelhante ao Unix.
Portanto, fornecemos um script de instalação. Para instalar o PhASAR, basta navegar até o diretório de nível superior do PhASAR e usar o seguinte comando:
./bootstrap.sh --install
O script de inicialização pode solicitar permissões de superusuário.
Feito!
Se você já construiu o phasar, basta invocar
sudo ninja install
Recomendamos usar phasar como biblioteca com cmake
.
Se você já instalou o phasar, Use-PhASAR-as-a-library pode ser um bom começo.
Caso contrário, recomendamos adicionar PhASAR como um submódulo git ao seu repositório. Neste caso, basta add_subdirectory
o diretório do submódulo phasar dentro do seu CMakeLists.txt
.
Supondo que você tenha verificado o phasar em external/phasar
, os comandos cmake relacionados ao phasar podem ser assim:
add_subdirectory (external/phasar EXCLUDE_FROM_ALL ) # Build phasar with your tool
...
target_link_libraries (yourphasartool
...
phasar # Make your tool link against phasar
)
Dependendo do uso do PhASAR, você também pode precisar adicionar o LLVM à sua construção.
Para obter mais informações, consulte nossas páginas wiki do PhASAR.
Você está usando o PhASAR e gostaria de nos ajudar no futuro? Então, por favor, ajude-nos preenchendo este formulário da web.
Ao nos dar feedback, você ajuda a decidir em que direção o PhASAR deve caminhar no futuro e nos dá pistas sobre nossa base de usuários. Muito obrigado!
Você é muito bem-vindo para contribuir com o projeto PhASAR. Por favor, certifique-se de instalar nosso gancho de pré-commit que garante que seu commit esteja de acordo com as regras de codificação mais importantes do projeto PhASAR. Para obter mais detalhes, consulte Convenções de Codificação e Contribuições para PhaSAR.
Para instalar o gancho pré-commit, execute os seguintes comandos no diretório raiz do PhASAR:
pip install pre-commit
pre-commit install
Obrigado. E divirta-se com o projeto.