سؤال

أرسل لي أحد الأصدقاء هذا الرمز ويزعم أنه قد يلحق الضرر بالمعالج. هل هذا صحيح؟

void damage_processor() {
    while (true) {
        // Assembly code that sets the five control registers bits to ones which causes a bunch of exceptions in the system and then damages the processor
        Asm(
            "mov cr0, 0xffffffff \n\t"
            "mov cr1, 0xffffffff \n\t"
            "mov cr2, 0xffffffff \n\t"
            "mov cr3, 0xffffffff \n\t"
            "mov cr4, 0xffffffff \n\t"
        )
    }
}

هل هذا صحيح؟

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

المحلول

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

تحقق من أدلة Intel أو AMD لبرمجة الأنظمة ، وسوف يخبرونك بالاستثناءات التي سيتم طرحها عند كتابة أجزاء غير صالحة لسجلات التحكم.

نصائح أخرى

ربما إذا سمحت لها بالركض لمدة 20 عامًا تقريبًا.

ربما يتسبب هذا الرمز في حبس المعالج/النظام الخاص بك ولكن لا توجد فرصة لإلحاق الأضرار به بشكل دائم.

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

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

لتلخيص ذلك: لا ، صديقك خطأ ، على افتراض أننا نتحدث عن منصات X86/X64.

لا. إذا كانت النقطة هي التمسك بالمعالج بشكل محموم على أمل كسره ، فإن أنظمة الكمبيوتر لها حلول حرارية (المشجعين ، والمبادلات الحرارية النحاسية ، والمصارف الحرارية ، وما إلى ذلك) لمنع ارتفاع درجة الحرارة. في حالة حدوث فشل في المحلول الحراري ، ستؤكد BIOS #thermtrip وإيقاف تشغيل الجهاز.

سمعت شائعات عن وجود خطأ في Pentium I أنه عندما أعطيت سلسلة معينة من التعليمات غير المنطقية في حلقة ضيقة من شأنها أن تحترق من فرقة واحدة حتى لا تستطيع الحماية الحرارية حمايتها.

ما وجدته مرجعًا لمرة واحدة كان حقًا يمكن طهي وحدات المعالجة المركزية القديمة عن طريق القيام بذلك في الوضع الحقيقي:

halt:
    jmp short halt

كان الرمز الصحيح

halt:
    nop
    jmp short halt

آسف ، لا يتم تشغيل الرمز على معالج الذراع.

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

يمكنك دائمًا البحث عن التعليمات في دليل مرجع لغة التجميع والتحقق من العملية.

من غير المرجح أن تفعل الكود المعني الكثير باستثناء إعادة تشغيل الجهاز. في تجربتي ، يمكن طوب وحدة المعالجة المركزية X86 عن طريق تنفيذ رمز البرمجيات.

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