سؤال
هذا هو نوع من سؤال من جزأين. لكنه يرتبط بنفس الشيء.
أريد أن أعمل مع رمز IL الخاص بتطبيق لتطبيق التصحيحات. أنا أتساءل ماذا سيكون النهج الصحيح. من الواضح أنني يمكن أن أزيل إلغاء توحيده وقراءة ملف رمز IL وتحريره ثم إعادة الترجمة. ولكن هل هناك طريقة لقراءتها كرمز MSIL مباشرة في الملف. وربما تعديله في الوقت الحقيقي.
كنت أحاول تحرير الكود المنقلب من قابلة للتنفيذ. لكن في كل مرة أقوم بإعادة تجميعها ، سأواجه مشكلة في التنفيذ. مثل أنه لم يعد بإمكانه العثور على نقطة الدخول بعد الآن. كيف أحسب ذلك؟ أنا أظن أنني بحاجة إلى معرفة طول الأوامر والمعلمات الخاصة بهم ، أو لجعل نقطة الدخول علامة أو شيء ما. سأكون لطيفًا إذا كان هناك قالب Visual Studio لشيء من هذا القبيل.
المحلول
كشخص قرأ بالفعل ECMA-335 المواصفات عدة مرات و تم تنفيذ محمل صورة CLI بلغتين مختلفتين (مع تحليل IL الكامل في واحدة) ، أود أن أقول إن هذا سيظل مهمة صعبة بالنسبة لي. أقول هذا لأنه يبدو أنك كلاهما 1) لم تفعل هذا و 2) أنت تبحث عن إجابة سهلة. يجب أن تكون المواصفات بالتأكيد نقطة البداية الخاصة بك.
ال الحد الأدنى سيكون الإجراء:
- قم بتحميل صورة PE (exe أو dll)
- تحليل رمز البايت لجميع الطرق وحل الرموز
- قم بتطبيق تحويلات التعليمات البرمجية (الحد الأدنى بالطبع سيكون تحولًا واحدًا مثل إعادة تسمية الأساليب الخاصة)
- احفظ النتيجة كصورة PE جديدة
تحرير: هذا لن يمنعك من الاضطرار إلى التعرف على الهيكل التفصيلي لمجموعات .NET ، ولكنه قد يوفر لك بعض الوقت في التنفيذ الفعلي والمساعدة في الحفاظ على منطقك المنفصل بشكل نظيف عن المحمل.
- مونو سيسيل هي مكتبة كتبها JB Evain لإنشاء وفحص البرامج والمكتبات في تنسيق ECMA CIL.
- البنية التحتية للمترجم المشترك
- سيسيل و CCI منشور المدونة بواسطة JB Evain
نصائح أخرى
لقراءة MSIL ، هناك بالتأكيد ، في هذا الموضوع:
ildasm.exe - اللغة المتوسطة تفكيك. يمكنك عرض الكود المترجم على مستوى MSIL باستخدام هذه الأداة.
تم العثور على هذا في Microsoft SDK.