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赞助。本文所包含的观点和结论是作者的观点,不应被解释为代表国土安全部所表示或暗示的官方政策或认可。