أداة WIP لعكس عملية بناء IL2CPP الخاصة بالوحدة مرة أخرى إلى DLLs الأصلية المدارة.
تنطبق المعلومات أدناه بالكامل تقريبًا على تطبيق CLI المتاح على إصدارات GitHub. للاطلاع على وثائق حول استخدام الوحدة النمطية "الأساسية" - التي تكون CLI مجرد غلاف حولها - في مشاريعك الخاصة ، انظر readme_core.md
يستخدم libcpp2il للتحليل الأولي وتحميل هياكل البيانات الوصفية. يمكن الحصول على libcpp2il من القطع الأثرية في البناء إذا كنت ترغب في القيام بشيء ما مع بيانات تعريف IL2CPP ، ويتم إصدارها بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. سوف يأخذك الرابط أعلاه إلى وثائق libcpp2il.
CPP2IL يخضع حاليًا لإعادة كتابة كبيرة. يمثل هذا الفرع العمل قيد التقدم ، ويخضع للتغيير.
يمكن الحصول على بناء CI للمطورين من موجز Nuget الخاص بي.
تم تبسيط واجهة سطر الأوامر ، والانتقال من الكثير من خيارات سطر الأوامر إلى مفهوم تنسيقات الإخراج وطبقات المعالجة. ومع ذلك ، لم يتم تنفيذ الكثير من هذه التنسيقات والطبقات بعد ، لذلك فإن الوظائف محدودة مقارنة بالإصدارات التي تم إصدارها مسبقًا.
تمت إزالة العديد من الخيارات ، مثل --analysis-level ، --skip-analysis ، إلخ. بتجاهل حقيقة أن التحليل لم يتم تنفيذه بعد ، لن تعود هذه الخيارات. سيتم إيقاف التحليل افتراضيًا ، وسيتم تمكينه عن طريق استخدام طبقة المعالجة.
على قدم المساواة ، تم استبدال خيارات مثل --supress-attributes ، التي قمعت سابقًا سمات CPP2IlInjected ، بطبقة عملية -يتم تنفيذ هذا بالفعل ، ويسمى attributeinjector . يمكنك تمكين هذه الطبقة باستخدام خيار --use-processor ، ويمكنك سرد خيارات أخرى باستخدام --list-processors .
ستكون مقالب البيانات الوصفية ومقالب الأسلوب هي تنسيق الإخراج الخاص بها أيضًا ، بدلاً من أن يكونا افتراضيًا ، ويتم التحكم فيه عبر خيار مخصص. هذا يعني حاليًا أنك ستحتاج إلى تشغيل CPP2IL عدة مرات إذا كنت تريد كلا القمامة ، على الرغم من أن هذا قد يتغير في المستقبل إذا أضفنا دعمًا للإخراج إلى تنسيقات متعددة في وقت واحد. مثل طبقات المعالجة ، يمكن إدراج تنسيقات الإخراج من خلال خيار- --list-output-formats ، ويتم تحديده عبر الخيار- --output-as .
تحت الغطاء ، تم إعادة كتابة التطبيق بالكامل تقريبًا. في المقام الأول ، كان هذا ضروريًا نظرًا لدرجة أن CPP2IL كان يعتمد على مكتبة Mono.cecil ، التي كان لها بعض القيود. عندما نظرنا إلى التبديل ، أدركنا مدى اعتمادنا في المكتبة. لم يعد هذا هو الحال - يتم كتابة التطبيق حول أنواع libcpp2il وكائنات سياق التحليل الجديدة ، ولم تعد مكتبة mono.cecil تستخدم ، بعد استبدالها بـ Asmresolver.dotnet.
علاوة على ذلك ، نحن حاليًا في عملية إعادة تنفيذ التحليل القائم على تمثيل وسيط يسمى ISIL (لغة مستقلة عن مجموعة التعليمات) ، والتي ستسمح بدعم أسهل بكثير لمجموعات التعليمات الجديدة. ثم يتم تحويل ISIL إلى رسم بياني لتدفق التحكم ، والذي يمكن تحليله بذكاء أكثر من التفكيك الخام.
نحن نعمل أيضًا على نظام إضافي يسمح لمطوري الطرف الثالث بكتابة المكونات الإضافية لإضافة دعم لمجموعات التعليمات المخصصة ، والتنسيقات الثنائية ، وفي النهاية تحميل البيانات الوصفية أو الملفات الثنائية.
أبسط استخدام لهذا التطبيق هو لعبة Windows X86 أو X64 Unity. في هذه الحالة ، يمكنك فقط تشغيل Cpp2IL-Win.exe --game-path=C:PathToYourGame و cpp2il ستكتشف إصدار الوحدة الخاص بك ، وتحديد موقع الملفات التي يحتاجها ، وتفريغ الإخراج في مجلد CPP2IL_OUT أينما قمت بتشغيل الأمر.
على افتراض أن لديك ملف APK واحد (وليس APKM أو XAPK) ، وأنك تعمل على الأقل CPP2IL 2021.4.0 ، يمكنك استخدام نفس الوسيطة على النحو الوارد أعلاه ولكن تمرير في المسار إلى APK ، وسيقوم CPP2IL باستخراج الملفات التي يحتاجها من APK.
| خيار | مثال على الحجة | وصف |
|---|---|---|
| -Game-Path | C: path to game | حدد المسار إلى مجلد اللعبة. مطلوب. |
| -exe-name | اختبار | حدد اسم ملف EXE للعبة في حالة فشل الكشف التلقائي (لأن هناك ملفات EXE أخرى في دليل اللعبة) |
| -فيربوز | <none> | قم بتسجيل مزيد من المعلومات حول ما نقوم به |
| -قائمة المعالجات | <none> | قائمة طبقات المعالجة المتاحة ، ثم الخروج. |
| -الاستخدام المعالج | AttributeInjector | حدد طبقة معالجة للاستخدام ، والتي يمكن أن تغير البيانات الخام قبل الإخراج. يمكن أن يظهر هذا الخيار عدة مرات. |
| -المعالج | المفتاح = القيمة | توفير خيارات التكوين لطبقات المعالجة المحددة. سيتم توثيقها بواسطة المكون الإضافي الذي يضيف طبقة المعالجة. |
| -تنسيق القائمة المخرج | <none> | قائمة تنسيقات الإخراج المتاحة ، ثم الخروج. |
| -output-as | Dummydll | حدد تنسيق الإخراج الذي ترغب في استخدامه. |
| -Output-to | CPP2IL_OUT | دليل الجذر للإخراج إلى. سيتم تمرير هذا المسار إلى تنسيق الإخراج المحدد ، والذي قد يقوم بعد ذلك بإنشاء دليل فرعي وما إلى ذلك في هذا الموقع. |
| --واي-فترامووركر | C: path to webgl.framework.js | تستخدم فقط بالاقتران مع ثنائيات WASM. بعض هذه الصادرات قد شاغبت ولكن يمكن استردادها من خلال ملف Framework.js ، والتي يمكنك توفير المسار لاستخدام هذه الوسيطة. |
تم تصميم كل التزام واحد لبناء CI باستخدام إجراءات github - يمكن العثور على ملف الإجراء في مجلد .github ، إذا كنت ترغب في إعادة إنتاج البناء بنفسك. كن على علم بأن هذه قد لا تكون الأكثر استقرارًا - في حين أن هناك اختبارات لضمان التوافق مع مجموعة من الألعاب ، في بعض الأحيان تنكسر الأمور! هذه النسخة من خلال الالتزام الذي تم بناؤه من.
يمكن تنزيل ملفات الإصدار من علامة التبويب "الإجراءات" إذا تم توقيعك في GitHub ، أو يمكنك استخدام الروابط التالية ، والتي تشير دائمًا إلى أحدث بناء CI الناجح. لاحظ أنه يتم توفير بناء .NET Framework للتوافق مع النبيذ/البروتون.
علاوة على ذلك ، أقوم بإصدار إصدار "Milestone" يدويًا كلما أعتقد أنه تم إجراء مجموعة كبيرة من التحسينات. لا يتم تمييزها على أنها مسبقات على Github ، ويجب (على الأقل من الناحية النظرية) أن تكون مستقرة ومناسبة للاستخدام في مجموعة من الألعاب.
من المعلم الأول بناء 2021.0 ، وما بعده ، يقوم CPP2IL الآن بإخراج بيانات أكثر صلابة إلى وحدة التحكم. ويشمل ذلك مستويات السجل (الفعل ، المعلومات ، تحذير ، فشل) والألوان المرتبطة (رمادي للفعل ، الأزرق للحصول على معلومات ، أصفر للتحذير ، الأحمر للفشل).
اعتبارًا من Milestone 2021.1 ، إذا كانت CPP2IL قادرة على اكتشاف أنك تعمل في النبيذ/البروتون ، فسيتم تعطيل رموز الألوان ANSI هذه ، لأنها غير مدعومة بالنبيذ وتبدو فظيعة.
لن يتم تسجيل رسائل الفعل إلا إذا تم إطلاق CPP2IL باستخدام خيار --verbose ، وسيكون من المفيد إذا تمكنت من الإبلاغ عن مشكلات مع تمكين هذه العلامة. للتشغيل العادي ، لا ينبغي أن تكون هناك حاجة إليها ، إلا إذا كنت فضوليًا.
إذا كنت لا ترغب في تلوين الإخراج ، فقم بتعيين متغير البيئة NO_COLOR=true .
تم تصميم هذا التطبيق في المقام الأول باستخدام .NET 9.0 ، ولكن تم نشر إنشاء .NET Framework 4.7.2 لأغراض القديمة.
يستخدم المكتبات التالية ، والتي أنا ممتن جدًا لها:
(جميع معهد ماساتشوستس للتكنولوجيا مرخصة بصرف النظر عن Xunit وهو Apache 2.0+MIT)
WasmDisassembler .يستخدم Build Net472 المكتبات الإضافية التالية:
تستخدم بعض الإضافات أيضًا مكتبات إضافية:
CPP2IL (فضفاض للغاية ، في هذه المرحلة) على أساس IL2CPPDUMPER ، الذي شوهت في عام 2018 وأزلت الكثير من التعليمات البرمجية ، وأعيد كتابة الكثير ، وأضفت الكثير. ولكن في جوهرها ، لا يزال يتبقى فيه بعض الخطر ، في الغالب في libcpp2il.
إنه يحتوي على أجزاء وقطع من IL2CppinSpector ، التي يتم تناولها بإذن من DJKATY ، وأود أن أعرب عن امتناني لها هنا لمساعدتها التي لا تقدر بثمن.
أود أن أشكر مجتمع Audica Modding و Discord على الإلهام الأولي لهذا المشروع ، والكثير من الدعم في الأيام الأولى ، وطلبات الميزات هذه الأيام.
وأخيراً ، تحقق من بعض المشاريع الرائعة الأخرى التي ترتبط مع هذا المشروع. بالطبع ، ذكرت IL2CPPINTOP أكثر ، ولكن تحقق أيضًا من MELONLOADER ، الذي يستخدم CPP2IL لتوليد DLL DUMME.