Módulo que verifica os argumentos trocados em chamadas de função. Por exemplo, a biblioteca pode ser usada para detectar swaps em código como:
/* 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 Se você não possui o Ninja instalado, pode usar -G "Unix Makefiles" para gerar frutfiles e construir usando make -j .
Há um aviso de ligante sobre o uso do tmpnam . Esta API é usada apenas pela infraestrutura de teste para gerar um banco de dados de estatísticas temporárias e não é usada como parte da API de verificador de argumento trocada.
../../llvm-install/bin/scan-build -load-plugin lib/SwapDetectorPlugin.so -enable-checker gt.SwapDetector -analyzer-config gt.SwapDetector:ModelPath=sample.db clang++ ~ /dummy.cpp O diretório raiz do repositório possui um banco de dados de amostra, chamado sample.db , que pode ser usado para explorar o comportamento da biblioteca. Esse banco de dados não está completo (abrange apenas dez funções), mas contém informações estatisticamente úteis sobre as funções que abrange.
| Opção | Descrição |
|---|---|
SWAPPED_ARGS_BUILD_CLANG_PLUGIN | Permite a construção do plug -in Clang. Padrão: ON |
SWAPPED_ARGS_BUILD_TESTS | Permite testes de construção. Padrão: ON |
SWAPPED_ARGS_BUILD_PYTHON | Permite a construção da extensão Python. Padrão: OFF |
SWAPPED_ARGS_INSTALL_PYTHON | Permite a instalação da extensão Python, se for construída. Padrão: OFF |
Como parte da configuração do CMake, o mais recente ramo principal do GoogleTest é baixado e construído se a funcionalidade de teste estiver ativada.
Para executar os testes de unidade C ++, verifique se SWAPPED_ARGS_BUILD_TESTS não está desativado ao configurar o projeto CMake. O executável TestSwappedArgsCpp será gerado em compilação bem -sucedido e pode ser executado para realizar testes de unidade.
Para executar os testes de plug -in Clang, você pode executar cmake --build . --target check-all no diretório de construção cmake.
Expandimos os conceitos e algoritmos por trás do Swap Detector em um artigo de pesquisa, publicado na Conferência e Conferência de Código Fonte de 2020 IEEE. Observe que nem todos os algoritmos, heurísticos e recursos descritos no artigo de pesquisa estão presentes nesta implementação.
Este material é baseado em pesquisas patrocinadas pelo Escritório de Operações de Compras do Departamento de Segurança Interna (DHS), divisão de aquisição de S&T via contrato número 70RSAT19C00000056. As opiniões e conclusões aqui contidas são as dos autores e não devem ser interpretadas como necessariamente representando as políticas ou endossos oficiais, expressos ou implícitos, do Departamento de Segurança Interna.