함수 호출에서 스왑 된 인수를 확인하는 모듈. 예를 들어 라이브러리는 다음과 같은 코드의 스왑을 감지하는 데 사용될 수 있습니다.
/* 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 플러그인 구축이 가능합니다. 기본값 : on |
SWAPPED_ARGS_BUILD_TESTS | 구축 테스트를 활성화합니다. 기본값 : on |
SWAPPED_ARGS_BUILD_PYTHON | 파이썬 확장을 구축 할 수 있습니다. 기본값 : OFF |
SWAPPED_ARGS_INSTALL_PYTHON | 파이썬 확장을 구축 한 경우 설치할 수 있습니다. 기본값 : OFF |
CMAKE 구성의 일환으로 Googletest의 최신 마스터 브랜치가 다운로드 및 테스트 기능이 활성화되면 구축됩니다.
CMAKE 프로젝트를 구성 할 때 C ++ 단위 테스트를 실행하려면 CMAKE 프로젝트를 구성 할 때 SWAPPED_ARGS_BUILD_TESTS 비활성화되지 않도록하십시오. TestSwappedArgsCpp 실행 파일은 성공적인 빌드에서 생성되며 단위 테스트를 수행하기 위해 실행할 수 있습니다.
Clang 플러그인 테스트를 실행하려면 cmake --build . --target check-all -CMAKE 빌드 디렉토리에서 cmake --build . --target check-all .
우리는 2020 IEEE 소스 코드 분석 및 조작 회의에 발표 된 연구 논문에서 스왑 탐지기의 개념과 알고리즘을 확장합니다. 연구 논문에 설명 된 모든 알고리즘, 휴리스틱 및 기능 이이 구현에 존재하는 것은 아닙니다.
이 자료는 계약 번호 70RSAT19C00000056을 통한 S & T 인수 부서의 조달 사무국 (DHS) 조달 사무국이 후원하는 연구를 기반으로합니다. 여기에 포함 된 견해와 결론은 저자의 견해와 결론이며, 국토 안보부의 공식 정책이나 묵시적 공식 정책이나 승인을 반드시 나타내는 것으로 해석되어서는 안됩니다.