هل هناك أي طريقة لخداع .صافي مترجم JIT في تشغيل وسيلة اخرى ؟

StackOverflow https://stackoverflow.com/questions/230321

سؤال

حسنا, هذا التطبيق هو انبعاث (x86) تعليمات في الذاكرة ، مما يجعل الصفحة القابلة للتنفيذ ، إلخ.هل هناك أي طريقة تغيير أسلوب كعب من الامم المتحدة JITted طريقة للإشارة إلى المنبعثة التعليمات تيار ؟

E. g.:

لنفترض أنني خلقت x86 التعليمات تيار في الذاكرة التي لا شيء التعسفي.الآن مزيد من لنفترض أن لدي طريقة 'int الهدف()'.لم يطلق عليه حتى الآن, لذلك لم يتم تجميعها.هل هناك أي طريقة:

  1. الحصول على مؤشر إلى الهدف كعب
  2. تجعل من نقطة إلى المنبعثة التعليمات تيار.

أدرك ذلك عمليا كل واحد الميزة الأمنية .صافي يهدف إلى منع اختطاف مثل هذا.ولكن هل من الممكن من خلال القول ، استضافة API ؟

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

المحلول

نعم يمكنك القيام به!

هوك getJit طريقة mscorjit.و سوف يطلب منك كل مرة anymethod تتطلب Jitting.يمكنك تمرير ما تريد.بعض .صافي حماة يعمل مثل هذا.

نصائح أخرى

وهذا ممكن عن طريق التنميط API.لم يسبق استخدامها ، ولكن يتم استخدامها لغرض مماثل في TypeMock.

تحرير:أعتقد أنه كان هناك لطيفة نشر على MSDN blogs, سوف تذهب بحثا عن ذلك.

تحرير 2:الصحة ، الضربة الأولى!

كما قلت هذا ليس بالأمر السهل وأنه قد لا يكون ممكنا.إذا كنت أتذكر بشكل صحيح القانون سوف يشمل عنوان JIT compiler for الأسلوب ، التي لم يتم جمعها.لذلك عند محاولة استدعاء هذا الأسلوب ، JIT compiler سوف تقوم بعملها إدراج عنوان جمعت حديثا الأسلوب.إذا كنت تستطيع تغيير هذا العنوان, كنت قد تكون قادرة على إدراج استدعاء التعليمات البرمجية الخاصة بك.كيف يمكنك أن تفعل هذا لم يتم كشفها بعد.أتمنى CLR سيتم الكشف عن هذا النوع من العبث.

أنا لا أعتقد أن التنميط API سوف تساعدك في هذه الحالة (كما اقترح Leppie) ، كما أنك لا تحاول تعديل MSIL.إذا كنت تعتقد خلاف ذلك هذه المادة قد يكون الاستخدام كما أنه يصف ما يجب القيام به لتنفيذ ما TypeMock يقوم به.

بالإضافة إلى كونها قادرة على استخدام ICorProfiler وإعادة صياغة الأسلوب الخاص بك قبل أن jits, هل يمكن استخدام ICorDebug (MDBG تمكنت ربطه).تعيين نقطة توقف عند توقف يضرب تعيين العبارة التالية إلى اعتراض رمز.كل من هذه العملية يمكن القيام به من كود لكن تدخلي حقا وسوف تحتاج إلى "مراقب" عملية التنسيق هذه.

شيء آخر يستحق النظر هو PostSharp المشروع الذي يتيح لك الدخول والخروج الأساليب إذا كنت تطبيق السمات.

لا تحاول إفساد مباشرة مع الذاكرة وأنا لست متأكدا حتى انه من الممكن بدلا من ذلك يمكنك استخدام منشئ ملفات التعريف API - هناك أمثلة قليلة ولكن هناك أي وثائق.إلقاء نظرة على MSDN مجلة المادة - كتابة التعليمات البرمجية MSIL على الطاير مع .NET Framework التنميط API

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top