Pregunta

Un amigo me envió ese código y alega que podría dañar el procesador. ¿Es eso cierto?

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

Es verdad?

¿Fue útil?

Solución

Desde el código de usuarios? No. Se va a causar una excepción privilegio y el núcleo dará por terminado su programa. De código del núcleo? Lo dudo; se le lanzar excepciones, y que tendría que configurar manualmente el administrador de fallos para volver al código en cuestión a seguir haciéndolo. También hay una buena posibilidad se le causa un fallo de triple si es parte del movimiento CR3 tiene éxito, ya que los controles de la dirección de la tabla de la página y probablemente obtendrá fallos en búsqueda de instrucciones, controlador de búsqueda, y luego el controlador de doble falta buscarlo. La CPU simplemente debe cerrar si eso sucede.

Compruebe los manuales de Intel o AMD para la programación de sistemas, que le dirá qué excepciones serán arrojados al escribir los bits válidos de los registros de control.

Otros consejos

Tal vez si se deja correr durante unos 20 años.

Tal vez este código hace que su procesador / sistema se bloquee, pero no hay ninguna posibilidad de que daña de forma permanente.

Imagínese si esto fuera cierto:. Inmediato sería utilizado por virus / troyanos para atacar ordenadores u ocultar su actividad después de la detección

Incluso en el caso de que cualquier código podría dañar un procesador, el fabricante de procesadores podría emitir una llamada de microcódigo-actualización, que es algo así como una suave solución para el procesador. Tales microcódigo actualizaciones se proporcionan por los sistemas operativos y / o BIOS (y fabricantes de procesadores) y se cargan en el procesador antes de que tal código podría ser ejecutado.

Para resumir:. No, su amigo está mal, suponiendo que estamos hablando x86 / x64 plataformas

No. Si el punto está a ejercitar febrilmente el procesador con la esperanza de romperlo, sistemas de ordenador tienen soluciones térmicas (ventiladores, intercambiadores de calor de cobre, disipadores de calor, etc.) para evitar el sobrecalentamiento. En el caso de un fallo en la solución térmica, el BIOS afirmar #THERMTRIP y apagar la máquina.

oí rumor de un error en el Pentium I, que cuando se le da una cierta serie sin sentido de instrucciones en un bucle estrecho quemaría un solo flip-flop tan rápido la protección térmica no podía protegerla.

Lo que encontré referencia para una vez fue muy viejos CPU podría ser cocinado al hacer esto en modo real:

halt:
    jmp short halt

El código correcto era

halt:
    nop
    jmp short halt

Lo sentimos, el código no se ejecuta en un procesador ARM.

En muchos procesadores, instrucciones que establecen la palabra de estado o afectan el procesador están restringidos a modo de "supervisor". Los buenos sistemas operativos ejecutar código de usuario en un modo "protegido" que no tiene las mismas capacidades que el modo de "supervisor". Ejecutar instrucciones privilegiadas en los procesadores modernos en el modo de usuario genera excepciones.

Usted y su amigo siempre se puede buscar las instrucciones en un manual de referencia de lenguaje ensamblador y verificar el funcionamiento.

El código en cuestión es poco probable que hacer mucho, excepto reiniciar la máquina. En mi experiencia, una CPU x86 podría ser de ladrillo mediante la ejecución de código de software.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top