في البادئة الموضوع ليس بالمعقد اولاً تحتاج ان تكتسب خبرة او خلفية ولو بسيطة عن IL / CIL او Operand (OpCodes)
وافضل حل هنا هيكون عبر استخدام Decompiler لتحليل ال methodsوانا افضل https://github.com/dnSpy/dnSpy/releases/tag/v6.1.8 فهو ممتاز وسهل الإستخدام لتحليل الاسيمبلي والتعديل على instructions او operands
الان لنعد لموضوع الدرس لغة IL او Intermediate Language بإختصار هي لغة وسيطة تستخدمها الـ .NET Framework لتحويل كود البرمجة المكتوب بلغات عالية المستوى مثل C# أو VB.NET إلى شكل قابل للتنفيذ بواسطة بيئة التشغيل المشتركة (CLR - Common Language Runtime). تُعرف أيضًا بـ MSIL (Microsoft Intermediate Language) أو CIL (Common Intermediate Language).
الأن لنشرح على مثال بسيط وسهل في البداية اولاً لنضيف اسيمبلي بسيط الى dnSpy لنقوم بتحليله والشرح عليه
اولاً نفتح dnSpy ومن خلال File بالأعلى عاليسار كما موضع بالصورة نختار Open او يمكنك بإختصار الضغط على Ctrl + O لإختيار الأسيمبلي مباشرةً
بعد اضافة الاسيمبلي ستجده في assembly explorer على هذه الهيئة
كما تري const_string هو namespace ويمكن ان يكون بأي اسم اخر المهم بداخله يوجد classes
كما تري يوجد بداخله Program و بداخل Program يوجد void Main وهي ما سنتعلم عليها الان
الان هنا
اذا لاحظت الميثود Main يوجد بداخلها
Console.WriteLine("Hello World!"); وهو كود طبيعي مكتوب بإستخدام C#
جميل لكن الأن لنحول اللغة من C# الى IL لنفهم اكثر عن المُتَعاملات ( OpCodes )
يمكنك تحويل اللغة من هنا
الان ركز معي
كما تري في الصورة يوجد مجموعة من OpCodes او Operands كما شرحنا بالأعلى الان لنأخذ الموضوع تدريجياً كما ترى اول Operand وهو ldstr بإختصار هو عبارة عن مُتَعامل يمكنك تخزين النصوص به مثل "Hello World!" كما بالصورة
المُتَعامل الثاني وهو Call هذا المُتَعامل كما موضع من اسمه Call هو مسؤول عن النداء او استخدام void كما موضح امامك void [mscorlib]System.Console::WriteLine(string) هنا تم استدعاء WriteLine من void [mscorlib]System.Console وكما تلاحظ WriteLine تحتاج الى نص بداخل كما هنا WriteLine(string) لذلك يوجد اول مُتَعامل وهو ldstr
بالنهاية يوجد مُتَعامل ret وهو بإختصار
في نهاية معظم الطرق لإعادة التنفيذ إلى call، ويمكن تشبيهه بكلمة "return" في لغات البرمجة مثل C#. حين يصل البرنامج إلى ret، ينهي تنفيذ الطريقة الحالية ويعيد التحكم إلى النقطة التي تم استدعاؤها منها. كما يقوم بإرجاع قيمة إذا كانت الطريقة محددة لتعيد نوعًا معينًا من البيانات. مثلاً return null او return 0 او return false
تعد ret جزءًا أساسيًا من تنفيذ الطرق في IL، وهو مهم في سير تنفيذ البرنامج ضمن بيئة CLR حيث يعالج هذه التعليمات لتحسين الأداء وضمان إدارة الذاكرة بشكل آمن.
حيث انك سترى هذا المُتَعامل دائماً....
وهنا انتهى الدرس الاول! انتظروا الدروس القادمة ان شاء الله
اتمني ان تكون استفدت فا أنا لست بالمعلم الجيد لكنى احاول ان اقدم ولو جزء بسيط مما تعلمته لعله يكون علماً نافعاً
وشكراً لكم ♥