سؤال

عند تشغيل أحد برامجنا، واجه أحد المختبرين مربع حوار منع تنفيذ البيانات في Windows.

نحاول إعادة إنتاج هذا الموقف على جهاز كمبيوتر مطور لأغراض تصحيح الأخطاء:دون نجاح.

هل يعرف أحد كيفية العثور على ما قد يتسبب في قيام حماية DEP بقتل التطبيق؟هل هناك أي أدوات موجودة متاحة لهذا؟

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

المحلول

لن يظهر مربع حوار DEP عادةً إلا عند محاولة تنفيذ تعليمات برمجية من منطقة لم تضع عليها علامة على أنها قابلة للتنفيذ.قد يكون السبب في ذلك هو "الشكر" في المكتبة التي تستخدمها، على سبيل المثال.نوافذ ATL.تم إصلاح هذه المشكلة في ATL 8.0.

يمكن أيضًا أن يتسبب خطأ نفايات المكدس - على سبيل المثال، تجاوز سعة المخزن المؤقت - في حدوث هذه المشكلة، وذلك عن طريق تعيين عنوان الإرجاع إلى موقع غير قابل للتنفيذ.قد لا يتسبب هذا في انتهاك الوصول، بل قد يؤدي إلى سلوك غريب، إذا تم إيقاف تشغيل ميزة DEP للعملية أو لم يكن متوفرًا على الجهاز.

قد يحدث ذلك أيضًا إذا قمت بإلقاء استثناء C++ أو رفع استثناء SEH، وتم نقل معالجات الاستثناءات المنظمة الخاصة بك إلى المهملات بواسطة تجاوز المخزن المؤقت.

نصائح أخرى

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

يتأثر DEP بوجود قدرة الأجهزة.لقد واجهنا مؤخرًا موقفًا حيث كان تطبيقنا يعمل بشكل جيد على الأجهزة القديمة، لكنه قد يفشل على الأجهزة الجديدة.اتضح أنه على الرغم من تمكين DEP على كل من الخوادم القديمة والخوادم الجديدة، إلا أننا تعطلنا على الخوادم الجديدة لأن اكتشاف الأجهزة كان أفضل أو أكثر قوة أو شيء من هذا القبيل.لذا، إذا كان بإمكان ضمان الجودة الخاص بك إعادة الإنتاج ولكن DEV لا يمكنه ذلك، فجرب ذلك باستخدام جهاز مماثل...على الرغم من أنه يبدو من غير المعقول أن يكون لدى ضمان الجودة جهاز كمبيوتر أحدث/أفضل من المطور...أنا أصدق ذلك تماما!
فيما يلي ملاحظاتي حول تجربتنا الأخيرة مع هذا:عدم التوافق بين إندي 9 ونظام التشغيل Windows Server 2003؟

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