الإصدار 2403
تم تطوير PhASAR وصيانته بشكل أساسي بواسطة مجموعة هندسة البرمجيات الآمنة في معهد Heinz Nixdorf (جامعة بادربورن) وFraunhofer IEM.
المطورون الرئيسيون لـ PhASAR هم: فابيان شيبل (@fabianbs96)([email protected])، ومارتن موري (@MMory)([email protected])، وفيليب دومينيك شوبرت (@pdschubert)(philipp. [email protected]) وآخرين.
يتطلب PhASAR C++-17.
ومع ذلك، يتم دعم البناء في وضع C++20 كميزة تجريبية. يمكنك تمكين هذا الإعداد لمتغير cmake CMAKE_CXX_STANDARD
إلى 20
. على الرغم من أن phasar لا يستخدم حاليًا ميزات C++-20 (باستثناء بعض concept
خلف حدود #ifdef)، فإن تطبيق العميل الخاص بك الذي يستخدم phasar كمكتبة فقط قد يرغب في استخدام C++20 بشكل أفضل.
تم إعداد PhASAR حاليًا لدعم LLVM-14.0.*
PhASAR هو إطار تحليل ثابت قائم على LLVM ومكتوب بلغة C++. فهو يسمح للمستخدمين بتحديد مشاكل تدفق البيانات التعسفية والتي يتم حلها بعد ذلك بطريقة مؤتمتة بالكامل على رمز هدف LLVM IR المحدد. يتم حساب معلومات النقاط، والرسم البياني (الرسومات البيانية)، وما إلى ذلك من خلال إطار العمل، وبالتالي يمكنك التركيز على ما يهم.
للحفاظ على PhASAR في حالة مناسبة تمامًا لأحدث الأبحاث في التحليل الثابت، وكذلك للاستخدام الإنتاجي، يتعين علينا إجراء تغييرات جذرية. يرجى الرجوع إلى "تغييرات معطلة" للحصول على معلومات تفصيلية حول ما تم تعطيله مؤخرًا وكيفية الترحيل.
لدينا بعض الوثائق حول PhASAR في ويكي الخاصة بنا. ربما ترغب في قراءة هذا الملف التمهيدي أولاً.
يرجى أيضًا إلقاء نظرة على دليل مشروع PhASAR وملاحظة examples/
بالإضافة إلى tools/example-tool/myphasartool.cpp
.
يوصى بتجميع PhASAR بنفسك للحصول على تجربة C++ الكاملة والتحكم الكامل في وضع البناء. ومع ذلك، قد ترغب أيضًا في تجربة أحد الإصدارات المعدة مسبقًا من PhASAR أو حاوية Docker.
كاختصار لأول PhASAR تم إنشاؤه على نظامك، يمكنك استخدام برنامج bootstrap النصي الخاص بنا. يرجى ملاحظة أنه يجب تثبيت لغة python حتى يعمل البرنامج النصي بشكل صحيح.
./bootstrap.sh
ملاحظة: إذا كنت تريد إجراء تغييرات داخل PhASAR، فمن المستحسن إنشاءه في وضع التصحيح:
./bootstrap.sh -DCMAKE_BUILD_TYPE=Debug
قد يطلب البرنامج النصي bootstrap أذونات المستخدم المتميز (لتثبيت التبعيات)؛ ومع ذلك، لا يُنصح ببدء البرنامج النصي بأكمله باستخدام sudo
.
للبنيات اللاحقة، راجع تجميع PhASAR.
اضبط متغيرات النظام لمترجم C وC++ على clang:
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. استخدم هذا إذا كنت لا ترغب في إنشاء أداة خاصة أعلى PhASAR.myphasartool
- أداة نموذجية توضح كيف يمكن بناء الأدوات فوق PhASARيرجى توخي الحذر والتحقق من حدوث أخطاء أثناء التجميع.
عند استخدام CMake لتجميع PhASAR، يمكن استخدام المعلمات الاختيارية التالية:
المعلمة: النوع | تأثير |
---|---|
BUILD_SHARED_LIBS : منطقي | إنشاء مكتبات مشتركة - لم يعد مستحسنًا بعد الآن. قد ترغب في استخدام PHASAR_BUILD_DYNLIB بدلاً من ذلك (الإعداد الافتراضي هو OFF) |
PHASAR_BUILD_DYNLIB : منطقي | إنشاء مكتبة مشتركة كبيرة واحدة (الإعداد الافتراضي هو OFF) |
CMAKE_BUILD_TYPE : سلسلة | إنشاء PhASAR في وضع "Debug" أو "RelWithDebInfo" أو "Release" (الوضع الافتراضي هو "Debug") |
CMAKE_INSTALL_PREFIX : المسار | المسار الذي سيتم فيه تثبيت PhASAR في حالة استدعاء "ninja install" أو إنشاء هدف "install" (الافتراضي هو /usr/local/phasar) |
PHASAR_CUSTOM_CONFIG_INSTALL_DIR : PATH | إذا تم تعيينه، فسيتم تخصيص الدليل، حيث تم تثبيت ملفات التكوين لـ PhASAR (الافتراضي هو /usr/local/.phasar-config) |
PHASAR_ENABLE_DYNAMIC_LOG : منطقي | يجعل من الممكن تشغيل وإيقاف المسجل في وقت التشغيل (الافتراضي هو ON) |
PHASAR_BUILD_DOC : منطقي | إنشاء وثائق PhASAR (الافتراضي هو OFF) |
PHASAR_BUILD_UNITTESTS : منطقي | بناء اختبارات وحدة PhASAR (الافتراضي قيد التشغيل) |
PHASAR_BUILD_IR : منطقي | إنشاء PhASAR IR (مطلوب لتشغيل اختبارات الوحدة) (الإعداد الافتراضي قيد التشغيل) |
PHASAR_BUILD_OPENSSL_TS_UNITTESTS : منطقي | إنشاء اختبارات وحدة PhASAR التي تتطلب OpenSSL (الإعداد الافتراضي هو OFF) |
PHASAR_ENABLE_PAMM : سلسلة | تمكين آلية قياس الأداء ('Off' أو 'Core' أو 'Full'، الافتراضي هو Off) |
PHASAR_ENABLE_PIC : منطقي | إنشاء رمز مستقل عن الموضع (الافتراضي قيد التشغيل) |
PHASAR_ENABLE_WARNINGS : منطقي | تمكين تحذيرات المترجم (الافتراضي هو ON) |
CMAKE_CXX_STANDARD : كثافة العمليات | بناء طور في وضع 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
في شجرة البناء ضمن tools/phasar-cli
.
إذا حصلت على مخرجات غير خطأ التجزئة أو استثناء ينهي البرنامج بشكل غير طبيعي، فكل شيء يعمل كما هو متوقع.
نظرًا للتحديثات المؤسفة لنظام التشغيل MacOS والتعامل مع C++، خاصة على معالجات M1 الأحدث، لا يمكننا دعم التطوير الأصلي على نظام Mac. الحل الأسهل لتطوير PhASAR على جهاز Mac في الوقت الحالي هو استخدام بيئات تطوير عمال الإرساء. قم باستنساخ هذا المستودع كما هو موضح في وثائقه. بعد ذلك، يجب عليك تسجيل الدخول يدويًا مرة واحدة، كمستخدم جذر عن طريق تشغيل docker exec -it -u root <container name> /bin/bash
لإكمال بقية عملية الإنشاء كما هو موضح في هذا الملف التمهيدي (تثبيت الوحدات الفرعية، وتشغيل bootstrap. ش، ...). الآن يمكنك فقط إرفاق حاوية الإرساء الخاصة بك بـ VS Code أو أي بيئة تطوير متكاملة (IDE) أخرى، والتي تدعم التطوير عن بعد.
يمكن تثبيت PhASAR باستخدام البرامج النصية للمثبت كما هو موضح في ما يلي. ومع ذلك، لا تحتاج إلى تثبيت PhASAR لاستخدامه.
فيما يلي، نود أن نقدم مثالًا كاملاً لكيفية تثبيت PhASAR باستخدام نظام Ubuntu أو Unix-like.
ولذلك، فإننا نقدم البرنامج النصي للتثبيت. لتثبيت PhASAR، ما عليك سوى الانتقال إلى دليل المستوى الأعلى لـ PhASAR واستخدام الأمر التالي:
./bootstrap.sh --install
قد يطلب البرنامج النصي bootstrap أذونات المستخدم المتميز.
منتهي!
إذا كنت قد قمت بالفعل ببناء phasar، فيمكنك فقط الاستدعاء
sudo ninja install
نوصي باستخدام phasar كمكتبة مع cmake
.
إذا قمت بالفعل بتثبيت phasar، فقد يكون استخدام 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. يرجى التأكد من تثبيت خطاف الالتزام المسبق الخاص بنا والذي يضمن التزام التزامك بأهم قواعد الترميز لمشروع PhASAR. لمزيد من التفاصيل، يرجى الرجوع إلى اتفاقيات الترميز والمساهمة في PhASAR.
لتثبيت خطاف الالتزام المسبق، يرجى تشغيل الأوامر التالية في الدليل الجذر لـ PhASAR:
pip install pre-commit
pre-commit install
شكرًا. واستمتع بالمشروع.