stringtranslate.com

Código de operación ilegal

Una señal de instrucción ilegal generada por humanos

Un código de operación ilegal , también llamado operación no implementada , [1] código de operación no deseado [2] o instrucción no documentada , es una instrucción para una CPU que no se menciona en ninguna documentación oficial publicada por el diseñador o fabricante de la CPU, que sin embargo tiene un efecto. Los códigos de operación ilegales eran comunes en las CPU más antiguas diseñadas durante la década de 1970, como MOS Technology 6502 , Intel 8086 y Zilog Z80 . En estos procesadores más antiguos, muchos existen como un efecto secundario del cableado de transistores en la CPU, y generalmente combinan funciones de la CPU que no estaban destinadas a combinarse. En procesadores antiguos y modernos, también hay instrucciones incluidas intencionalmente en el procesador por el fabricante, pero que no están documentadas en ninguna especificación oficial.

El efecto de muchos códigos de operación ilegales en muchos procesadores es simplemente una trampa para un controlador de errores. Sin embargo, algunos procesadores que detectan la mayoría de los códigos de operación ilegales no lo hacen con algunos códigos de operación ilegales, y otros procesadores no comprueban los códigos de operación ilegales y, en su lugar, realizan una operación no documentada.

Descripción general

Aunque la mayoría de las instrucciones ilegales accidentales tienen efectos inútiles o incluso muy indeseables (como bloquear la computadora), algunas pueden tener funciones útiles en determinadas situaciones. En ocasiones, dichas instrucciones se utilizaron en los juegos de computadora de los años 1970 y 1980 para acelerar ciertas secciones críticas en cuanto al tiempo. Otro uso común fue en la batalla en curso entre las implementaciones de protección contra copias y el cracking . En este caso, eran una forma de seguridad a través de la oscuridad y su secreto por lo general no duraba mucho.

Un peligro asociado con el uso de instrucciones ilegales era que, dado que el fabricante no garantiza su existencia y funcionamiento, podían desaparecer o comportarse de forma diferente con cualquier cambio en los componentes internos de la CPU o cualquier nueva revisión de la misma, haciendo que los programas que las utilizasen fueran incompatibles con las revisiones más recientes. Por ejemplo, varios juegos antiguos de Apple II no funcionaban correctamente en la nueva Apple IIc , porque esta última utilizaba una revisión de CPU más reciente ( 65C02  ) que eliminaba los códigos de operación ilegales.

Las CPU posteriores, como la 80186 , 80286 , 68000 y sus descendientes, no tienen códigos de operación ilegales que sean ampliamente conocidos/usados. Idealmente, la CPU se comportará de una manera bien definida cuando encuentre un código de operación desconocido en el flujo de instrucciones, como activar una determinada excepción o condición de falla . El manejador de excepciones o fallas del sistema operativo generalmente terminará la aplicación que causó la falla, a menos que el programa haya establecido previamente su propio manejador de excepciones/fallas, en cuyo caso ese manejador recibiría el control. Otra forma menos común de manejar instrucciones ilegales es definiéndolas para que no hagan nada excepto ocupar tiempo y espacio (equivalente a la instrucción NOP oficial de la CPU ); este método es utilizado por los procesadores TMS9900 y 65C02 , entre otros.Alternativamente, se pueden emular instrucciones desconocidas en el software (por ejemplo, LOADALL ), o incluso se pueden implementar pseudoinstrucciones "nuevas". Algunas BIOS , administradores de memoria y sistemas operativos aprovechan esto, por ejemplo, para permitir que las tareas V86 se comuniquen con el sistema subyacente, es decir, BOP (de "BIOS Operation") utilizado por Windows NTVDM . [3]

A pesar de la garantía de Intel contra tales instrucciones, la investigación que utilizó técnicas como el fuzzing descubrió una gran cantidad de instrucciones no documentadas en procesadores x86 hasta 2018. [4] Algunas de estas instrucciones son compartidas por todos los fabricantes de procesadores, lo que indica que tanto Intel como AMD conocen la instrucción y su propósito, a pesar de que no aparece en ninguna especificación oficial. Otras instrucciones son específicas de fabricantes o líneas de productos específicas. Se desconoce el propósito de la mayoría de las instrucciones no documentadas de x86.

Hoy en día, los detalles de estas instrucciones son de interés principalmente para la emulación exacta de sistemas más antiguos.

Véase también

Referencias

  1. ^ "1.2. Formato de instrucción". Manual de referencia del PDP-10: Programación con el conjunto de instrucciones del PDP-10 (PDF) . Vol. 1. Digital Equipment Corporation (DEC). 1969. pág. 1-7 . Consultado el 13 de mayo de 2022 .
  2. ^ Åkesson, Linus (31 de marzo de 2013). «Descodificación GCR sobre la marcha». Archivado desde el original el 21 de marzo de 2017. Consultado el 21 de marzo de 2017 .
  3. ^ Schulman, Andrew; Brown, Ralf D .; Maxey, David; Michels, Raymond J.; Kyle, Jim (1994) [noviembre de 1993]. DOS no documentado: guía del programador para funciones y estructuras de datos reservadas de MS-DOS, ampliada para incluir MS-DOS 6, Novell DOS y Windows 3.1 (2.ª edición). Reading, Massachusetts: Addison Wesley . ISBN 0-201-63287-X.(xviii+856+vi páginas, disquete de 3,5 pulgadas) Erratas: [1][2]
  4. ^ Domas, Christopher (31 de agosto de 2017). "Rompiendo el conjunto de instrucciones x86". YouTube . Archivado desde el original el 19 de diciembre de 2021 . Consultado el 3 de enero de 2018 .

Lectura adicional

Enlaces externos