Domanda

Un amico mi ha mandato quel codice e sostiene che potrebbe danneggiare il processore. È vero?

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

È vero?

È stato utile?

Soluzione

Da codice userspace? No. causerà un'eccezione privilegio e il kernel terminerà il programma. Dal codice del kernel? Ne dubito; sarete generare eccezioni e che avrebbe dovuto impostare manualmente il gestore degli errori per tornare al codice in questione per continuare a farlo. C'è anche una buona probabilità avrete causare un guasto tripla se una parte del movimento CR3 ha esito positivo, dal momento che i controlli l'indirizzo della tabella di pagina e probabilmente otterrete i guasti su istruzione fetch, gestore fetch, e quindi il gestore doppio errore preleva. La CPU deve solo chiudere se ciò accade.

Controlla i manuali Intel o AMD per la programmazione Systems, vi diranno che saranno gettati eccezioni quando si scrive i bit non validi ai registri di controllo.

Altri suggerimenti

Forse se si farlo funzionare per circa 20 anni.

Forse questo codice fa sì che il processore / blocco del sistema, ma non v'è alcuna possibilità che danneggia in modo permanente.

Immaginate se questo fosse vero:. Sarebbe immediatamente essere utilizzato da virus / trojan per attaccare i computer o nascondere la loro attività dopo il rilevamento

Anche nel caso che qualsiasi codice potrebbe danneggiare un processore, il produttore di processori potrebbe emettere un cosiddetto microcodice-aggiornamento, che è qualcosa di simile a un soft-fix per il processore. Tali microcodice-aggiornamenti sono forniti da sistemi operativi e / o BIOS (e produttori di processori) e vengono caricati nel processore prima potrebbe essere eseguito tale codice.

Per riassumere:. No, il tuo amico è sbagliato, assumendo stiamo parlando di x86 / x64 piattaforme

No. Se il punto è ed esercita febbrile processore nella speranza di rottura, i sistemi di computer hanno soluzioni termiche (ventilatori, scambiatori di calore, rame dissipatori di calore, ecc) per impedire il surriscaldamento. In caso di guasto nella soluzione termica, il BIOS affermare #THERMTRIP e spegnere la macchina.

Ho sentito voci di un bug nel Pentium I che quando data una certa serie di assurde istruzioni in un loop stretto brucerebbe un singolo flip-flop così in fretta la protezione termica non poteva proteggerlo.

Quello che ho trovato di riferimento per una volta è stato davvero vecchie CPU potrebbe essere cucinato in questo modo in modalità reale:

halt:
    jmp short halt

Il codice corretto è stato

halt:
    nop
    jmp short halt

Siamo spiacenti, il codice non viene eseguito su un processore ARM.

In molti processori, le istruzioni che impostano la parola di stato o influenzano il processore sono limitate alla modalità "supervisore". Buone sistemi operativi eseguire codice utente in un modo "protetto" che non ha le stesse capacità di modalità "supervisore". L'esecuzione di istruzioni privilegiate su processori moderni in modalità utente genera eccezioni.

Tu e il tuo amico può sempre cercare le istruzioni in un manuale di riferimento linguaggio assembly e verificare il funzionamento.

Il codice in questione è improbabile che possa fare molto, tranne il riavvio della macchina. Nella mia esperienza, una CPU x86 potrebbe essere murata eseguendo codice software.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top