stringtranslate.com

archivo COM

Varios archivos COM en IBM PC DOS 1.0

Un archivo COM es un tipo de archivo ejecutable simple . En los sistemas operativos VAX de Digital Equipment Corporation (DEC) de la década de 1970, se utilizaba como extensión de nombre de archivo para archivos de texto que contenían comandos que se enviarían al sistema operativo (similar a un archivo por lotes ). [1] Con la introducción del CP/M (un sistema operativo de microcomputadora ) de Digital Research , el tipo de archivos comúnmente asociados con la extensión COM cambió al de archivos ejecutables. Esta convención se trasladó posteriormente a DOS . Incluso cuando se complementaron con el formato de archivo EXE más general para ejecutables, los archivos COM compactos siguieron siendo viables y utilizados con frecuencia en DOS. .COM

La .COMextensión del nombre del archivo no tiene relación con el nombre de dominio de Internet de nivel superior .com (para "comercial"). Sin embargo, esta similitud de nombre ha sido aprovechada por los creadores de malware .

formato binario DOS

El formato COM es el formato ejecutable binario original utilizado en CP/M (incluidos SCP y MSX-DOS ), así como en DOS . Es muy simple; no tiene encabezado (con la excepción de los archivos CP/M 3), [2] y no contiene metadatos estándar , solo código y datos. Esta simplicidad tiene un precio: el binario tiene un tamaño máximo de 65.280 (FF00 h ) bytes (256 bytes menos que 64 KB) y almacena todo su código y datos en un segmento .

Como carece de información de reubicación , el sistema operativo lo carga en una dirección preestablecida, en el desplazamiento 0100h inmediatamente después del PSP , donde se ejecuta (de ahí la limitación del tamaño del ejecutable): el punto de entrada se fija en las 0100h. [nb 1] Esto no fue un problema en máquinas de 8 bits, ya que pueden abordar 64k de memoria como máximo, pero las máquinas de 16 bits tienen un espacio de direcciones mucho mayor, razón por la cual el formato dejó de usarse.

En la arquitectura de CPU Intel 8080 , sólo se podían direccionar 65.536 bytes de memoria (rango de direcciones 0000h a FFFFh). Bajo CP/M, los primeros 256 bytes de esta memoria, desde las 0000 h hasta las 00 FFh, estaban reservados para el uso del sistema por parte de la página cero , y cualquier programa de usuario tenía que cargarse exactamente a las 0100 h para poder ejecutarse. [nb 1] Los archivos COM se ajustan perfectamente a este modelo. Antes de la introducción de MP/M y CP/M concurrente , no había posibilidad de ejecutar más de un programa o comando a la vez: se ejecutaba el programa cargado a las 01:00 h, y ningún otro.

Aunque el formato de archivo es el mismo en DOS y CP/M, los archivos .COM para los dos sistemas operativos no son compatibles; Los archivos COM de DOS contienen instrucciones x86 y posiblemente llamadas al sistema DOS , mientras que los archivos COM CP/M contienen instrucciones 8080 y llamadas al sistema CP/M (los programas restringidos a ciertas máquinas también podrían contener instrucciones adicionales para 8085 o Z80 ).

Los archivos .COM en DOS configuran todos los registros de segmento x86 con el mismo valor y el registro SP (puntero de pila) con el desplazamiento de la última palabra disponible en el primer segmento de 64 KB (normalmente FFFEh) o el tamaño máximo de memoria disponible en el bloque. el programa se carga para ambos, el programa más una pila de al menos 256 bytes, lo que sea más pequeño, por lo que la pila comienza en la parte superior del segmento de memoria correspondiente y trabaja hacia abajo desde allí. [3] [4]

En la API DOS 1.x original , que era un derivado de la API CP/M, la terminación del programa de un archivo .COM se realizaría llamando a la función INT 20h (Terminar programa) o bien a la función INT 21h 0, que servía para El mismo propósito, y el programador también tenía que asegurarse de que los registros de segmento de código y datos contuvieran el mismo valor al finalizar el programa para evitar una posible falla del sistema. Aunque esto podría usarse en cualquier versión de DOS, Microsoft recomendó el uso de INT 21h Function 4Ch para la terminación del programa desde DOS 2.x en adelante, que no requería que los datos y el segmento de código se establecieran en el mismo valor.

