swap detector
1.0.0
模塊檢查功能調用中交換參數的模塊。例如,該庫可用於檢測代碼中的互換:
/* 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 ,可用於探索庫的行為。該數據庫不完整(僅涵蓋十個功能),但確實包含有關其涵蓋功能的統計上有用的信息。
| 選項 | 描述 |
|---|---|
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 。
我們在2020年IEEE源代碼分析和操作會議上發表的研究論文中擴展了交換檢測器背後的概念和算法。請注意,並非所有算法,啟發式方法和研究論文中描述的功能都存在於本實施中。
該材料基於國土安全部(DHS)採購運營辦事處,通過合同編號70RSAT19C00000056贊助。本文所包含的觀點和結論是作者的觀點,不應被解釋為代表國土安全部所表示或暗示的官方政策或認可。