سؤال

ووفقا ل هذه المقالة إعادة تحديد ليست ضرورية للجمعيات. NET نظرا لتجميع JIT من التعليمات البرمجية. وتنص هذه المادة:

"رمز تجميع JIT ليس لديها مشكلة إعادة تحديد حيث يتم إنشاء عناوين في وقت التشغيل على أساس حيث يتم وضع رمز في الذاكرة، كما MSIL نادرا ما تتأثر يخطئ العنوان الأساسي منذ المراجع MSIL هي رمزية مقرها، بدلا من عنوان القائم. وبالتالي عندما يتم استخدام مترجم JIT، ونظام مرن للاصطدام العنوان الأساسي. "

ولكن، وقد لاحظت أن VS2008 يعين الافتراضي 0x0400000 قاعدة عنوان لجميع التجمعات (خصائص المشروع> بناء> متقدم)، وإذا كنت تفعل listdlls /r لعملية بلدي كل ما عندي من المجالس NET هي في الواقع المعاد تقديرها لكل الافتراضية.

إذا أنا تعيين عناوين نفسي، ويتم ذلك لا إعادة تحديد.

وسؤالي هو: ما هو المعاد تقديرها في هذه الحالة ولماذا

وتحرير: وأود أن أضيف أنني لا أتحدث عن المجالس NGen'ed

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

المحلول

يستخدم

وآلية CLR تحميل فشل LoadLibrary وراء الكواليس، لذلك هذا هو ما لاحظت: 2 المجالس لا يمكن تحميل في نفس العنوان. الآن ما الناس غالبا ما يعني عندما يحاولون rebase دلل هو تجنب الأداء. ضرب من الإصلاح المنبثقة، على سبيل المثال عناوين المطلقة والمكالمات وظيفة تحتاج إلى "نقل" مع تحميل قاعدة العنوان. CLR لم يكن لديك هذه المشكلة (لا متأكدة من بيانات ثابتة في التطبيق، والذي هو الجزء الثاني من تلك الإصلاح المنبثقة، وأود أن الحاجة لتقرأ على هذا)، لأنه يتم تحميل كود MSIL على الطلب عند استدعاء وظيفة في التعليمات البرمجية المدارة. وMSIL ثم يحصل jitted وتوضع على كومة، واحدة مختلفة من كومة كائن طبيعي على ما أعتقد، في نفس يخصص نحو CLR ويحدد كائنات جديدة في التطبيق الخاص بك.

نصائح أخرى

وماذا OS تركض؟ وأنا أعلم أن ويندوز فيستا وخارجها ASLR أدخلت التي يعشوئ مساحة العنوان أنه يحمل دلس فيه. هذا يحدث لدلس النظام ولكن لا متأكدة من صافي - ربما شيء أن ننظر إلى

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