Opal هي مكتبة قابلة للتمديد لتحليل وهندسة Java Bytecode. تتم كتابة Opal بالكامل في Scala وتستفيد من ميزات اللغة المتقدمة لـ Scala لتوفير مستوى جديد وغير مرئي سابقًا من المرونة وسهولة الاستخدام. تم تصميم Opal من الألف إلى الياء مع التوسع والقدرة على التكيف وقابلية التوسع (الذاكرة والأداء) في الاعتبار. يتم توازى أجزاء كثيرة من Opal بالفعل ، وتوفير البنية التحتية اللازمة لتنفيذ تحليلات متزامنة للغاية أو على الأقل آمنة للخيط.
يتكون Opal من عدة مشاريع:
الشائع (OPAL/COMMON): يحتوي على وظائف مفيدة عامة ، هيكل البيانات (مثل TRIEMAPS) وخوارزميات الرسم البياني (على سبيل المثال ، الحوسبة المتصلة بقوة ، وحساب معلومات السيطرة ، وما إلى ذلك) مفيدة عند تحليل (BYTE).
البنية التحتية للتحليل الثابت (OPAL/SI): يحتوي على إطار عام قائم على الشبكة لتنفيذ التحليلات الثابتة المعيارية.
البنية التحتية Bytecode (Opal/BI): البنية التحتية اللازمة لتحليل Java 1.0 - Java 16 Bytecode.
bytecode disassembler (Opal/DA): disassembler java bytecode الذي يوفر تمثيلًا فرديًا لملف الفصل والذي يمكن استخدامه لإنشاء تمثيلات HTML قابلة للقراءة لملفات فئة Java.
منشئ Bytecode (Opal/BC): البنية التحتية الأساسية للمهندس Java Bytecode.
تمثيل Bytecode (OPAL/BR): تمثيل قاعدة Opal من Java Bytecode. ينفذ جميع الوظائف لإجراء التحليلات الأساسية لملفات فئة Java.
إطار التفسير التجريدي (OPAL/AI): تنفيذ إطار عمل تجريدي قائم على التفسير يمكن استخدامه لتنفيذ التحليلات بسهولة على مستويات مختلفة من الدقة.
ثلاثة رمز عنوان (OPAL/TAC): يوفر تمثيل وسيط قائم على رمز 3-address. تم إنشاؤه ساذجًا مباشرةً استنادًا إلى رمز Bytecode ، وتمثيل شبيه بـ SSA على المستوى الأعلى والذي يوفر بشكل مباشر CFG وكذلك معلومات الاستخدام المستفاد باستخدام نتائج التفسير التجريدي الأساسي.
استخراج التبعيات (OPAL/DE): يوفر الدعم لاستخراج وتحليل تبعيات رمز المصدر للمشروع. هذا المشروع هو أساس المشاريع ، على سبيل المثال ، فحص البنية.
التحقق من صحة الهندسة المعمارية (OPAL/AV): إطار صغير للتحقق من بنية المشروع التي تم تنفيذها مقابل الإطار المحدد.
الإطار (OPAL/Framework): في الأساس يجمع جميع المشروعات الفرعية لجعل من الممكن الحصول بسهولة على لقطة متسقة لجميع المشروعات الفرعية. بشكل عام ، يوصى إعلان الاعتماد على هذا المشروع عندما تريد استخدام Opal.
DEMOS (OPAL/DEMOS): يحتوي على عينات رمز العمل التي توضح كيفية استخدام OPAL. يعني الرمز في مشروع العرض التجريبي في المقام الأول كمورد تعليمي. لبدء الأمثلة ، ابدأ وحدة التحكم sbt (أدوات بناء Scala) وتغيير المشروع الحالي إلى "Demos" ( project Demos ). بعد ذلك يمكنك run عدة تحليلات تجريبية صغيرة.
Hermes (Opal/Tools/Hermes): إطار عمل لتشغيل استفسارات الكود المختلفة مقابل مجموعات من المشاريع.
Bugpicker (Opal/Tools/BP): أداة للعثور على المشكلات المعتمدة على تدفق التحكم في التدفق في التعليمات البرمجية المصدر. يتراوح نوع المشكلات التي يتم تحديدها من الشيكات الدفاعية غير المجدية إلى الأخطاء التي تؤدي إلى استثناءات وقت التشغيل (غير المعلنة).
يأتي Opal أيضًا مع عدد متزايد من الأدوات التي تهدف إلى مساعدة المطورين على التعرف على Java Bytecode و/أو Opal. تم العثور على هذه المشاريع في المجلد DEVELOPING_OPAL/tools ويمكن تشغيله باستخدام وحدة التحكم SBT.
ما يلي ينطبق على فرع "Master/Develop".
يستخدم Opal SBT كأداة بناء الخاصة به ، ويسهل العمل مع OPAL بشكل خاص باستخدام وحدة التحكم SBT. تأكد من أن لديك Java 8 على الأقل تحديث 171 و Scala 2.12.13 و SBT 1.4.6 تم تثبيتها وتشغيلها ويمكن أن تستخدم SBT على الأقل 4 جيجابايت من ذاكرة الوصول العشوائي (-xmx4g). قم بتنزيل لقطة حديثة من Opal أو استنساخ المستودع. انتقل إلى مجلد جذر أوبال.
sbt cleanBuild . هذا يجمع جميع المشاريع الأساسية (بما في ذلك الاختبارات) ، وإنشاء وثائق ScalAdoc على مستوى المشروع ونشر المشروع إلى دليل IVY المحلي.JAVA_OPTS ولكن موصى به -Dorg.opalj.threads.CPUBoundTasks=8 -Dorg.opalj.threads.IOBoundTasks=24 ] قم بتحرير CPUBoundTasks === "Number of real CPUs (Cores)" local.sbt IOBoundTasks === "Number of (hyperthreaded) cores * 1 .5" ). يمكنك أيضًا تعيين هذه الخصائص عند استخدام SBT عن طريق الكتابة:eval sys.props("org.opalj.threads.CPUBoundTasks") = "1" .sbt test لتشغيل اختبارات الوحدة واختبار أن كل شيء يعمل كما هو متوقع. يرجى ملاحظة أن بعض الاختبارات تولد بعض الإخراج الإضافي (الملون). ومع ذلك ، طالما أن جميع الاختبارات تنجح دون خطأ ، كل شيء على ما يرام. إذا فشل sbt test ، فقد يكون ذلك بسبب عدم كفاية الذاكرة. في هذه الحالة ، من الضروري بدء SBT بمزيد من الذاكرة.sbt it:test لتشغيل جناح اختبار التكامل. قد يستغرق تنفيذ مجموعة الاختبار هذا وقتًا طويلاً (على سطح مكتب سريع مع 32 جيجابايت و 8 نوى يستغرق ~ 2H).أنت مستعد للذهاب.
استكشاف الأخطاء وإصلاحها
عندما تواجه مشاكل في بناء Opal ، يرجى النظر في الخيارات التالية.
للبدء ، انتقل إلى صفحة ويب المشروع. بالإضافة إلى ذلك ، يحتوي الكود في مشروع Demos على العديد من الأمثلة القصيرة (ER) التي توضح كيفية حل المهام المتكررة بشكل شائع. يمكن تنفيذ معظم الأمثلة مباشرة.
ابدأ وحدة التحكم في SBT. (في مجلد جذر Opal ، اتصل sbt على سطر الأوامر.) قم بتغيير المشروع إلى العروض التوضيحية باستخدام project Demos الأوامر ونوع run لتشغيل أحد العروض التوضيحية.