2010-04-29 8 views
12

Ein Freund hat mir diesen Code geschickt und behauptet, dass er den Prozessor beschädigen könnte. Ist das wahr?Könnte dieser Code meinen Prozessor beschädigen?

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

Stimmt das?

+6

Faszinierend. Ich wäre schockiert, wenn es möglich wäre, Code zu schreiben, um den Prozessor direkt zu beschädigen, aber es ist sicherlich möglich, eine Systeminstabilität von einer Anwendung zu erzeugen, die zu einem totalen Systemausfall führt, bis ein Neustart stattfindet. –

+16

Nein, es ist nicht wahr, aber es wird Ihren Monitor explodieren lassen. – kahoon

+8

Nun, hast du es versucht? – Christoffer

Antwort

17

Von User-Space-Code war? Nein. Es wird eine Privilegien Ausnahme verursachen und der Kernel wird Ihr Programm beenden. Aus dem Kernel-Code? Ich bezweifle das; Sie werden Ausnahmen auslösen, und Sie müssen den Fehlerhandler manuell einrichten, um zu dem betreffenden Code zurückzukehren, damit Sie weitermachen. Es gibt auch eine gute Chance, dass Sie einen dreifachen Fehler verursachen, wenn ein Teil der CR3-Verschiebung erfolgreich ist, da dies die Seitentabellenadresse steuert und Sie wahrscheinlich Fehler beim Instruktions-Fetch, Handler-Fetch und dann beim Doppelfehler-Handler-Fetch bekommen. Die CPU sollte einfach herunterfahren, wenn das passiert.

Überprüfen Sie die Intel- oder AMD-Handbücher für die Systems-Programmierung, sie werden Ihnen sagen, welche Ausnahmen beim Schreiben ungültiger Bits in die Steuerregister ausgelöst werden.

+2

Dreifache Fehler lösen normalerweise einen Neustart aus. –

+0

Der Doppelfehler-Handler-Abruf sollte sowieso von einem Task-Gatter kommen, mit einem "sicheren" CR3-Wert für die CPU, der zusammen mit sicheren Stapeln und Registerwerten geladen wird. CR3 "sollte" das System (theoretisch) nicht dreimal verfälschen, aber es ist immer noch keine gute Idee. –

14

Vielleicht, wenn Sie es seit etwa 20 Jahren laufen lassen.

9

Vielleicht verursacht dieser Code, dass Ihr Prozessor/System blockiert, aber es besteht keine Chance, dass es dauerhaft beschädigt wird.

Stellen Sie sich vor, dies wäre wahr: Es würde sofort von Viren/Trojanern verwendet, um Computer anzugreifen oder ihre Aktivität nach der Erkennung zu verbergen.

Selbst in dem Fall, dass irgendein Code einen Prozessor beschädigen könnte, könnte der Prozessorhersteller ein so genanntes Microcode-Update ausgeben, das so etwas wie ein Soft-Fix für den Prozessor ist. Solche Microcode-Updates werden von Betriebssystemen und/oder BIOS (und Prozessorherstellern) bereitgestellt und in den Prozessor geladen, bevor ein solcher Code ausgeführt werden könnte.

Um es zusammenzufassen: Nein, Ihr Freund ist falsch, vorausgesetzt, wir sprechen über x86/x64-Plattformen.

5

Nein. Wenn es darum geht, den Prozessor fieberhaft zu zerbrechen, um ihn zu brechen, haben Computersysteme thermische Lösungen (Lüfter, Kupferwärmetauscher, Kühlkörper usw.), um eine Überhitzung zu vermeiden. Im Falle eines Fehlers in der thermischen Lösung aktiviert das BIOS #THERMTRIP und schaltet das Gerät aus.

1

Ich hörte das Gerücht von einem Fehler im Pentium I, dass, wenn eine bestimmte unsinnige Reihe von Anweisungen in einer engen Schleife ein einzelnes Flipflop so schnell verbrennen würde, der Wärmeschutz es nicht schützen könnte.

Was ich Referenz für einmal gefunden war wirklich alte CPUs konnte, indem Sie diese im Real-Modus gekocht werden:

halt: 
    jmp short halt 

Der richtige Code

halt: 
    nop 
    jmp short halt 
+4

Können Sie uns auch die Referenz geben? – Kosi2801

+2

Ich bezweifle das ernsthaft. AFAIK Pentium 1 hatte keinen Wärmeschutz. Darüber hinaus wäre jeder von Intel zugelassene Kühlkörper mehr als ausreichend, um die Kerntemperatur auch bei maximalem Stromverbrauch in Grenzen zu halten. http://www.intel.com/design/pentium/datashts/24199710.pdf –

1

Entschuldigung, der Code läuft nicht auf einem ARM-Prozessor.

In vielen Prozessoren sind Anweisungen, die das Statuswort setzen oder den Prozessor beeinflussen, auf den "Supervisor" -Modus beschränkt. Gute Betriebssysteme führen Benutzercode in einem "geschützten" Modus aus, der nicht die gleichen Fähigkeiten wie der "Supervisor" -Modus hat. Das Ausführen privilegierter Anweisungen auf modernen Prozessoren im Benutzermodus erzeugt Ausnahmen.

Sie und Ihr Freund konnten die Anweisungen immer in einem Assembler-Referenzhandbuch nachschlagen und den Vorgang überprüfen.

+1

Dieser Code war für Pentium 4 BTW – Radian

0

Es ist unwahrscheinlich, dass der fragliche Code viel bewirkt, außer dass die Maschine neu gestartet wird. Meiner Erfahrung nach könnte eine x86-CPU durch Ausführung eines Software-Codes gemauert werden.