Es posible crear un archivo .COM para que se ejecute en ambos sistemas operativos en forma de un binario grueso . No existe una verdadera compatibilidad a nivel de instrucción; las instrucciones en el punto de entrada se eligen para que tengan la misma funcionalidad pero sean diferentes en ambos sistemas operativos, y hacen que la ejecución del programa salte a la sección del sistema operativo en uso. Se trata básicamente de dos programas diferentes con la misma funcionalidad en un único archivo, precedidos de un código que selecciona cuál utilizar.

En CP/M 3, si el primer byte de un archivo COM es C9h, hay un encabezado de 256 bytes; [2] dado que C9h corresponde a la instrucción 8080RET , esto significa que el archivo COM finalizará inmediatamente si se ejecuta en una versión anterior de CP/M que no admita esta extensión. (Debido a que los conjuntos de instrucciones de 8085 y Z80 son superconjuntos del conjunto de instrucciones de 8080, esto funciona en los tres procesadores). C9h es un código de operación no válido en 8088/8086 y provocará una excepción de interrupción 6 generada por el procesador en v86. modo en los chips x86 386 y posteriores. Dado que C9h es el código de operación para LEAVE desde 80188/80186 y, por lo tanto, no se utiliza como primera instrucción en un programa válido, el cargador ejecutable en algunas versiones de DOS rechaza los archivos COM que comienzan con C9h, evitando un bloqueo .

Los archivos pueden tener nombres que terminen en .COM, pero no estar en el formato simple descrito anteriormente; esto se indica mediante un número mágico al comienzo del archivo. Por ejemplo, el archivo COMMAND.COM en DR DOS 6.0 en realidad está en formato ejecutable de DOS , indicado por los dos primeros bytes que son MZ (4Dh 5Ah), las iniciales de Mark Zbikowski .

Grandes programas

En DOS, el cargador o el entorno de ejecución no proporcionan gestión de memoria para archivos COM . Toda la memoria está simplemente disponible para el archivo COM. Después de la ejecución, se recarga el shell de comandos del sistema operativo, COMMAND.COM . Esto deja la posibilidad de que el archivo COM pueda ser muy simple, usando un solo segmento , o arbitrariamente complejo, proporcionando su propio sistema de administración de memoria. Un ejemplo de programa complejo es COMMAND.COM, el shell de DOS, que proporcionaba un cargador para cargar otros programas COM o EXE . En el sistema .COM, se pueden cargar y ejecutar programas más grandes (hasta el tamaño de memoria disponible), pero el cargador del sistema asume que todo el código y los datos están en el primer segmento, y corresponde al programa .COM proporcionar cualquier mayor organización. Los programas que superan la memoria disponible o los segmentos de datos grandes se pueden manejar mediante enlaces dinámicos , si se incluye el código necesario en el programa .COM. La ventaja de utilizar el formato .COM en lugar de .EXE es que la imagen binaria suele ser más pequeña y más fácil de programar utilizando un ensamblador . [5] Una vez que estuvieron disponibles compiladores y enlazadores de potencia suficiente, ya no era ventajoso utilizar el formato .COM para programas complejos.

Soporte de plataforma

El formato todavía es ejecutable en muchas plataformas modernas basadas en Windows NT , pero se ejecuta en un subsistema de emulación de MS-DOS , NTVDM , que no está presente en las variantes de 64 bits . Los archivos COM también se pueden ejecutar en emuladores de DOS como DOSBox , en cualquier plataforma compatible con estos emuladores.

Usar por razones de compatibilidad

Los sistemas operativos basados ​​en Windows NT utilizan la extensión .com para una pequeña cantidad de comandos heredados de la época de MS-DOS, aunque actualmente se implementan como archivos .exe . El sistema operativo reconocerá el encabezado del archivo .exe y los ejecutará correctamente a pesar de su extensión .com técnicamente incorrecta. (De hecho, cualquier archivo .exe puede cambiarse de nombre a .com y seguir ejecutándose correctamente). El uso de las extensiones .com originales para estos comandos garantiza la compatibilidad con archivos por lotes de DOS más antiguos que pueden hacer referencia a ellos con sus nombres de archivo originales completos. Estos comandos son CHCP, DISKCOMP, DISKCOPY, FORMAT, MODEy MORE. [6]TREE

Preferencia de ejecución

