Question

Un ami m'a envoyé ce code et allègue que cela pourrait endommager le processeur. Est-ce vrai?

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"
        )
    }
}

Est-ce vrai?

Était-ce utile?

La solution

A partir du code de l'espace utilisateur? Non, il va provoquer une exception du privilège et le noyau mettra fin à votre programme. À partir du code noyau? J'en doute; vous serez jeter des exceptions, et que vous devez configurer manuellement le gestionnaire de défaut pour revenir au code en question pour continuer à le faire. Il y a aussi une bonne chance vous provoquez un défaut triple si une partie du mouvement CR3 réussit, car qui contrôle l'adresse de table de page et vous aurez probablement des défauts sur l'instruction chercher, gestionnaire Fetch, puis avec le double gestionnaire de défaut fetch. La CPU devrait juste arrêter si cela arrive.

Vérifiez les manuels Intel ou AMD pour la programmation des systèmes, ils vous diront quelles exceptions seront jetés lors de l'écriture des bits non valides aux registres de contrôle.

Autres conseils

Peut-être que si vous le laisser fonctionner pendant environ 20 ans.

Peut-être que ce code provoque votre processeur / verrouillage du système, mais il n'y a aucune chance qu'il endommage en permanence.

Imaginez si cela était vrai. Il serait immédiatement utilisé par les virus / trojans pour attaquer les ordinateurs ou masquer leur activité après la détection

Même dans le cas où tout code pourrait endommager un processeur, le fabricant de processeur pourrait émettre un soi-disant microcode mise à jour qui est quelque chose comme un soft-correctif pour le processeur. Ces microcode-mises à jour sont fournies par les systèmes d'exploitation et / ou (fabricants et processeurs) BIOS et sont chargés dans le processeur avant que le code pourrait être exécuté.

Pour résumer:. Non, votre ami ne va pas, en supposant que nous parlons x86 / x64 plates-formes

Non

. Si le point est de fébrilement excercice le processeur dans l'espoir de le casser, les systèmes informatiques ont des solutions thermiques (ventilateurs, échangeurs de chaleur en cuivre, les puits de chaleur, etc.) pour éviter la surchauffe. En cas de défaillance de la solution thermique, le BIOS affirmera #THERMTRIP et éteindre la machine.

J'ai entendu la rumeur d'un bug dans le Pentium I que lorsque donné une certaine série d'instructions insensées dans une boucle serrée brûlerait une seule bascule si vite la protection thermique ne pouvait pas le protéger.

Ce que je trouve référence pour une fois était vraiment vieux processeurs pourrait être cuit en faisant cela en mode réel:

halt:
    jmp short halt

Le code a été

halt:
    nop
    jmp short halt

Désolé, le code ne fonctionne pas sur un processeur ARM.

Dans de nombreux processeurs, des instructions qui définissent le mot d'état ou une incidence sur le processeur sont limitées en mode « superviseur ». De bons systèmes d'exploitation exécuter du code utilisateur dans un mode « protégé » qui ne possède pas les mêmes capacités que le mode « superviseur ». Exécuter des instructions privilégiées sur les processeurs modernes en mode utilisateur génère des exceptions.

Vous et votre ami pouvez toujours consulter les instructions dans un manuel de référence du langage d'assemblage et vérifier le bon fonctionnement.

Le code en question est peu probable de faire beaucoup, sauf le redémarrage de la machine. Dans mon expérience, pourrait être murée un processeur x86 en exécutant le code logiciel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top