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 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 efecto secundario del cableado de los transistores en la CPU y, por lo general, combinan funciones de la CPU que no estaban destinadas a combinarse. En los procesadores antiguos y modernos, también hay instrucciones incluidas intencionalmente en el procesador por parte del 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 sólo 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 para algunos códigos de operación ilegales y algunos otros procesadores no verifican los códigos de operación ilegales y, en cambio, realizan una operación no documentada.

Descripción general

Si bien 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, estas instrucciones se aprovecharon en los juegos de ordenador de las décadas de 1970 y 1980 para acelerar ciertas secciones en las que el tiempo era crítico. Otro uso común fue en la batalla en curso entre las implementaciones de protección contra copia y el cracking . Aquí, eran una forma de seguridad a través de la oscuridad , y su secreto normalmente no duraba mucho.

Un peligro asociado al uso de instrucciones ilegales era que, dado que el fabricante no garantiza su existencia y funcionamiento, podrían desaparecer o comportarse de manera diferente con cualquier cambio en el interior de la CPU o cualquier nueva revisión de la CPU, generando programas que Úselos incompatibles con las revisiones más recientes. Por ejemplo, varios juegos antiguos de Apple II no funcionaban correctamente en el nuevo Apple IIc , porque este último usaba una revisión de CPU más nueva ( 65C02  ) que eliminaba los códigos de operación ilegales.

Las CPU más recientes, como 80186 , 80286 , 68000 y sus descendientes, no tienen códigos de operación ilegales que sean ampliamente conocidos/utilizados. 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 desencadenar una determinada excepción o condición de falla . El controlador 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 controlador de excepciones/fallas, en cuyo caso ese controlador recibiría el control. Otra forma menos común de manejar instrucciones ilegales es definiéndolas para que no hagan nada más que ocupar tiempo y espacio (equivalente a la instrucción NOP oficial de la CPU); este método lo utilizan 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". Algunos 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 "Operación del BIOS") utilizado por Windows NTVDM . [3]

A pesar de la garantía de Intel contra tales instrucciones, la investigación que utilizó técnicas como la fuzzing descubrió una gran cantidad de instrucciones no documentadas en procesadores x86 en fecha tan tardía como 2018. [4] Algunas de estas instrucciones se comparten entre los fabricantes de procesadores, lo que indica que tanto Intel como AMD consciente de la instrucción y su finalidad, a pesar de que no aparezca 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 x86 no documentadas.

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

Ver 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. Corporación de Equipos Digitales (DEC). 1969. pág. 1-7 . Consultado el 13 de mayo de 2022 .
  2. ^ Åkesson, Linus (31 de marzo de 2013). "Decodificación GCR sobre la marcha". Archivado desde el original el 21 de marzo de 2017 . Consultado el 21 de marzo de 2017 .
  3. ^ Schulman, Andrés; Marrón, Ralf D .; Maxey, David; Michels, Raymond J.; Kyle, Jim (1994) [noviembre de 1993]. DOS indocumentado: una guía para programadores sobre funciones y estructuras de datos reservadas de MS-DOS, ampliada para incluir MS-DOS 6, Novell DOS y Windows 3.1 (2 ed.). Lectura, Massachusetts: Addison Wesley . ISBN 0-201-63287-X.(xviii+856+vi páginas, disquete de 3,5 pulgadas) Erratas: [1][2]
  4. ^ Domas, Cristóbal. "Romper el conjunto de instrucciones x86". YouTube . Archivado desde el original el 19 de diciembre de 2021 . Consultado el 3 de enero de 2018 .

Otras lecturas

enlaces externos