Clam adalah penganalisa statis berbasis interpretasi abstrak yang menghitung invarian induktif untuk bitcode LLVM berdasarkan pustaka kepiting. Cabang ini mendukung LLVM 14.
Dokumentasi yang tersedia dapat ditemukan di wiki clam dan wiki kepiting.
Anda bisa mendapatkan kerang dari hub Docker (dibangun malam) menggunakan perintah:
docker pull seahorn/clam-llvm14:nightly
CLAM ditulis dalam C ++ dan sangat menggunakan pustaka Boost. Persyaratan utamanya adalah:
-DCRAB_USE_APRON=ON atau -DCRAB_USE_ELINA=ON )-DCRAB_USE_PPLITE=ON )Di Linux, Anda dapat menginstal persyaratan yang mengetik perintah:
sudo apt-get install libboost-all-dev libboost-program-options-dev
sudo apt-get install libgmp-dev
sudo apt-get install libmpfr-dev
sudo apt-get install libflint-dev
Infrastruktur pengujian tergantung pada beberapa paket Python. Untuk menjalankan tes, Anda perlu menginstal lit dan OutputCheck :
pip3 install lit
pip3 install OutputCheck
Langkah -langkah kompilasi dasar adalah:
1. mkdir build && cd build
2. cmake -DCMAKE_INSTALL_PREFIX=$DIR ../
3. cmake --build . --target crab && cmake ..
4. cmake --build . --target extra && cmake ..
5. cmake --build . --target install
Perintah di baris 2 akan mencoba menemukan LLVM 14 dari jalur standar. Jika Anda menginstal LLVM 14 di jalur non-standar, maka tambahkan opsi -DLLVM_DIR=$LLVM-14_INSTALL_DIR/lib/cmake/llvm ke baris 2. Perintah di baris 3 akan mengunduh kepiting dan mengkompilasinya dari sumber. CLAM menggunakan dua komponen eksternal yang diinstal melalui target extra pada baris 4. Komponen ini adalah:
SEA-DSA adalah analisis tumpukan yang digunakan untuk menerjemahkan instruksi memori LLVM. Detail dapat ditemukan di sini dan di sini.
LLVM-Seahorn menyediakan versi khusus komponen LLVM untuk membuatnya lebih setuju untuk verifikasi. llvm-seahorn adalah opsional tetapi direkomendasikan dengan cepat.
Domain kotak/celemek/elina/pplite memerlukan perpustakaan pihak ketiga. Untuk menghindari beban bagi pengguna yang tidak tertarik pada domain tersebut, pemasangan perpustakaan adalah opsional.
Jika Anda ingin menggunakan domain Boxes maka tambahkan -DCRAB_USE_LDD=ON Opsi.
Jika Anda ingin menggunakan domain pustaka apron maka tambahkan -DCRAB_USE_APRON=ON opsi.
Jika Anda ingin menggunakan Domain Perpustakaan Elina maka tambahkan -DCRAB_USE_ELINA=ON Opsi.
Jika Anda ingin menggunakan domain pustaka pplite maka tambahkan -DCRAB_USE_APRON=ON -DCRAB_USE_PPLITE=ON opsi.
Penting: Apron dan Elina saat ini tidak kompatibel sehingga Anda tidak dapat mengaktifkan -DCRAB_USE_APRON=ON dan -DCRAB_USE_ELINA=ON pada saat yang sama.
Misalnya, untuk menginstal kerang dengan kotak dan celemek:
1. mkdir build && cd build
2. cmake -DCMAKE_INSTALL_PREFIX=$DIR -DCRAB_USE_LDD=ON -DCRAB_USE_APRON=ON ../
3. cmake --build . --target crab && cmake ..
4. cmake --build . --target extra && cmake ..
5. cmake --build . --target ldd && cmake ..
6. cmake --build . --target apron && cmake ..
7. cmake --build . --target install
Misalnya, baris 5 dan 6 masing -masing akan mengunduh, menyusun dan menginstal pustaka kotak dan apron. Jika Anda telah menyusun dan menginstal perpustakaan ini di mesin Anda, lalu lewati perintah di baris 5 dan 6 dan tambahkan opsi berikut di baris 2.
-DAPRON_ROOT=$APRON_INSTALL_DIR-DELINA_ROOT=$ELINA_INSTALL_DIR-DCUDD_ROOT=$CUDD_INSTALL_DIR -DLDD_ROOT=$LDD_INSTALL_DIR-DPPLITE_ROOT=$PPLITE_INSTALL_DIR -DFLINT_ROOT=$FLINT_INSTALL_DIR Untuk menjalankan beberapa tes regresi:
cmake --build . --target test-simple
Clam menyediakan skrip Python yang disebut clam.py (terletak di $DIR/bin di mana $DIR adalah direktori tempat clam diinstal) untuk berinteraksi dengan pengguna. Perintah paling sederhana adalah clam.py test.c Ketik clam.py --help untuk semua opsi dan baca wiki kami.