Versi 2403
PhASAR terutama dikembangkan dan dikelola oleh Secure Software Engineering Group di Heinz Nixdorf Institute (Universitas Paderborn) dan Fraunhofer IEM.
Pengembang utama PhASAR adalah: Fabian Schiebel (@fabianbs96)([email protected]), Martin Mory (@MMory)([email protected]), Philipp Dominik Schubert (@pdschubert)(philipp. [email protected]) dan lainnya.
PhASAR membutuhkan C++-17.
Namun, membangun dalam mode C++20 didukung sebagai fitur eksperimental. Anda dapat mengaktifkan pengaturan ini pada variabel cmake CMAKE_CXX_STANDARD
ke 20
. Meskipun phasar saat ini tidak menggunakan fitur C++-20 (kecuali untuk beberapa concept
di belakang batas #ifdef), aplikasi klien Anda yang hanya menggunakan phasar sebagai pustaka mungkin ingin menggunakan C++20 lebih awal.
PhASAR saat ini disiapkan untuk mendukung LLVM-14.0.*
PhASAR adalah kerangka analisis statis berbasis LLVM yang ditulis dalam C++. Hal ini memungkinkan pengguna untuk menentukan masalah aliran data sewenang-wenang yang kemudian diselesaikan secara otomatis pada kode target LLVM IR yang ditentukan. Menghitung informasi titik-ke, grafik panggilan, dll. dilakukan oleh kerangka kerja, sehingga Anda dapat fokus pada hal-hal yang penting.
Untuk menjaga PhASAR dalam kondisi yang sesuai untuk penelitian canggih dalam analisis statis, serta untuk penggunaan produktif, kita harus melakukan perubahan besar. Silakan merujuk ke Perubahan yang Dapat Mengganggu untuk informasi detail tentang apa yang rusak baru-baru ini dan cara melakukan migrasi.
Kami memiliki beberapa dokumentasi tentang PhASAR di Wiki kami. Anda mungkin ingin membaca README ini terlebih dahulu.
Silakan lihat juga direktori proyek PhASAR dan perhatikan direktori proyek examples/
serta tools/example-tool/myphasartool.cpp
.
Disarankan untuk mengkompilasi PhASAR sendiri untuk mendapatkan pengalaman C++ penuh dan memiliki kontrol penuh atas mode build. Namun, Anda mungkin juga ingin mencoba salah satu versi PhASAR atau container Docker yang sudah dibuat sebelumnya.
Sebagai jalan pintas untuk build PhASAR pertama di sistem Anda, Anda dapat menggunakan skrip bootstrap kami. Harap dicatat bahwa Anda harus menginstal python agar skrip dapat berfungsi dengan baik.
./bootstrap.sh
Catatan: Jika Anda ingin melakukan perubahan dalam PhASAR, disarankan untuk membuatnya dalam mode Debug:
./bootstrap.sh -DCMAKE_BUILD_TYPE=Debug
Skrip bootstrap mungkin meminta izin pengguna super (untuk menginstal dependensi); namun tidak disarankan untuk memulai seluruh skrip dengan sudo
.
Untuk build selanjutnya, lihat Mengompilasi PhASAR.
Atur variabel sistem untuk kompiler C dan C++ menjadi dentang:
export CC=/usr/local/bin/clang
export CXX=/usr/local/bin/clang++
Anda mungkin perlu menyesuaikan jalur sesuai dengan sistem Anda. Saat Anda mengkloning PhASAR dari Github, Anda perlu menginisialisasi submodul PhASAR sebelum membuatnya:
git submodule update --init
Jika Anda mengunduh PhASAR sebagai rilis terkompresi (misalnya .zip atau .tar.gz), Anda dapat menggunakan skrip init-submodules-release.sh
yang secara manual mengkloning submodul yang diperlukan:
utils/init-submodules-release.sh
Arahkan ke direktori PhASAR. Perintah berikut akan melakukan pekerjaan dan mengkompilasi kerangka PhASAR:
mkdir build
cd build/
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ..
ninja -j $( nproc ) # or use a different number of cores to compile it
sudo ninja install # only if you wish to install PhASAR system wide
Jika Anda sudah menggunakan script bootstrap.sh
untuk menginstal PhASAR, maka langkah di atas sudah dilakukan. Gunakan mereka sebagai referensi jika Anda ingin memodifikasi PhASAR dan mengkompilasi ulangnya.
Setelah kompilasi menggunakan cmake, dua biner berikut dapat ditemukan di direktori build/tools:
phasar-cli
- alat baris perintah PhASAR (sebelumnya disebut phasar-llvm
) yang menyediakan akses ke analisis yang sudah diterapkan dalam PhASAR. Gunakan ini jika Anda tidak ingin membuat alat sendiri di atas PhASAR.myphasartool
- contoh alat yang menunjukkan bagaimana alat dapat dibangun di atas PhASARHarap berhati-hati dan periksa apakah terjadi kesalahan selama kompilasi.
Saat menggunakan CMake untuk mengkompilasi PhASAR, parameter opsional berikut dapat digunakan:
Parameter : Tipe | Memengaruhi |
---|---|
BUILD_SHARE_LIBS : BOOL | Bangun perpustakaan bersama -- Tidak direkomendasikan lagi. Anda mungkin ingin menggunakan PHASAR_BUILD_DYNLIB (standarnya OFF) |
PHASAR_BUILD_DYNLIB : BOOL | Bangun satu perpustakaan bersama yang besar (defaultnya MATI) |
CMAKE_BUILD_TYPE : STRING | Bangun PhASAR dalam mode 'Debug', 'RelWithDebInfo' atau 'Rilis' (defaultnya adalah 'Debug') |
CMAKE_INSTALL_PREFIX : JALUR | Jalur di mana PhASAR akan diinstal jika "ninja install" dipanggil atau target "install" dibuat (defaultnya adalah /usr/local/phasar) |
PHASAR_CUSTOM_CONFIG_INSTALL_DIR : JALUR | Jika disetel, sesuaikan direktori tempat file konfigurasi untuk PhASAR diinstal (defaultnya adalah /usr/local/.phasar-config) |
PHASAR_ENABLE_DYNAMIC_LOG : BOOL | Memungkinkan untuk menghidupkan dan mematikan logger saat runtime (standarnya adalah ON) |
PHASAR_BUILD_DOC : BOOL | Buat dokumentasi PhASAR (defaultnya MATI) |
PHASAR_BUILD_UNITTESTS : BOOL | Buat pengujian unit PhASAR (defaultnya AKTIF) |
PHASAR_BUILD_IR : BOOL | Bangun PhASAR IR (diperlukan untuk menjalankan pengujian unit) (defaultnya AKTIF) |
PHASAR_BUILD_OPENSSL_TS_UNITTESTS : BOOL | Buat pengujian unit PhASAR yang memerlukan OpenSSL (defaultnya OFF) |
PHASAR_ENABLE_PAMM : STRING | Aktifkan mekanisme pengukuran kinerja ('Off', 'Core' atau 'Full', defaultnya adalah Off) |
PHASAR_ENABLE_PIC : BOOL | Kode Bangun Posisi-Independen (defaultnya AKTIF) |
PHASAR_ENABLE_WARNINGS : BOOL | Aktifkan peringatan kompiler (defaultnya AKTIF) |
CMAKE_CXX_STANDARD : INT | Bangun phasar dalam mode C++17 atau C++20 (defaultnya adalah 17) |
Anda dapat menggunakan parameter ini secara langsung atau memodifikasi skrip penginstal bootstrap.sh
Waktu kompilasi C++ yang lama selalu menyusahkan. Seperti yang ditunjukkan di atas, saat menggunakan cmake, kompilasi dapat dengan mudah dijalankan secara paralel, sehingga waktu kompilasi menjadi lebih singkat. Manfaatkan itu!
Untuk menguji apakah semuanya berfungsi seperti yang diharapkan, silakan jalankan perintah berikut:
$ phasar-cli -m test/llvm_test_code/basic/module_cpp.ll -D ifds-solvertest
Anda dapat menemukan alat phasar-cli
di pohon build di bawah tools/phasar-cli
.
Jika Anda mendapatkan keluaran selain kesalahan segmentasi atau pengecualian, menghentikan program secara tidak normal, semuanya berfungsi seperti yang diharapkan.
Karena pembaruan yang tidak menguntungkan pada MacOS dan penanganan C++, terutama pada prosesor M1 yang lebih baru, kami tidak dapat mendukung pengembangan asli di Mac. Solusi termudah untuk mengembangkan PhASAR di Mac saat ini adalah dengan menggunakan lingkungan pengembangan buruh pelabuhan. Kloning repositori ini seperti yang dijelaskan dalam dokumentasinya. Setelah itu, Anda harus login sekali secara manual, sebagai pengguna root dengan menjalankan docker exec -it -u root <container name> /bin/bash
untuk menyelesaikan sisa proses build seperti yang dijelaskan dalam readme ini (instal submodul, jalankan bootstrap. sst, ...). Sekarang Anda cukup melampirkan wadah buruh pelabuhan Anda ke VS Code atau IDE lainnya, yang mendukung pengembangan jarak jauh.
PhASAR dapat diinstal menggunakan script installer seperti yang dijelaskan berikut ini. Namun, Anda tidak perlu menginstal PhASAR untuk menggunakannya.
Berikut ini kami ingin memberikan contoh lengkap cara install PhASAR menggunakan sistem mirip Ubuntu atau Unix.
Oleh karena itu, kami menyediakan skrip instalasi. Untuk menginstal PhASAR, cukup navigasikan ke direktori tingkat atas PhASAR dan gunakan perintah berikut:
./bootstrap.sh --install
Skrip bootstrap mungkin meminta izin pengguna super.
Selesai!
Jika Anda sudah membangun Phasar, Anda tinggal memanggil
sudo ninja install
Kami merekomendasikan penggunaan phasar sebagai perpustakaan dengan cmake
.
Jika Anda sudah menginstal phasar, Use-PhASAR-as-a-library mungkin merupakan awal yang baik.
Jika tidak, kami menyarankan untuk menambahkan PhASAR sebagai submodul git ke repositori Anda. Dalam hal ini, cukup add_subdirectory
direktori submodul phasar dalam CMakeLists.txt
Anda.
Dengan asumsi Anda telah memeriksa phasar di external/phasar
, perintah cmake terkait phasar mungkin terlihat seperti ini:
add_subdirectory (external/phasar EXCLUDE_FROM_ALL ) # Build phasar with your tool
...
target_link_libraries (yourphasartool
...
phasar # Make your tool link against phasar
)
Bergantung pada penggunaan PhASAR, Anda juga mungkin perlu menambahkan LLVM ke build.gradle Anda.
Untuk informasi lebih lanjut silakan lihat halaman wiki PhASAR kami.
Anda menggunakan PhASAR dan ingin membantu kami di masa depan? Maka mohon dukung kami dengan mengisi formulir web ini.
Dengan memberi kami umpan balik, Anda membantu memutuskan arah apa yang harus diambil PhASAR di masa depan dan memberi kami petunjuk tentang basis pengguna kami. Terima kasih banyak!
Anda dipersilakan untuk berkontribusi pada proyek PhASAR. Pastikan Anda memasang hook pra-komit kami yang memastikan komitmen Anda mematuhi aturan pengkodean paling penting dari proyek PhASAR. Untuk lebih jelasnya silakan lihat Konvensi Pengkodean dan Berkontribusi pada PhASAR.
Untuk menginstal pre-commit hook, jalankan perintah berikut di direktori root PhASAR:
pip install pre-commit
pre-commit install
Terima kasih. Dan bersenang-senanglah dengan proyek ini.