En DOS, si un directorio contiene un archivo COM y un archivo EXE con el mismo nombre, cuando no se especifica ninguna extensión, el archivo COM se selecciona preferentemente para su ejecución. Por ejemplo, si un directorio en la ruta del sistema contiene dos archivos llamados foo.comy foo.exe, se ejecutaría lo siguiente foo.com:

C:\>foo

Un usuario que desee ejecutar foo.exepuede utilizar explícitamente el nombre de archivo completo:

C:\>foo.exe

Aprovechando este comportamiento predeterminado, los creadores de virus y otros programadores maliciosos han utilizado nombres como este notepad.compara sus creaciones, con la esperanza de que si se coloca en el mismo directorio que el archivo EXE correspondiente, un comando o archivo por lotes pueda activar accidentalmente su programa en lugar del editor de texto notepad.exe. Nuevamente, estos archivos .com pueden contener un ejecutable en formato .exe.

En Windows NT y derivados ( Windows 2000 , Windows XP , Windows Vista y Windows 7 ), la variable PATHEXT se usa para anular el orden de preferencia (y las extensiones aceptables) para llamar archivos sin especificar la extensión desde la línea de comando. El valor predeterminado todavía coloca los archivos antes que los archivos. Esto se parece mucho a una característica que se encontraba anteriormente en la línea de procesadores de línea de comandos extendidos 4DOS , 4OS2 y 4NT de JP Software ..com.exe

Uso malicioso de la extensión .com

Algunos creadores de virus informáticos esperan aprovechar la probable falta de conocimiento de los usuarios modernos de la extensión de archivo .com y el formato binario asociado, junto con su mayor familiaridad con el nombre de dominio de Internet .com . Se han enviado correos electrónicos con nombres de archivos adjuntos similares a "www.example.com". Los usuarios incautos de Microsoft Windows que hicieran clic en dicho archivo adjunto esperarían comenzar a explorar un sitio llamado , pero en su lugar ejecutarían el archivo de comando binario adjunto llamado , dándole permiso total para hacer en su máquina lo que su autor tuviera en mente. [ cita necesaria ]http://www.example.com/www.example

No hay nada malicioso en el formato del archivo COM en sí; esto es una explotación de la colisión coincidente de nombres entre archivos de comando .com y sitios web comerciales .com .

Ver también

Notas

  1. ^ ab En la mayoría de las versiones de CP/M , el inicio del TPA fue en el desplazamiento +100h, solo precedido en la memoria por la página cero en el desplazamiento +0h. Algunas versiones diferían por razones de hardware, incluido CP/M para el Heath H89 , donde comenzó en el desplazamiento +4300h (por compatibilidad, existía una modificación de hardware de Magnolia Microsystems para mapear las ROM a +100h después del inicio), o CP/M para el TRS-80 Modelo I y TRS-80 Modelo III , donde los programas se cargaron en offset +0h.

Referencias

  1. ^ Cristiano, Brian; Markson, Tom; Skrenta, rico (eds.). "Sección 5.3". El libro de instrucciones PDP-11 (Revisión 1 ed.). Archivado desde el original el 1 de agosto de 2018 . Consultado el 1 de agosto de 2018 .(NB. Tiene una referencia para el sistema operativo RT-11 que se ejecuta en la minicomputadora PDP-11 , que muestra en la sección 5.3 que .COM se usa para hacer referencia a un archivo de comando).
  2. ^ ab Elliott, John C.; Lopushinsky, Jim (2002) [11 de abril de 1998]. "Encabezado del archivo CP/M 3 COM". Seasip.info . Archivado desde el original el 1 de agosto de 2018.
  3. ^ Paul, Matías R. (7 de octubre de 2002) [2000]. "Re: Ejecutar un archivo COM". Grupo de noticias : alt.msdos.programmer. Archivado desde el original el 3 de septiembre de 2017 . Consultado el 3 de septiembre de 2017 .[1] (NB. Tiene detalles sobre las convenciones de llamada del programa DOS COM).
  4. ^ Lunt, Benjamín "Ben" D. (2020). "Registros de inicio de DOS .COM". Software siempre joven . Archivado desde el original el 12 de noviembre de 2020 . Consultado el 14 de diciembre de 2021 .
  5. ^ Scanlon, Leo J. (1991). "Capitulo 2". Subrutinas de lenguaje ensamblador para MS-DOS (2 ed.). Libros de Windcrest. pag. 16.ISBN _ 0-8306-7649-X.
  6. ^ "Comandos de Windows". Microsoft. 2023-04-26.

enlaces externos