เวอร์ชัน 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
ขอบคุณ. และร่วมสนุกกับโครงการ