سؤال

أقوم بتشغيل MSIL داخل Visual Studio أو عبر Mdbg.

هل هناك أي طريقة لعرض محتويات مكدس MSIL؟

على سبيل المثالإذا قمت بتنفيذ ldloc "بعض المتغيرات"، فهل هناك أي طريقة للنظر إلى المكدس ورؤية أن المتغير موجود الآن على المكدس.

أفترض أن مكدس MSIL ليس هو نفسه مكدس وحدة المعالجة المركزية، أي.الذاكرة التي أشار إليها سجل SP؟

هل كانت مفيدة؟

المحلول

في وقت التشغيل، لا يوجد في الواقع أي مكدس "MSIL".حتى في وضع التصحيح، يتم دائمًا تجميع التعليمات البرمجية التي يتم تنفيذها بواسطة JIT.تعمل عملية تجميع MSIL في JIT على "تسطيحها" من جهاز مكدس افتراضي إلى كود تجميع عادي للنظام الأساسي الذي تعمل عليه.هذا يعني ldloc.0 قد ينتهي الأمر بترجمتها إلى شيء مثل mov eax, [sp + 4], ، أو حتى no-op، إذا كانت القيمة موجودة بالفعل في السجل.إذا كنت تريد تصحيح التعليمات المحددة ldloc, ، ثم عليك أن تنظر إليه أثناء التفكيك لمعرفة ما تمت ترجمة ldoloc إليه ومن أين يتم تحميل البيانات فعليًا.

ستساعدك أدوات WinDbg + SoS (المذكورة في منشور آخر) على ذلك عرض مكدس وحدة المعالجة المركزية، من منظور التعليمات البرمجية المُدارة.ومع ذلك، لن يسمحوا لك برؤية مكدس "MSIL" لأنه لا يوجد ما تراه.

نصائح أخرى

ويمكنك أن تفعل ذلك وأكثر من ذلك باستخدام WinDbg + SOS. تحقق هذا السؤال للحصول على مراجع حول كيفية استخدام WinDbg.

scroll top