- ASM هي مكتبة Java لقراءة وتعديل وكتابة شيفرة بايت JVM.
- تعمل على ملفات .class المترجمة، لذا يمكنها إعادة كتابة فئة دون إعادة تجميعها.
- تستخدم التعديلات (Mods) ذلك لتصحيح اللعبة المترجمة مسبقًا عند التحميل.
- يستخدم معظم المطورين (Modders) Mixin، الذي يقع فوق ASM ويخفي التفاصيل.
ASM هي مكتبة جافا لقراءة وتعديل وكتابة شيفرة بايت JVM. تعمل على ملفات .class المترجمة بدلاً من التعليمات البرمجية المصدر، لذا يمكنها فحص أو إعادة كتابة فئة دون الحاجة إلى إعادة تجميعها. تعتمد تعديلات Minecraft عليها لأنها تسمح لهم بتصحيح اللعبة في وقت التحميل، بعد تجميع اللعبة بالفعل.
أين Opal يناسب
Opal هو تعديل Fabric، وتصل تعديلات Fabric إلى كود اللعبة من خلال طبقة التعليمات البرمجية هذه. أنت لا تلمسها مباشرةً: يوفر لك محرك البرمجة النصية طريقة نظيفة لتوسيع Opal دون كتابة التعليمات البرمجية
ما الذي تفعله شركة ايه إس إم فعليًا
يحول ASM فئة مُجمَّعة إلى شيء يمكن للبرنامج تعديله. ملف .class هو مجرد كود بايت، وهي التعليمات التي يشغلها جهاز Java الافتراضي. يحلل ASM هذا الكود البايت، ويمدك بالطرق والحقول، ويسمح لك بإضافة أو إزالة أو تغيير التعليمات. ثم يكتب فئة جديدة وصالحة.
لا يمكن لـ Java العادي القيام بذلك بمفرده. يحول المترجم التعليمات البرمجية المصدرية إلى كود بايت مرة واحدة، وبعد ذلك يصبح كود البايت ثابتًا. يصل ASM إلى كود البايت، وهو الطبقة التي تقع تحت التعليمات البرمجية التي تكتبها عادةً
كيف يعمل
يقرأ ASM فئة باستخدام ClassReader ويكتب فئة باستخدام ClassWriter. بين الاثنين، يزور التعليمات البرمجية أجزاء الفئة ويقرر ما يجب تغييره. هناك طريقتان للقيام بذلك.
تقوم طريقة الزائر بمسح الفئة عنصرًا تلو الآخر. إنها سريعة وتستخدم القليل من الذاكرة لأنها لا تحتفظ بالفئة بأكملها في وقت واحد. تقوم طريقة الشجرة بتحميل الفئة في كائنات يمكنك التجول فيها وتحريرها بحرية، وهو أمر أسهل في الفهم بالنسبة للتغييرات الكبيرة ولكنه يستخدم المزيد من الذاكرة.
| الطريقة | كيف تعمل | الأفضل لـ |
|---|---|---|
| واجهة برمجة التطبيقات للزائر | تقوم ببث أحداث الفئة أثناء قراءتها | تعديلات صغيرة وسريعة بذاكرة منخفضة |
| واجهة برمجة التطبيقات للشجرة | تبني نموذج كائن قابل للتحرير للفئة | عمليات إعادة كتابة أكبر أو أكثر تعقيدًا |
لماذا تستخدم تعديلات Minecraft ذلك
يجب على المُعدّلين تغيير التعليمات البرمجية للعبة لم يكتبوها ولا يمكنهم إعادة تجميعها. اللعبة تأتي مُجمّعة على هيئة فئات، لذا فإن الطريقة الوحيدة للدخول هي على مستوى التعليمات البرمجية البايت، وهذا ما يوفره ASM. يمكن للمود حقن خطاف في طريقة اللعبة، أو إعادة توجيه استدعاء، أو إضافة حقل، كل ذلك عند الإطلاق.
معظم المُعدّلين لا يستدعون ASM مباشرةً. إنهم يستخدمون Mixin، وهو إطار عمل عالي المستوى يقع فوق ASM ويحوّل التعليقات التوضيحية البسيطة إلى تعديلات التعليمات البرمجية البايت الأساسية. أنت تكتب فئة Java صغيرة تصف التغيير، والإطار يقوم بالعمل منخفض المستوى مع ASM نيابةً عنك. تعتمد تعديلات Fabric بشكل خاص على هذا التسلسل.
متى تلمس ASM مباشرةً
نادراً ما تكتب ASM خامًا كمؤلف مود. يظهر ذلك عندما تحتاج الأداة إلى مزيد من التحكم مما يمكن أن تعبر عنه التعليقات التوضيحية، مثل المُحمِّل، أو المُخفي، أو المُصلح الذي يعيد كتابة الفئات بالكامل. بالنسبة لتعديلات اليوم الواحد، فإن طبقة التعليقات التوضيحية الموجودة فوقها كافية، وهي أقل عرضة للأخطاء بكثير.
الأسئلة الشائعة
لا. يقوم برنامج إلغاء التجميع بتحويل التعليمات البرمجية البايت مرة أخرى إلى التعليمات البرمجية المصدرية المقروءة. يعمل برنامج التجميع على التعليمات البرمجية البايت نفسها ومُصمم لتغييرها، وليس لاستعادة التعليمات البرمجية المصدرية
عادةً لا. معظم تعديلات Fabric تستخدم Mixin، والذي يخفي تفاصيل ASM خلف التعليقات التوضيحية. أنت تلجأ إلى ASM الخام فقط عندما تحتاج إلى تحكم دقيق
لا. ASM هي مكتبة جافا عامة تُستخدم في العديد من الأدوات التي تعمل مع كود البايت. تعد تعديل Minecraft أحد الاستخدامات الشائعة، وليست الاستخدام الوحيد
لا يمكنك ذلك. يتم شحن اللعبة في شكل ملفات مُجمَّعة، وليست كود مصدر يمكنك تغييره وإعادة بنائه. تعديل رمز البايت هو الطريقة العملية لتصحيح التعليمات البرمجية التي لا تملكها