Modul, das nach Eintausch von Argumenten in Funktionsaufrufen prüft. Beispielsweise kann die Bibliothek verwendet werden, um Swaps in Code wie: zu erkennen:
/* 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 Wenn Sie Ninja nicht installiert haben, können Sie -G "Unix Makefiles" Makefiles erzeugen und mit make -j erstellen.
Es gibt eine Linker -Warnung vor der Verwendung von tmpnam . Diese API wird nur von der Testinfrastruktur verwendet, um eine temporäre Statistikdatenbank zu generieren, und wird nicht als Teil der ausgetauschten Argument -Checker -API verwendet.
../../llvm-install/bin/scan-build -load-plugin lib/SwapDetectorPlugin.so -enable-checker gt.SwapDetector -analyzer-config gt.SwapDetector:ModelPath=sample.db clang++ ~ /dummy.cpp Das Stammverzeichnis des Repositorys verfügt über eine Beispieldatenbank mit dem Namen sample.db , mit der das Verhalten der Bibliothek untersucht werden kann. Diese Datenbank ist nicht vollständig (sie deckt nur zehn Funktionen ab), enthält jedoch statistisch nützliche Informationen über die von ihnen abdeckenden Funktionen.
| Option | Beschreibung |
|---|---|
SWAPPED_ARGS_BUILD_CLANG_PLUGIN | Ermöglicht das Erstellen des Clang -Plugins. Standard: on |
SWAPPED_ARGS_BUILD_TESTS | Ermöglicht den Bau von Tests. Standard: on |
SWAPPED_ARGS_BUILD_PYTHON | Ermöglicht den Bau der Python -Erweiterung. Standard: Aus |
SWAPPED_ARGS_INSTALL_PYTHON | Ermöglicht die Installation der Python -Erweiterung, wenn sie gebaut wurde. Standard: Aus |
Im Rahmen der CMAKE -Konfiguration wird der neueste Master -Zweig von Googletest heruntergeladen und erstellt, wenn die Testfunktionen aktiviert sind.
Stellen Sie sicher, dass SWAPPED_ARGS_BUILD_TESTS bei der Konfiguration des CMAKE -Projekts nicht deaktiviert ist, um die C ++ -Nit -Tests auszuführen. Die ausführbare Datei TestSwappedArgsCpp wird bei erfolgreichem Build generiert und kann für die Durchführung von Unit -Tests ausgeführt werden.
Um die Clang -Plugin -Tests auszuführen, können Sie cmake --build . --target check-all aus dem CMake-Build-Verzeichnis.
Wir erweitern die Konzepte und Algorithmen des Swap -Detektors in einer Forschungsarbeit, die auf der Konferenz für IEEE -Quellcode -Analyse und -manipulation von 2020 veröffentlicht wurde. Beachten Sie, dass in dieser Implementierung nicht alle im Forschungsarbeit beschriebenen Algorithmen, Heuristiken und Merkmale vorhanden sind.
Dieses Material basiert auf Forschungsarbeiten, die vom Büro für Beschaffungsoperationen des Department of Homeland Security (DHS) gesponsert werden, S & T Acquisition Division über die Vertragsnummer 70RSAT19C00000056. Die hierin enthaltenen Ansichten und Schlussfolgerungen sind die der Autoren und sollten nicht so interpretiert werden, dass sie die offiziellen Richtlinien oder Vermerke, die entweder ausgedrückt oder impliziert sind, des Ministeriums für Heimatschutz darstellen.