Ildasm.exe (المفكك MSIL)
إن المفكك MSIL عبارة عن أداة دليل إلى (Ilasm.exe) المجمع MSIL حيث يقوم Ildasm.exe بأخذ ملف تنفيذ محمول (PE) الذي يحتوي على التعليمات البرمجية لـ Microsoft intermediate language و يقوم بإنشاء ملف نصي مناسب كإدخال لـ Ilasm.exe.
يتم تلقائياً تثبيت المفكك MSIL مع Visual Studio, و لبدء المفكك MSIL، قم باستخدام موجه أوامر Visual Studio.. في موجه الأوامر، اكتب ما يلي:
ildasm [options] [PEfilename] [options]
المعلمات
إن الخيارات التالية متوفرة للملفات .exe و .dll و .obj و .lib.
الخيار |
الوصف |
---|---|
/ إخراج =اسم الملف |
يقوم بإنشاء ملف الإخراج مع اسم الملف المحدد بدلاً من عرض النتائج في واجهة مستخدم رسومية. |
/rtf |
يقوم بإنشاء الإخراج في تنسيق النص حيث أنه غير صالح مع الخيار /text. جديد في الإصدار 2.0 لـ .NET Framework. |
/text |
يقوم بعرض النتائج إلى نافذة وحدة التحكم عوضاً عن واجهة مستخدم رسومية أو ملف إخراج. |
/html |
يقوم بإنشاء الإخراج في تنسيق HTML حيث إنه صالح مع الخيار /output فقط. جديد في الإصدار 2.0 لـ .NET Framework. |
/? |
يقوم بعرض بناء جملة الأمر و خيارات للأداة. |
إن الخيارات الإضافية التالية متوفرة للملفات .exe و .dll.
الخيار |
الوصف |
---|---|
/وحدات البايت |
يقوم بإظهار وحدات البايت الفعلية في تنسيق النظام الست عشري كتعليقات للتعليمات. |
/caverbal |
يقوم بإنتاج blobs للسمة المخصصة في النموذج verbal حيث القيمة الافتراضية عبارة عن النموذج الثنائي. جديد في الإصدار 2.0 لـ .NET Framework. |
/linenum |
يقوم بتضمين مراجع لخطوط المصدر الأصلي. |
/nobar |
يقوم بمنع تفكك تقدم مؤشر النافذة المنبثقة. |
/noca |
يقوم بمنع إخراج السمات المخصصة. جديد في الإصدار 2.0 لـ .NET Framework. |
/pubonly |
يقوم بتفكيك الأنواع العامة و الأعضاء فقط و مكافئ لـ /visibility:PUB. |
/quoteallnames |
يتضمن كافة الأسماء في علامات الاقتباس المفردة. |
/raweh |
يقوم بإظهار عبارات استثناء معالجة في النموذج الأولي. |
/المصدر |
يقوم بإظهار خطوط المصدر الأصلي كتعليقات. |
/الرموز المميزة |
يقوم بإظهار الرموز المميزة لبيانات التعريف للفئات و الأعضاء. |
/visibility:vis[+vis...] |
يقوم بتفكيك الأنواع أو الأعضاء فقط مع الرؤية المحددة, فالقيم التالية صالحة لـ vis: pub — العامة PRI — الخاصة fam — العائلة ASM — التجميع faa — التجميع و العائلة FOA — التجميع أو العائلة PSC — النطاق الخاص للحصول على ملفات تعريف لمعدّلات الرؤية, راجع MethodAttributes و TypeAttributes. |
إن الخيارات التالية تصلح للملفات .exe و .dll للملف أو وحدة الإخراج فقط.
الخيار |
الوصف |
---|---|
/all |
يقوم بتحديد تركيبة من الخيارات /header, /bytes, /stats و /classlist و /tokens.
ملاحظة
في الإصدارات 1.0 و 1.1 لـ NET Framework. قم بتحديد تركيبة من الخيارات /عنوان و /وحدات البايت و /رموز مميزة.
|
/classlist |
يتضمن قائمة للفئات المعرفة في الوحدة النمطية. جديد في الإصدار 2.0 لـ .NET Framework. |
/forward |
يستخدم تعريف لفئة الأمام. جديد في الإصدار 2.0 لـ .NET Framework. |
/عنوان |
يتضمن معلومات حول عنوان الملف في الإخراج. |
/الصنف:الفئة[::العضو[(sig]] |
يفكك العدد التالي و ذلك حسب الوسيطة المتوفرة:
|
/noil |
يقوم بمنع الإخراج للتعليمات البرمجية للتجميع لـ MSIL. |
/stats |
يتضمن إحصائيات على الصورة. جديد في الإصدار 2.0 لـ .NET Framework. |
/typelist |
ينتج القائمة الكاملة للأنواع للمحافظة على نوع الطلب في جولة. جديد في الإصدار 2.0 لـ .NET Framework. |
/unicode |
يستخدم ترميز Unicode للإخراج. |
/utf8 |
يستخدم ترميز UTF-8 للإخراج. القيمة الافتراضية هي ANSI. |
إن الخيارات التالية تصلح للملفات .exe و .dll و .obj و .lib للملف أو وحدة الإخراج فقط.
الخيار |
الوصف |
---|---|
/metadata[=specifier] |
إظهار بيانات التعريف حيث specifier عبارة عن: MDHEADER — إظهار معلومات عنوان بيانات التعريف و الأحجام. HEX — إظهار معلومات في ست عشري و كذلك في الكلمات. CSV — إظهار عد السجلات و أحجام كومة ذاكرة مؤقتة. UNREX — إظهار الجهات الخارجية التي لم تحل بعد. SCHEMA — إظهار عنوان بيانات التعريف و مخطط المعلومات. RAW — إظهار الجداول الأولية لبيانات التعريف. HEAPS — إظهار الأكوام الأولية. VALIDATE — التحقق من تناسق بيانات التعريف. يمكنك تحديد /metadata عدة مرات مع قيم مختلفة لـ specifier. جديد في الإصدار 2.0 لـ .NET Framework. |
الخيارات التالية تصلح لملفات .lib للملف أو وحدة الإخراج فقط.
الخيار |
الوصف |
---|---|
/objectfile=filename |
إظهار بيانات التعريف لملف كائن مفرد في المكتبة المحددة. جديد في الإصدار 2.0 لـ .NET Framework. |
ملاحظة |
---|
إن كافة الخيارات لـ Ildasm.exe هي حالة من عدم تحسس حالة الأحرف و المعترف بها حسب الأحرف الثلاثة الأولى,فعلى سبيل المثال، إن /quo مكافئ لـ /quoteallnames,و إن الخيارات التي تقوم بتعيين الوسائط تقبل بإما نقطتين (:) أو إشارة المساواة (=) كفاصل بين الخيار و الوسيطة,فعلى سبيل المثال، /output:اسم الملف مكافئ لـ / إخراج =اسم الملف. |
ملاحظات
إن Ildasm.exe يعمل فقط على ملفات PE على القرص لكنه لا يعمل على الملفات المثبتة في مخزن التجميع العمومي المؤقت.
يمكن أن يتم استخدام الملف النصي المنتج بواسطة Ildasm.exe كإدخال إلى (Ilasm.exe) المجمع MSIL, و يكون هذا مفيداً على سبيل المثال, عند ترجمة التعليمات البرمجية في لغة البرمجة التي لا تدعم كافة سمات بيانات التعريف لوقت التشغيل, و بعد ترجمة التعليمات البرمجية و تشغيل الإخراج الخاص به خلال Ildasm.exe فإنه يمكن تحرير الملف النصي الناتج لـ MSIL يدوياً لإضافة السمات المفقودة, و من ثم يمكنك تشغيل هذا الملف النصي خلال المجمع MSIL لإنتاج ملف قابل للتنفيذ نهائي.
ملاحظة |
---|
حالياً لا يمكنك استخدام هذه التقنية مع ملفات PE التي تتضمن تعليمات برمجية مضمنة (على سبيل المثال، ملفات PE المنتجة بواسطة ++Visual C). |
يمكنك استخدام GUI الافتراضي في المفكك MSIL لعرض بيانات التعريف و التعليمات البرمجية المفككة لأي ملف PE موجود بطريقة عرض شجرة هرمية, و لاستخدام (GUI)، قم بكتابة ildasm في خط الأوامر دون دعم الوسيطة PEfilename أو أية خيارات, فمن القائمة ملف يمكنك الانتقال إلى الملف PE الذي ترغب في تحميله إلى Ildasm.exe, و لحفظ بيانات التعريف و التعليمات البرمجية المفككة و المعروضة لـ PE المحدد, قم بتحديد الأمر النسخة الاحتياطية من القائمة ملف, أما لحفظ طريقة عرض الشجرة الهرمية فقط، قم بتحديد الأمر النسخة الاحتياطية Treeview من القائمة ملف, و للحصول على خط إرشاد مفصل لتحميل ملف إلى Ildasm.exe ثم تفسير الإخراج, راجع البرنامج التعليمي Ildasm.exe الموجود في مجلد النماذج الذي يأتي مع عدة تطوير برامج Windows (SDK).
إذا قمت بتوفير Ildasm.exe مع وسيطة PEfilename التي تحتوي على الموارد المضمنة فإن الأداة تنتج ملفات إخراج متعددة: ملف نصي يحتوي على تعليمات برمجية MSIL و لكل مورد مضمن مدار فإنه يتم إنتاج ملف .resources باستخدام اسم المورد من بيانات التعريف, و إذا تم تضمين مورد غير مدار في PEfilename فإنه يتم إنتاج ملف .res باستخدام اسم الملف المحدد للإخراج MSIL بواسطة الخيار /إخراج .
ملاحظة |
---|
يقوم Ildasm.exe بإظهار أوصاف بيانات التعريف للملفات الإدخال .obj و .libحيث لم يتم تفكيك التعليمات البرمجية لـ MSIL لأنواع الملفات. |
يمكنك تشغيل Ildasm.exe عبر ملف .exe أو .dll لتحديد ما إذا كان ملف تم إدارته, و إذا كان الملف غير مدار فإن الأداة تقوم بعرض رسالة تفيد أن الملف لا يحتوي على عنوان صالح لوقت تشغيل اللغة العام و أنه يمكن أن يتم تفكيكه, أما إذا كان الملف مدار فإنه يتم تشغيل الأداة بنجاح.
أمثلة
يؤدي الأمر التالي بيانات التعريف و التعليمات البرمجية المفككة للملف PE MyHello.exe لعرضها في GUI الافتراضي لـ Ildasm.exe.
ildasm myHello.exe
يقوم الأمر التالي بتفكيك الملف MyFile.exe ثم تخزين نص المجمع الناتج لـ MSIL في الملف MyFile.il.
ildasm MyFile.exe /output:MyFile.il
يقوم الأمر التالي بتفكيك الملف MyFile.exe و عرض نص المجمع الناتج لـ MSIL لنافذة وحدة التحكم.
ildasm MyFile.exe /text
في الملف MyApp.exe الذي يحتوي على موارد مضمنة مدارة و غير مدارة يقوم الأمر التالي بإنتاج أربعة ملفات: MyApp.il و MyApp.res و Icons.resources, و Message.resources:
ildasm MyApp.exe /output:MyApp.il
يقوم الأمر التالي بتفكيك الأسلوب MyMethod ضمن الفئة MyClass في MyFile.exe و عرض الإخراج لنافذة وحدة التحكم.
ildasm /item:MyClass::MyMethod MyFile.exe /text
في المثال السابق قد يكون هناك العديد من الأساليب باسم MyMethod مع تواقيع مختلفة. يقوم الأمر التالي بتفكيك الأسلوب المثيل MyMethod مع نوع الإرجاع لـ قيمة فارغة و أنواع المعلمة int32 و السلسلة.
ildasm /item:"MyClass::MyMethod(instance void(int32,string)" MyFile.exe /text
ملاحظة |
---|
في الإصدارات 1.0 و 1.1 لـ .NET Framework فإن القوس الأيسر الذي يتبع اسم الأسلوب يجب موازنته بواسطة قوس أيمن بعد التوقيع: MyMethod(instance void(int32)).في الإصدار 2.0 لـ .NET Framework يجب حذف قوس الإغلاق: MyMethod(instance void(int32). |
لاسترداد أسلوب static (أسلوبShared في Visual Basic), قم بحذف الكلمة الأساسية instance حيث إن أنواع الفئة التي ليست أنواع مجموعة أساسية مثلint32 و string يجب أن تتضمن مساحة الاسم و يجب أن تكون مسبوقة بـ الكلمة الأساسية class, و الأنواع الخارجية يجب أن يسبقها اسم المكتبة في أقواس مربعة, و يقوم الأمر التالي بتفكيك أسلوب ثابت باسم MyMethod يحتوي على معلمة واحدة من النوع AppDomain و على نوع الإرجاع لـ AppDomain.
ildasm /item:"MyClass::MyMethod(class [mscorlib]System.AppDomain(class [mscorlib]System.AppDomain)" MyFile.exe /text
يجب أن يسبق نوع متداخل بفئته التي تحتوي على محدد بواسطة شرطة مائلة للأمام, و على سبيل المثال، إذا كانت الفئة MyNamespace.MyClass تحتوي على فئة متداخلة باسم NestedClass فإنه يتم تعريف الفئة المتداخلة كما يلي: class MyNamespace.MyClass/NestedClass.