Modul yang memeriksa argumen bertukar dalam panggilan fungsi. Misalnya, perpustakaan dapat digunakan untuk mendeteksi swap dalam kode seperti:
/* 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 Jika Anda tidak menginstal ninja, Anda dapat menggunakan -G "Unix Makefiles" untuk menghasilkan makefiles dan membangun menggunakan make -j .
Ada peringatan penghubung tentang penggunaan tmpnam . API ini hanya digunakan oleh infrastruktur pengujian untuk menghasilkan database statistik sementara, dan tidak digunakan sebagai bagian dari API pemeriksa argumen yang ditukar.
../../llvm-install/bin/scan-build -load-plugin lib/SwapDetectorPlugin.so -enable-checker gt.SwapDetector -analyzer-config gt.SwapDetector:ModelPath=sample.db clang++ ~ /dummy.cpp Direktori root repositori memiliki database sampel, bernama sample.db , yang dapat digunakan untuk mengeksplorasi perilaku perpustakaan. Basis data ini tidak lengkap (hanya mencakup sepuluh fungsi), tetapi memang berisi informasi yang berguna secara statistik tentang fungsi yang dicakupnya.
| Pilihan | Keterangan |
|---|---|
SWAPPED_ARGS_BUILD_CLANG_PLUGIN | Memungkinkan membangun plugin dentang. Default: ON |
SWAPPED_ARGS_BUILD_TESTS | Memungkinkan tes bangunan. Default: ON |
SWAPPED_ARGS_BUILD_PYTHON | Memungkinkan membangun ekstensi python. Default: Off |
SWAPPED_ARGS_INSTALL_PYTHON | Memungkinkan memasang ekstensi python jika telah dibangun. Default: Off |
Sebagai bagian dari konfigurasi CMake, cabang utama Googletest terbaru diunduh dan dibangun jika fungsi pengujian diaktifkan.
Untuk menjalankan tes unit C ++, pastikan SWAPPED_ARGS_BUILD_TESTS tidak dinonaktifkan saat mengkonfigurasi proyek CMake. TestSwappedArgsCpp dapat dihasilkan pada pembangunan yang berhasil dan dapat dijalankan untuk melakukan pengujian unit.
Untuk menjalankan tes plugin clang, Anda dapat mengeksekusi cmake --build . --target check-all dari direktori cmake build.
Kami memperluas konsep dan algoritma di balik detektor swap dalam makalah penelitian, yang diterbitkan dalam konferensi analisis kode sumber IEEE dan manipulasi IEEE. Perhatikan bahwa tidak semua algoritma, heuristik, dan fitur yang dijelaskan dalam makalah penelitian hadir dalam implementasi ini.
Materi ini didasarkan pada penelitian yang disponsori oleh kantor pengadaan Departemen Keamanan Dalam Negeri (DHS), Divisi Akuisisi S&T melalui nomor kontrak 70RSAT19C00000056. Pandangan dan kesimpulan yang terkandung di sini adalah dari penulis dan tidak boleh ditafsirkan sebagai harus mewakili kebijakan atau dukungan resmi, baik diungkapkan maupun tersirat, dari Departemen Keamanan Dalam Negeri.