2010-04-29 10 views
12

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

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 eso cierto?

+6

Intrigante. Me sorprendería si fuera posible escribir código para dañar directamente el procesador, pero ciertamente es posible crear inestabilidad del sistema desde una aplicación que conduce a una falla total del sistema en espera de un reinicio. –

+16

No, no es cierto, pero hará que su monitor explote. – kahoon

+8

Bueno, ¿lo intentaste? – Christoffer

Respuesta

17

Desde el código de usuarios? No. Causará una excepción de privilegio y el núcleo terminará su programa. Desde el código kernel? Lo dudo; lanzará excepciones, y tendrá que configurar manualmente el controlador de fallas para volver al código en cuestión para seguir haciéndolo. También existe la posibilidad de que provoque una falla triple si parte del movimiento CR3 tiene éxito, ya que eso controla la dirección de la tabla de páginas y probablemente obtendrá fallas en la recuperación de instrucciones, la recuperación del controlador y luego la recuperación del controlador de fallas dobles. La CPU debería simplemente apagarse si eso sucede.

Consulte los manuales de Intel o AMD para la programación de sistemas, ellos le dirán qué excepciones se producirán al escribir bits inválidos en los registros de control.

+2

Las fallas triples normalmente desencadenan un reinicio. –

+0

La búsqueda del controlador de fallas dobles debe proceder de una puerta de tareas de todos modos, con un valor de CR3 "seguro" para que la CPU se cargue junto con las pilas de seguridad y los valores de registro. Smashing CR3 "no debería" hacer una falla triple en el sistema (teóricamente), pero aún así no es una buena idea. –

14

Tal vez si lo deja funcionar durante unos 20 años.

9

Quizás este código haga que su procesador/sistema se bloquee, pero no hay posibilidad de que lo dañe permanentemente.

Imagínese si esto fuera cierto: los virus/troyanos lo usarían inmediatamente para atacar las computadoras u ocultar su actividad después de la detección.

Incluso en el caso de que cualquier código pueda dañar un procesador, el fabricante del procesador podría emitir una llamada actualización de microcódigo, que es algo así como una corrección suave para el procesador. Dichas actualizaciones de microcódigos son proporcionadas por los sistemas operativos y/o BIOS (y fabricantes de procesadores) y se cargan en el procesador antes de que se pueda ejecutar dicho código.

Para resumir: No, su amigo está equivocado, asumiendo que estamos hablando de plataformas x86/x64.

5

No. Si el objetivo es ejercitar febrilmente el procesador con la esperanza de romperlo, los sistemas informáticos tienen soluciones térmicas (ventiladores, intercambiadores de calor de cobre, disipadores de calor, etc.) para evitar el sobrecalentamiento. En el caso de una falla en la solución térmica, el BIOS confirmará #THERMTRIP y apagará la máquina.

1

Escuché el rumor de un error en el Pentium I que, cuando se le daba una serie de instrucciones sin sentido en un circuito cerrado, quemaba un solo flip-flop tan rápido que la protección térmica no podía protegerlo.

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

halt: 
    jmp short halt 

El código correcto era

halt: 
    nop 
    jmp short halt 
+4

¿Podría también proporcionarnos la referencia? – Kosi2801

+2

Sinceramente lo dudo. AFAIK Pentium 1 no tenía protección térmica. Además, cualquier disipador térmico aprobado por Intel sería más que suficiente para mantener la temperatura central bajo control incluso con el máximo consumo de energía. http://www.intel.com/design/pentium/datashts/24199710.pdf –

1

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

En muchos procesadores, las instrucciones que configuran la palabra de estado o afectan al procesador están restringidas al modo "supervisor". Los buenos sistemas operativos ejecutan código de usuario en un modo "protegido" que no tiene las mismas capacidades que el modo "supervisor". La ejecución de instrucciones privilegiadas en procesadores modernos en modo Usuario genera excepciones.

Usted y su amigo siempre pueden buscar las instrucciones en un manual de referencia de lenguaje de ensamblaje y verificar la operación.

+1

este código era para Pentium 4 por cierto – Radian

0

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

Cuestiones relacionadas