
เวอร์ชัน 2403
PhASAR ได้รับการพัฒนาและดูแลรักษาเป็นหลักโดย Secure Software Engineering Group ที่ Heinz Nixdorf Institute (มหาวิทยาลัยพาเดอร์บอร์น) และ Fraunhofer IEM
นักพัฒนาชั้นนำของ PhASAR ได้แก่ Fabian Schiebel (@fabianbs96)([email protected]), Martin Mory (@MMory)([email protected]), Philipp Dominik Schubert (@pdschubert)(philipp. [email protected]) และอื่นๆ
PhASAR ต้องใช้ C++-17
อย่างไรก็ตาม การสร้างในโหมด C++20 ได้รับการรองรับเป็นคุณลักษณะทดลอง คุณสามารถเปิดใช้งานการตั้งค่านี้ตัวแปร cmake CMAKE_CXX_STANDARD ถึง 20 แม้ว่าปัจจุบัน phasar จะไม่ใช้ฟีเจอร์ C++-20 (ยกเว้น concept บางอย่างที่อยู่หลังเส้นขอบ #ifdef) แต่แอปพลิเคชันไคลเอ็นต์ของคุณที่ ใช้ phasar เป็นไลบรารีอาจต้องการใช้ C++20 ealier
ปัจจุบัน PhASAR ได้รับการตั้งค่าให้รองรับ LLVM-14.0*
PhASAR เป็นเฟรมเวิร์กการวิเคราะห์แบบคงที่บน LLVM ที่เขียนด้วยภาษา C++ ช่วยให้ผู้ใช้สามารถระบุปัญหาการไหลของข้อมูลตามอำเภอใจ ซึ่งจะแก้ไขในลักษณะอัตโนมัติเต็มรูปแบบในโค้ดเป้าหมาย LLVM IR ที่ระบุ การประมวลผลข้อมูลแบบชี้ไปยังกราฟการโทร ฯลฯ จะดำเนินการโดยเฟรมเวิร์ก ดังนั้นคุณจึงสามารถมุ่งเน้นไปที่สิ่งที่สำคัญได้
เพื่อรักษา PhASAR ให้อยู่ในสภาพที่เหมาะสมอย่างยิ่งสำหรับการวิจัยอันล้ำสมัยในด้านการวิเคราะห์ทางสถิต ตลอดจนการใช้งานอย่างมีประสิทธิผล เราจึงต้องทำการเปลี่ยนแปลงที่สำคัญ โปรดดูที่การเปลี่ยนแปลงล่าสุดสำหรับข้อมูลโดยละเอียดเกี่ยวกับสิ่งที่เสียหายเมื่อเร็วๆ นี้และวิธีการย้าย
เรามีเอกสารบางส่วนเกี่ยวกับ PhASAR ใน Wiki ของเรา คุณอาจต้องการอ่าน README นี้ก่อน
โปรดดูไดเร็กทอรีโปรเจ็กต์ของ PhASAR และสังเกตไดเร็กทอรีโปรเจ็กต์ examples/ รวมถึงเครื่องมือที่กำหนดเอง tools/example-tool/myphasartool.cpp
ขอแนะนำให้คอมไพล์ PhASAR ด้วยตัวเองเพื่อรับประสบการณ์ C++ เต็มรูปแบบ และควบคุมโหมดบิลด์ได้เต็มรูปแบบ อย่างไรก็ตาม คุณอาจต้องการลองใช้ PhASAR หรือคอนเทนเนอร์ Docker เวอร์ชันที่สร้างไว้ล่วงหน้าเวอร์ชันใดเวอร์ชันหนึ่ง
คุณสามารถใช้สคริปต์บูตของเราเป็นทางลัดสำหรับ PhASAR บิวด์แรกบนระบบของคุณ โปรดทราบว่าคุณต้องติดตั้ง Python เพื่อให้สคริปต์ทำงานได้อย่างถูกต้อง
./bootstrap.shหมายเหตุ: หากคุณต้องการทำการเปลี่ยนแปลงภายใน PhASAR ขอแนะนำให้สร้างในโหมด Debug:
./bootstrap.sh -DCMAKE_BUILD_TYPE=Debug สคริปต์บูตสแตรปอาจขอสิทธิ์ผู้ใช้ระดับสูง (เพื่อติดตั้งการขึ้นต่อกัน) อย่างไรก็ตาม ไม่แนะนำให้เริ่มสคริปต์ทั้งหมดด้วย sudo
สำหรับรุ่นต่อๆ ไป โปรดดูที่การคอมไพล์ PhASAR
ตั้งค่าตัวแปรของระบบสำหรับคอมไพเลอร์ C และ C++ เป็นเสียงดังกราว:
export CC=/usr/local/bin/clang
export CXX=/usr/local/bin/clang++คุณอาจต้องปรับเส้นทางตามระบบของคุณ เมื่อคุณโคลน PhASAR จาก Github คุณจะต้องเริ่มต้นโมดูลย่อยของ PhASAR ก่อนที่จะสร้าง:
git submodule update --init หากคุณดาวน์โหลด PhASAR ในรูปแบบบีบอัด (เช่น .zip หรือ .tar.gz) คุณสามารถใช้สคริปต์ init-submodules-release.sh ที่จะโคลนโมดูลย่อยที่จำเป็นด้วยตนเอง:
utils/init-submodules-release.shนำทางไปยังไดเรกทอรี PhASAR คำสั่งต่อไปนี้จะทำงานและคอมไพล์กรอบงาน 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 เมื่อคุณใช้สคริปต์ bootstrap.sh เพื่อติดตั้ง PhASAR ขั้นตอนข้างต้นก็เสร็จสิ้นแล้ว ใช้เป็นข้อมูลอ้างอิงหากคุณต้องการแก้ไข PhASAR และคอมไพล์ใหม่
หลังจากการคอมไพล์โดยใช้ cmake คุณจะพบไบนารีสองตัวต่อไปนี้ในไดเร็กทอรี build/tools:
phasar-cli - เครื่องมือบรรทัดคำสั่ง PhASAR (ก่อนหน้านี้เรียกว่า phasar-llvm ) ที่ให้การเข้าถึงการวิเคราะห์ที่นำไปใช้แล้วภายใน PhASAR ใช้สิ่งนี้หากคุณไม่ต้องการสร้างเครื่องมือของตัวเองบน PhASARmyphasartool - เครื่องมือตัวอย่างที่แสดงให้เห็นว่าสามารถสร้างเครื่องมือบน PhASAR ได้อย่างไรโปรดใช้ความระมัดระวังและตรวจสอบว่ามีข้อผิดพลาดเกิดขึ้นระหว่างการรวบรวมหรือไม่
เมื่อใช้ CMake เพื่อคอมไพล์ PhASAR คุณสามารถใช้พารามิเตอร์ทางเลือกต่อไปนี้:
| พารามิเตอร์ : ประเภท | ผล |
|---|---|
| BUILD_SHARED_LIBS : BOOL | สร้างไลบรารีที่ใช้ร่วมกัน -- ไม่แนะนำอีกต่อไป คุณอาจต้องการใช้ PHASAR_BUILD_DYNLIB แทน (ค่าเริ่มต้นคือปิด) |
| PHASAR_BUILD_DYNLIB : BOOL | สร้างไลบรารี่ที่ใช้ร่วมกันหนึ่งอัน (ค่าเริ่มต้นคือปิด) |
| CMAKE_BUILD_TYPE : STRING | สร้าง PhASAR ในโหมด 'Debug', 'RelWithDebInfo' หรือ 'Release' (ค่าเริ่มต้นคือ 'Debug') |
| CMAKE_INSTALL_PREFIX : เส้นทาง | เส้นทางที่จะติดตั้ง PhASAR หากเรียกใช้ "การติดตั้งนินจา" หรือสร้างเป้าหมาย "ติดตั้ง" (ค่าเริ่มต้นคือ /usr/local/phasar) |
| PHASAR_CUSTOM_CONFIG_INSTALL_DIR : PATH | หากตั้งค่าไว้ ให้ปรับแต่งไดเร็กทอรีที่ติดตั้งไฟล์การกำหนดค่าสำหรับ PhASAR (ค่าเริ่มต้นคือ /usr/local/.phasar-config) |
| PHASAR_ENABLE_DYNAMIC_LOG : BOOL | ทำให้สามารถเปิดและปิดเครื่องบันทึกขณะรันไทม์ได้ (ค่าเริ่มต้นคือเปิด) |
| PHASAR_BUILD_DOC : BOOL | สร้างเอกสาร PhASAR (ค่าเริ่มต้นคือปิด) |
| PHASAR_BUILD_UNITTESTS : BOOL | สร้างการทดสอบหน่วย PhASAR (ค่าเริ่มต้นคือเปิด) |
| PHASAR_BUILD_IR : BOOL | สร้าง PhASAR IR (จำเป็นสำหรับการรันการทดสอบหน่วย) (ค่าเริ่มต้นคือเปิด) |
| PHASAR_BUILD_OPENSSL_TS_UNITTESTS : BOOL | สร้างการทดสอบหน่วย PhASAR ที่ต้องใช้ OpenSSL (ค่าเริ่มต้นคือปิด) |
| PHASAR_ENABLE_PAMM : STRING | เปิดใช้งานกลไกการวัดประสิทธิภาพ ('ปิด', 'คอร์' หรือ 'เต็ม' ค่าเริ่มต้นคือปิด) |
| PHASAR_ENABLE_PIC : BOOL | สร้างโค้ดที่ไม่ขึ้นกับตำแหน่ง (ค่าเริ่มต้นคือเปิด) |
| PHASAR_ENABLE_WARNINGS : BOOL | เปิดใช้งานคำเตือนคอมไพเลอร์ (ค่าเริ่มต้นคือเปิด) |
| CMAKE_CXX_STANDARD : INT | สร้าง phasar ในโหมด C ++ 17 หรือ C ++ 20 (ค่าเริ่มต้นคือ 17) |
คุณสามารถใช้พารามิเตอร์เหล่านี้โดยตรงหรือแก้ไขสคริปต์ตัวติดตั้ง bootstrap.sh
เวลาคอมไพล์ที่ยาวนานของ C++ มักจะสร้างความเจ็บปวดเสมอ ดังที่แสดงไว้ข้างต้น เมื่อใช้ cmake การคอมไพล์สามารถรันแบบขนานได้อย่างง่ายดาย ส่งผลให้เวลาในการคอมไพล์สั้นลง ใช้ประโยชน์จากมัน!
เพื่อทดสอบว่าทุกอย่างทำงานตามที่คาดไว้หรือไม่ โปรดรันคำสั่งต่อไปนี้:
$ phasar-cli -m test/llvm_test_code/basic/module_cpp.ll -D ifds-solvertest
คุณสามารถค้นหาเครื่องมือ phasar-cli ได้ใน build-tree ใต้ tools/phasar-cli
หากคุณได้รับเอาต์พุตอื่นที่ไม่ใช่ข้อผิดพลาดในการแบ่งส่วน หรือมีข้อยกเว้นที่ทำให้โปรแกรมสิ้นสุดอย่างผิดปกติ ทุกอย่างจะทำงานตามที่คาดไว้
เนื่องจากการอัปเดตที่โชคร้ายของ MacOS และการจัดการ C++ โดยเฉพาะบนโปรเซสเซอร์ M1 รุ่นใหม่ เราไม่สามารถรองรับการพัฒนาแบบเนทิฟบน Mac ได้ ทางออกที่ง่ายที่สุดในการพัฒนา PhASAR บน Mac ในตอนนี้คือการใช้สภาพแวดล้อมการพัฒนานักเทียบท่า โคลนที่เก็บนี้ตามที่อธิบายไว้ในเอกสารประกอบ หลังจากนั้น คุณต้องเข้าสู่ระบบด้วยตนเองหนึ่งครั้งในฐานะผู้ใช้รูทโดยการรัน docker exec -it -u root <container name> /bin/bash เพื่อดำเนินการกระบวนการสร้างส่วนที่เหลือให้เสร็จสิ้นตามที่อธิบายไว้ใน readme นี้ (ติดตั้ง submodules, รัน bootstrap. ช, ...) ตอนนี้คุณสามารถแนบคอนเทนเนอร์นักเทียบท่าของคุณเข้ากับ VS Code หรือ IDE อื่น ๆ ที่รองรับการพัฒนาระยะไกล
PhASAR สามารถติดตั้งได้โดยใช้สคริปต์ตัวติดตั้งตามที่อธิบายไว้ต่อไปนี้ อย่างไรก็ตาม คุณไม่จำเป็นต้องติดตั้ง PhASAR เพื่อใช้งาน
ต่อไปนี้ เราอยากจะยกตัวอย่างที่สมบูรณ์ของวิธีการติดตั้ง PhASAR โดยใช้ระบบ Ubuntu หรือ Unix
ดังนั้นเราจึงจัดทำสคริปต์การติดตั้ง หากต้องการติดตั้ง PhASAR เพียงไปที่ไดเร็กทอรีระดับบนสุดของ PhASAR และใช้คำสั่งต่อไปนี้:
./bootstrap.sh --installสคริปต์บูตสแตรปอาจขอสิทธิ์ผู้ใช้ขั้นสูง
เสร็จแล้ว!
หากคุณได้สร้าง phasar แล้ว คุณก็สามารถเรียกใช้ได้
sudo ninja install เราขอแนะนำการใช้ phasar เป็นห้องสมุดที่มี cmake
หากคุณได้ติดตั้ง phasar แล้ว Use-PhASAR-as-a-library อาจเป็นการเริ่มต้นที่ดี
มิฉะนั้น เราขอแนะนำให้เพิ่ม PhASAR เป็นโมดูลย่อย git ในพื้นที่เก็บข้อมูลของคุณ ในกรณีนี้ เพียง add_subdirectory ไดเรกทอรีย่อย phasar ภายใน CMakeLists.txt ของคุณ
สมมติว่าคุณได้ตรวจสอบ phasar ใน external/phasar แล้ว คำสั่ง cmake ที่เกี่ยวข้องกับ phasar อาจมีลักษณะดังนี้:
add_subdirectory (external/phasar EXCLUDE_FROM_ALL ) # Build phasar with your tool
...
target_link_libraries (yourphasartool
...
phasar # Make your tool link against phasar
)ขึ้นอยู่กับการใช้ PhASAR ของคุณ คุณอาจต้องเพิ่ม LLVM ให้กับบิลด์ของคุณ
สำหรับข้อมูลเพิ่มเติม โปรดดูหน้าวิกิ PhASAR ของเรา
คุณกำลังใช้ PhASAR และต้องการช่วยเราในอนาคตหรือไม่? โปรดสนับสนุนเราด้วยการกรอกแบบฟอร์มบนเว็บนี้
ด้วยการให้ข้อเสนอแนะแก่เรา คุณช่วยในการตัดสินใจว่า PhASAR ควรก้าวไปในทิศทางใดในอนาคต และให้เบาะแสเกี่ยวกับฐานผู้ใช้ของเรา ขอบคุณมาก!
คุณยินดีอย่างยิ่งที่จะมีส่วนร่วมในโครงการ PhASAR โปรดตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง hook การคอมมิตล่วงหน้าของเราเพื่อให้แน่ใจว่าการคอมมิตของคุณเป็นไปตามกฎการเขียนโค้ดที่สำคัญที่สุดของโปรเจ็กต์ PhASAR สำหรับรายละเอียดเพิ่มเติม โปรดดูอนุสัญญาการเข้ารหัสและการมีส่วนร่วมใน PhASAR
หากต้องการติดตั้ง hook ที่คอมมิตล่วงหน้า โปรดรันคำสั่งต่อไปนี้ในไดเร็กทอรีรากของ PhASAR:
pip install pre-commit
pre-commit installขอบคุณ. และร่วมสนุกกับโครงการ