関数呼び出しで引数の交換をチェックするモジュール。たとえば、ライブラリを使用して、次のようなコードのスワップを検出できます。
/* 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忍者がインストールされていない場合は、 -G "Unix Makefiles"を使用して代わりにmakefilesを生成し、 make -jを使用して構築できます。
tmpnamの使用に関するリンカー警告があります。このAPIは、テストインフラストラクチャによってのみ使用され、一時的な統計データベースを生成するため、スワップされた引数チェッカーAPIの一部として使用されません。
../../llvm-install/bin/scan-build -load-plugin lib/SwapDetectorPlugin.so -enable-checker gt.SwapDetector -analyzer-config gt.SwapDetector:ModelPath=sample.db clang++ ~ /dummy.cppリポジトリのルートディレクトリには、 sample.dbという名前のサンプルデータベースがあり、ライブラリの動作を探索するために使用できます。このデータベースは完全ではありません(10個の関数のみをカバーします)が、カバーする機能に関する統計的に有用な情報が含まれています。
| オプション | 説明 |
|---|---|
SWAPPED_ARGS_BUILD_CLANG_PLUGIN | Clangプラグインの構築を可能にします。デフォルト:オン |
SWAPPED_ARGS_BUILD_TESTS | 構築テストを有効にします。デフォルト:オン |
SWAPPED_ARGS_BUILD_PYTHON | Python拡張機能の構築を可能にします。デフォルト:オフ |
SWAPPED_ARGS_INSTALL_PYTHON | Python拡張機能が構築されている場合は、Python拡張機能をインストールできます。デフォルト:オフ |
Cmake構成の一部として、GoogleTestの最新のマスターブランチがダウンロードされ、テスト機能が有効になっている場合は構築されます。
C ++ユニットテストを実行するには、CMAKEプロジェクトを構成するときにSWAPPED_ARGS_BUILD_TESTSが無効になっていないことを確認してください。 TestSwappedArgsCpp実行可能ファイルは、成功したビルドで生成され、単体テストを実行するために実行できます。
Clangプラグインテストを実行するには、 cmake --build . --target check-all - cmakeビルドディレクトリからのcmake --build . --target check-all 。
2020年のIEEEソースコード分析と操作会議に掲載された研究論文のSwap検出器の背後にある概念とアルゴリズムを拡張します。この実装には、すべてのアルゴリズム、ヒューリスティック、および研究論文に記載されている機能が存在するわけではないことに注意してください。
この資料は、契約番号70RSAT19C00000056を介して、国土安全保障省(DHS)の調達事業局が後援する研究に基づいています。本明細書に含まれる見解と結論は著者の見解であり、国土安全保障省の表明または黙示のいずれかの公式政策または承認を必ずしも代表するものとして解釈すべきではない。