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]]

يفكك العدد التالي و ذلك حسب الوسيطة المتوفرة:

  • يفكك العدد المحدد فئة.

  • يفكك العدد المحدد member من فئة.

  • يفكك العدد memberمن فئة مع دخول توقيع المحدد. إن تنسيق sig عبارة عن:

    [instance] returnType(parameterType1, parameterType2, …, parameterTypeN)

    ملاحظة في الإصدارات 1.0 و 1.1 لـ .NET Framework حيث sig يجب أن يتبعها قوس إغلاق: (sig). و في الإصدار 2.0 يجب حذف قوس الإغلاق: (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.

راجع أيضًا:

المرجع

Ilasm.exe ( المجمع MSIL)

موجه أوامر Visual Studio.

المبادئ

عملية تنفيذ المدارة

موارد أخرى

أدوات .NET Framework