stringtranslate.com

binario gordo

Un binario pesado (o binario multiarquitectura ) es un programa o biblioteca ejecutable por computadora que se ha ampliado (o "engordado") con código nativo de múltiples conjuntos de instrucciones que, en consecuencia, se pueden ejecutar en múltiples tipos de procesadores. [1] Esto da como resultado un archivo más grande que un archivo binario normal de una arquitectura, de ahí el nombre.

El método habitual de implementación consiste en incluir una versión del código máquina para cada conjunto de instrucciones, precedida por un único punto de entrada con código compatible con todos los sistemas operativos, que ejecuta un salto a la sección correspondiente. Las implementaciones alternativas almacenan diferentes ejecutables en diferentes bifurcaciones , cada una con su propio punto de entrada que es utilizado directamente por el sistema operativo.

El uso de binarios gruesos no es común en el software del sistema operativo ; Existen varias alternativas para resolver el mismo problema, como el uso de un programa de instalación para elegir un binario específico de la arquitectura en el momento de la instalación (como con Android con varios APK ), seleccionar un binario específico de la arquitectura en tiempo de ejecución (como con Plan 9 directorios sindicales yLos paquetes gordos de GNUstep ), [2] [3] distribuir software en forma de código fuente y compilarlo en el lugar, o el uso de una máquina virtual (como con Java ) y compilación justo a tiempo .

Apolo

Ejecutables compuestos de Apollo

En 1988, Domain/OS SR10.1 de Apollo Computer introdujo un nuevo tipo de archivo, "cmpexe" (ejecutable compuesto), que incluía archivos binarios para los ejecutables Motorola 680x0 y Apollo PRISM . [4]

Manzana

El gordo binario de Apple

Un esquema binario gordo suavizó la transición del Apple Macintosh , a partir de 1994, de los microprocesadores de 68k a los microprocesadores PowerPC . Muchas aplicaciones para la plataforma antigua se ejecutaban de forma transparente en la nueva plataforma bajo un esquema de emulación en evolución , pero el código emulado generalmente se ejecuta más lento que el código nativo. Las aplicaciones lanzadas como "binarios gordos" ocupaban más espacio de almacenamiento, pero se ejecutaban a toda velocidad en cualquiera de las plataformas. Esto se logró empaquetando una versión compilada en 68000 y una versión compilada en PowerPC del mismo programa en sus archivos ejecutables. [5] [6] El código 68K más antiguo (CFM-68K o 68K clásico) continuó almacenado en la bifurcación de recursos , mientras que el código PowerPC más nuevo estaba contenido en la bifurcación de datos , en formato PEF . [7] [8] [9]

Los binarios gordos eran más grandes que los programas que soportaban sólo PowerPC o 68k, lo que llevó a la creación de una serie de utilidades que eliminarían la versión innecesaria. [5] [6] En la era de los discos duros pequeños , cuando los discos duros de 80 MB eran un tamaño común, estas utilidades a veces eran útiles, ya que el código de programa representaba generalmente un gran porcentaje del uso total del disco y eliminaba los miembros innecesarios de un El binario gordo liberaría una cantidad significativa de espacio en un disco duro.

Binarios multiarquitectura de NeXT/Apple

Binarios de arquitectura múltiple NeXTSTEP

Los binarios gruesos eran una característica del sistema operativo NeXTSTEP / OPENSTEP de NeXT , comenzando con NeXTSTEP 3.1. En NeXTSTEP, se les llamó "binarios de arquitectura múltiple". Los binarios de arquitectura múltiple originalmente estaban destinados a permitir que el software se compilara para ejecutarse tanto en el hardware basado en Motorola 68k de NeXT como en las PC basadas en Intel IA-32 que ejecutan NeXTSTEP, con un único archivo binario para ambas plataformas. [10] Posteriormente se utilizó para permitir que las aplicaciones OPENSTEP se ejecutaran en PC y en las diversas plataformas RISC compatibles con OPENSTEP. Los archivos binarios de arquitectura múltiple están en un formato de archivo especial, en el que un solo archivo almacena uno o más subarchivos Mach-O para cada arquitectura admitida por el binario de arquitectura múltiple. Cada binario de arquitectura múltiple comienza con una estructura ( ) que contiene dos enteros sin signo. El primer número entero ("mágico") se utiliza como número mágico para identificar este archivo como Fat Binary. El segundo número entero ( nfat_arch ) define cuántos archivos Mach-O contiene el archivo (cuántas instancias del mismo programa para diferentes arquitecturas). Después de este encabezado, hay un número nfat_arch de estructuras fat_arch ( ). Esta estructura define el desplazamiento (desde el inicio del archivo) en el que se encuentra el archivo, la alineación, el tamaño y el tipo y subtipo de CPU al que se dirige el binario Mach-O (dentro del archivo).struct fat_headerstruct fat_arch

La versión de GNU Compiler Collection enviada con Developer Tools pudo realizar una compilación cruzada del código fuente para las diferentes arquitecturas en las que NeXTStep podía ejecutarse. Por ejemplo, era posible elegir las arquitecturas de destino con múltiples opciones '-arch' (con la arquitectura como argumento). Esta fue una forma conveniente de distribuir un programa para NeXTStep que se ejecuta en diferentes arquitecturas.

También era posible crear bibliotecas (por ejemplo, utilizando libtool de NeXTStep ) con diferentes archivos de objetos de destino.

Mach-O y Mac OS X

Apple Computer adquirió NeXT en 1996 y continuó trabajando con el código OPENSTEP. Mach-O se convirtió en el formato de archivo de objetos nativo en el sistema operativo gratuito Darwin de Apple (2000) y Mac OS X de Apple (2001), y los binarios de arquitectura múltiple de NeXT continuaron siendo compatibles con el sistema operativo. En Mac OS X, los binarios de arquitectura múltiple se pueden utilizar para admitir múltiples variantes de una arquitectura, por ejemplo, para tener diferentes versiones de código de 32 bits optimizadas para las generaciones de procesadores PowerPC G3 , PowerPC G4 y PowerPC 970 . También se puede utilizar para admitir múltiples arquitecturas, como PowerPC de 32 y 64 bits , PowerPC y x86 , o x86-64 y ARM64 . [11]

El binario universal de Apple

Logotipo binario universal de Apple

En 2005, Apple anunció otra transición, de los procesadores PowerPC a los procesadores Intel x86 . Apple promovió la distribución de nuevas aplicaciones que soportan tanto PowerPC como x86 de forma nativa mediante el uso de archivos ejecutables en formato binario de arquitectura múltiple. [12] Apple llama a estos programas " aplicaciones universales " y llama al formato de archivo " binario universal " como quizás una forma de distinguir esta nueva transición de la transición anterior, u otros usos del formato binario de arquitectura múltiple.

El formato binario universal no era necesario para la migración hacia adelante de aplicaciones PowerPC nativas preexistentes; De 2006 a 2011, Apple suministró Rosetta , un traductor binario dinámico de PowerPC (PPC) a x86 , para desempeñar esta función. Sin embargo, Rosetta tenía una sobrecarga de rendimiento bastante pronunciada, por lo que se animó a los desarrolladores a ofrecer binarios PPC e Intel, utilizando binarios universales. El costo obvio del binario universal es que cada archivo ejecutable instalado es más grande, pero en los años transcurridos desde el lanzamiento del PPC, el espacio en el disco duro ha superado con creces el tamaño del ejecutable; Si bien un binario universal puede tener el doble de tamaño que una versión de plataforma única de la misma aplicación, los recursos de espacio libre generalmente eclipsan el tamaño del código, lo que se convierte en un problema menor. De hecho, a menudo una aplicación binaria universal será más pequeña que dos aplicaciones de arquitectura única porque los recursos del programa pueden compartirse en lugar de duplicarse. Si no se requieren todas las arquitecturas, las aplicaciones de línea de comandos lipo y ditto se pueden usar para eliminar versiones de la imagen binaria de arquitectura múltiple, creando así lo que a veces se llama un binario delgado .

Además, los ejecutables binarios de arquitectura múltiple pueden contener código para versiones de PowerPC y x86 de 32 y 64 bits, lo que permite que las aplicaciones se envíen en un formato que admita procesadores de 32 bits pero que utilice un mayor espacio de direcciones y rutas de datos más amplias cuando se ejecuta en procesadores de 64 bits.

En las versiones del entorno de desarrollo Xcode desde la 2.1 hasta la 3.2 (que se ejecuta en Mac OS X 10.4 hasta Mac OS X 10.6 ), Apple incluyó utilidades que permitían que las aplicaciones estuvieran dirigidas a la arquitectura Intel y PowerPC; Los binarios universales podrían eventualmente contener hasta cuatro versiones del código ejecutable (PowerPC de 32 bits, x86 de 32 bits, PowerPC de 64 bits y x86 de 64 bits ). Sin embargo, la compatibilidad con PowerPC se eliminó de Xcode 4.0 y, por lo tanto, no está disponible para los desarrolladores que ejecutan Mac OS X 10.7 o superior.

En 2020, Apple anunció otra transición , esta vez de los procesadores Intel x86 al silicio de Apple (arquitectura ARM64). Para suavizar la transición, Apple agregó soporte para el formato binario Universal 2 ; Los archivos binarios Universal 2 son archivos binarios de arquitectura múltiple que contienen código ejecutable x86-64 y ARM64, lo que permite que el binario se ejecute de forma nativa tanto en Intel de 64 bits como en Apple Silicon de 64 bits. Además, Apple introdujo la traducción binaria dinámica Rosetta 2 para el conjunto de instrucciones x86 a Arm64 para permitir a los usuarios ejecutar aplicaciones que no tienen variantes binarias universales.

Binario Apple Fat EFI

En 2006, Apple cambió de PowerPC a CPU Intel y reemplazó Open Firmware con EFI . Sin embargo, en 2008, algunas de sus Mac usaban EFI de 32 bits y otras usaban EFI de 64 bits. Por esta razón, Apple amplió la especificación EFI con binarios "gordos" que contenían binarios EFI de 32 y 64 bits. [13]

CP/M y DOS

Binarios estilo COM combinados para CP/M-80 y DOS

Los ejecutables CP/M-80 , MP/M-80 , CP/M concurrente , CP/M Plus , Personal CP/M-80 , SCP y MSX-DOS para las familias de procesadores Intel 8080 (y Zilog Z80 ) utilizan los mismos . Extensión de archivo COM como sistemas operativos compatibles con DOS para binarios Intel 8086 . [nb 1] En ambos casos, los programas se cargan en el desplazamiento +100 h y se ejecutan saltando al primer byte del archivo. [14] [15] Como los códigos de operación de las dos familias de procesadores no son compatibles, intentar iniciar un programa con el sistema operativo incorrecto conduce a un comportamiento incorrecto e impredecible.

Para evitar esto, se han ideado algunos métodos para construir binarios gruesos que contienen tanto un programa CP/M-80 como un programa DOS, precedidos por un código inicial que se interpreta correctamente en ambas plataformas. [15] Los métodos combinan dos programas completamente funcionales, cada uno de ellos creado para su entorno correspondiente, o agregan códigos auxiliares que hacen que el programa salga correctamente si se inicia en el procesador incorrecto. Para que esto funcione, las primeras instrucciones (a veces también llamadas encabezados de gadget [16] ) en el archivo .COM deben ser un código válido para los procesadores 8086 y 8080, lo que provocaría que los procesadores se bifurquen en diferentes ubicaciones dentro del código. [16] Por ejemplo, las utilidades en el emulador MyZ80 de Simeon Cran comienzan con la secuencia de código de operación EBh, 52h, EBh . [17] [18] Un 8086 ve esto como un salto y lee su siguiente instrucción desde el desplazamiento +154h, mientras que un 8080 o un procesador compatible pasa directamente y lee su siguiente instrucción desde +103h. Una secuencia similar utilizada para este propósito es EBh, 03h, C3h . [19] [20] FATBIN de John C. Elliott [21] [22] [23] es una utilidad para combinar un archivo CP/M-80 y un archivo .COM de DOS en un solo ejecutable. [17] [24] Su derivado del PMsfx original modifica los archivos creados por PMarc de Yoshihiko Mino para que sean autoextraíbles tanto en CP/M-80 como en DOS, comenzando con EBh, 18h, 2Dh, 70h, 6Dh, 73h, 2Dh. incluir también la firma "-pms-" para archivos PMA autoextraíbles , [25] [17] [24] [18], lo que también representa una forma de código ASCII ejecutable .

Otro método para evitar que un sistema operativo compatible con DOS ejecute erróneamente programas .COM para máquinas CP/M-80 y MSX-DOS [15] es iniciar el código 8080 con C3h, 03h, 01h , que se decodifica como un "RET " instrucción por procesadores x86, saliendo así elegantemente del programa, [nb 2] mientras que será decodificada como instrucción "JP 103h" por procesadores 8080 y simplemente saltará a la siguiente instrucción en el programa. De manera similar, el ensamblador CP/M Z80ASM+ de SLR Systems mostraría un mensaje de error cuando se ejecutara erróneamente en DOS. [17]

Algunos archivos CP/M-80 3.0 .COM pueden tener una o más superposiciones RSX adjuntas por GENCOM . [26] Si es así, comienzan con un encabezado adicional de 256 bytes (una página ). Para indicar esto, el primer byte del encabezado se establece en el byte mágico C9h , que funciona como firma que identifica este tipo de archivo COM en el cargador ejecutable CP/M 3.0 , así como como instrucción "RET" para 8080. -procesadores compatibles lo que conduce a una salida elegante si el archivo se ejecuta con versiones anteriores de CP/M-80. [nota 2]

C9h nunca es apropiado como primer byte de un programa para ningún procesador x86 (tiene diferentes significados para diferentes generaciones, [nb 3] pero nunca es un primer byte significativo); El cargador de ejecutables en algunas versiones de DOS rechaza los archivos COM que comienzan con C9h , evitando un funcionamiento incorrecto.

También se han ideado secuencias de códigos superpuestos similares para binarios combinados Z80/ 6502 , [ 17 ] 8086/68000 [ 17 ] o x86/ MIPS / ARM . [dieciséis]

Binarios combinados para CP/M-86 y DOS

CP/M-86 y DOS no comparten una extensión de archivo común para ejecutables. [nb 1] Por lo tanto, normalmente no es posible confundir ejecutables. Sin embargo, las primeras versiones de DOS tenían tanto en común con CP/M en términos de arquitectura que algunos de los primeros programas de DOS se desarrollaron para compartir archivos binarios que contenían código ejecutable. Un programa conocido por hacer esto fue WordStar 3.2x , que usó archivos superpuestos idénticos en sus puertos para CP/M-86 y MS-DOS , [27] y usó código arreglado dinámicamente para adaptarse a las diferentes convenciones de llamada de estos sistemas operativos. sistemas en tiempo de ejecución . [27]

GSX de Digital Research para CP/M-86 y DOS también comparte controladores binarios idénticos de 16 bits. [28]

Archivos COM y SYS combinados

Los controladores de dispositivos DOS (normalmente con extensión de archivo .SYS ) comienzan con un encabezado de archivo cuyos primeros cuatro bytes son FFFFFFFFh por convención, aunque esto no es un requisito. [29] Esto lo soluciona dinámicamente el sistema operativo cuando se carga el controlador (normalmente en el BIOS de DOS cuando ejecuta declaraciones DEVICE en CONFIG.SYS ). Dado que DOS no rechaza archivos con extensión .COM para cargar por DISPOSITIVO y no prueba FFFFFFFFh, es posible combinar un programa COM y un controlador de dispositivo en el mismo archivo [30] [29] colocando una instrucción de salto al punto de entrada del programa COM integrado dentro de los primeros cuatro bytes del archivo (normalmente tres bytes son suficientes). [29] Si el programa integrado y las secciones del controlador del dispositivo comparten una porción común de código o datos, es necesario que el código se cargue en el desplazamiento +0100h como un programa de estilo .COM, y en +0000h como un controlador de dispositivo. [30] Para el código compartido cargado en el desplazamiento "incorrecto" pero no diseñado para ser independiente de la posición , esto requiere una corrección de dirección interna [30] similar a lo que de otro modo ya habría llevado a cabo un cargador en reubicación , excepto por que en este caso lo tiene que hacer el propio programa cargado; Esto es similar a la situación con los controladores que se reubican automáticamente, pero con el programa ya cargado en la ubicación de destino mediante el cargador del sistema operativo.

Archivos del sistema protegidos contra fallos

En DOS, algunos archivos, por convención, tienen extensiones que no reflejan su tipo de archivo real. [nb 4] Por ejemplo, COUNTRY.SYS [31] no es un controlador de dispositivo DOS, [nb 5] sino un archivo de base de datos NLS binario para usar con la directiva CONFIG.SYS COUNTRY y el controlador NLSFUNC . [31] Asimismo, los archivos de sistema PC DOS y DR-DOS IBMBIO.COM e IBMDOS.COM son imágenes binarias especiales cargadas mediante cargadores de arranque , no programas de estilo COM. [nb 5] Intentar cargar COUNTRY.SYS con una instrucción DEVICE o ejecutar IBMBIO.COM o IBMDOS.COM en el símbolo del sistema provocará resultados impredecibles. [nota 4] [nota 6]

A veces es posible evitar esto utilizando técnicas similares a las descritas anteriormente. Por ejemplo, DR-DOS 7.02 y superiores incorporan una característica de seguridad desarrollada por Matthias R. Paul: [32] Si estos archivos se llaman de manera inapropiada, pequeños códigos auxiliares incrustados simplemente mostrarán información sobre la versión del archivo y saldrán correctamente. [33] [32] [34] [31] Además, el mensaje está diseñado específicamente para seguir ciertos patrones "mágicos" reconocidos por la utilidad de identificación de archivos externa NetWare y VERSIÓN DR-DOS . [31] [32] [nota 7]

Una característica de protección similar fue la instrucción 8080 C7h ("RST 0") al comienzo de los programas Z-System tipo 3 y tipo 4 "Z3ENV" de Jay Sage y Joe Wright [35] [36], así como "Z3TXT " archivos de superposición de idioma, [37] que darían como resultado un arranque en caliente (en lugar de un bloqueo) en CP/M-80 si se cargan de manera inapropiada. [35] [36] [37] [nb 2]

De manera muy similar, muchos formatos de archivos (binarios) por convención incluyen un byte de 1 Ah ( ASCII ^Z ) cerca del comienzo del archivo. Este carácter de control se interpretará como un marcador "suave" de fin de archivo (EOF) cuando un archivo se abre en modo no binario y, por lo tanto, en muchos sistemas operativos (incluido el monitor PDP-6 [38] y RT- 11 , VMS , TOPS-10 , [39] CP/M, [40] [41] DOS, [42] y Windows [43] ), evita que se muestre "basura binaria" cuando un archivo se imprime accidentalmente en el consola.

linux

FatELF: binarios universales para Linux

Logotipo de FatELF

FatELF [44] era una implementación binaria gruesa para Linux y otros sistemas operativos similares a Unix . Técnicamente, un binario FatELF era una concatenación de binarios ELF con algunos metadatos que indicaban qué binario usar en qué arquitectura. [45] Además de la abstracción de la arquitectura de la CPU ( orden de bytes , tamaño de palabras , conjunto de instrucciones de la CPU , etc.), existe la ventaja de los binarios con soporte para múltiples ABI y versiones del kernel.

FatELF tiene varios casos de uso, según los desarrolladores: [44]

Está disponible una imagen de prueba de concepto de Ubuntu 9.04 . [47] A partir de 2021 , FatELF no se ha integrado en el kernel principal de Linux. [ cita necesaria ] [48] [49]

ventanas

paquete de grasa

Aunque el formato ejecutable portátil utilizado por Windows no permite asignar código a plataformas, aún es posible crear un programa de carga que se distribuya según la arquitectura. Esto se debe a que las versiones de escritorio de Windows en ARM son compatibles con la emulación x86 de 32 bits , lo que las convierte en un objetivo de código de máquina "universal" útil. Fatpack es un cargador que demuestra el concepto: incluye un programa x86 de 32 bits que intenta ejecutar los ejecutables empaquetados en sus secciones de recursos uno por uno. [50]

Brazo64X

Al desarrollar Windows 11 ARM64, Microsoft introdujo una nueva forma de ampliar el formato ejecutable portátil llamado Arm64X. [51] Un binario Arm64X contiene todo el contenido que estaría en binarios x64/Arm64EC y Arm64 separados, pero fusionados en un archivo más eficiente en el disco. El conjunto de herramientas de Visual C++ se ha actualizado para admitir la producción de dichos archivos binarios. Y cuando la creación de archivos binarios Arm64X es técnicamente difícil, los desarrolladores pueden crear archivos DLL de reenviador puro Arm64X. [52]

Conceptos similares

Los siguientes enfoques son similares a los binarios pesados ​​en el sentido de que se proporcionan múltiples versiones de código de máquina con el mismo propósito en el mismo archivo.

Computación heterogénea

Desde 2007, algunos compiladores especializados para plataformas heterogéneas producen archivos de código para ejecución paralela en múltiples tipos de procesadores, es decir, el compilador CHI ( C para integración heterogénea) de la suite de desarrollo Intel EXOCHI (Exoskeleton Sequencer) amplía el concepto pragma OpenMP para producir subprocesos múltiples . binarios gruesos que contienen secciones de código para diferentes arquitecturas de conjuntos de instrucciones (ISA) desde las cuales el cargador de tiempo de ejecución puede iniciar dinámicamente la ejecución paralela en múltiples núcleos de CPU y GPU disponibles en un entorno de sistema heterogéneo. [53] [54]

Introducida en 2006, la plataforma de computación paralela CUDA (Compute Unified Device Architecture) de Nvidia es un software que permite la computación de propósito general en GPU ( GPGPU ). Su compilador NVCC basado en LLVM puede crear archivos binarios basados ​​en ELF que contienen el llamado ensamblaje virtual PTX (como texto) que el controlador de tiempo de ejecución CUDA puede compilar posteriormente justo a tiempo en algún código ejecutable binario SASS (Streaming Assembler) para el presente. GPU de destino. Los ejecutables también pueden incluir los llamados binarios CUDA (también conocidos como archivos cubin ) que contienen secciones de código ejecutable dedicadas para una o más arquitecturas de GPU específicas entre las cuales el tiempo de ejecución de CUDA puede elegir en el momento de la carga. [55] [56] [57] [58] [59] [60] Los binarios Fat también son compatibles con GPGPU-Sim  [de] , un simulador de GPU introducido también en 2007. [61] [62]

Multi2Sim (M2S), un marco de simulador de sistema heterogéneo OpenCL (originalmente solo para CPU MIPS o x86, pero luego se amplió para admitir también CPU y GPU ARM como AMD / ATI Evergreen & Southern Islands, así como las familias Nvidia Fermi & Kepler ) [ 63] también admite binarios de grasas basados ​​en ELF. [64] [63]

objetos gordos

GNU Compiler Collection (GCC) y LLVM no tienen un formato binario grueso, pero sí tienen archivos de objetos gruesos para la optimización del tiempo de enlace (LTO). Dado que LTO implica retrasar la compilación hasta el momento del enlace, los archivos objeto deben almacenar la representación intermedia (IR), pero, por otro lado, es posible que también sea necesario almacenar el código de máquina (por motivos de velocidad o compatibilidad). Un objeto LTO que contiene IR y código de máquina se conoce como objeto gordo . [sesenta y cinco]

Función multiversionado

Incluso en un programa o biblioteca destinado a la misma arquitectura de conjunto de instrucciones , es posible que un programador desee utilizar algunas extensiones de conjunto de instrucciones más nuevas manteniendo la compatibilidad con una CPU más antigua. Esto se puede lograr con el control de versiones múltiples de funciones (FMV): las versiones de la misma función se escriben en el programa y un fragmento de código decide cuál usar al detectar las capacidades de la CPU (por ejemplo, a través de CPUID ). Intel C++ Compiler , GCC y LLVM tienen la capacidad de generar automáticamente funciones con múltiples versiones. [66] Esta es una forma de despacho dinámico sin ningún efecto semántico.

Muchas bibliotecas matemáticas cuentan con rutinas de ensamblaje escritas a mano que se eligen automáticamente según la capacidad de la CPU. Los ejemplos incluyen glibc , Intel MKL y OpenBLAS . Además, el cargador de bibliotecas en glibc admite la carga desde rutas alternativas para funciones específicas de la CPU. [67]

Un enfoque similar, pero granular a nivel de bytes, ideado originalmente por Matthias R. Paul y Axel C. Frinke, consiste en permitir que un pequeño cargador autodescartable, relajante y reubicado incrustado en el archivo ejecutable junto con cualquier número de fragmentos de código binario alternativos construya condicionalmente un Imagen en tiempo de ejecución de tamaño o velocidad optimizada de un programa o controlador necesario para realizar (o no realizar) una función particular en un entorno de destino particular en el momento de la carga a través de una forma de eliminación dinámica de código muerto (DDCE). [68] [69] [70] [71]

Ver también

Notas

  1. ^ ab Esto no es un problema para los ejecutables de estilo CP/M-86 en CP/M-86 , CP/M-86 Plus , Personal CP/M-86 , S5-DOS , CP/M-86 concurrente , DOS concurrente , DOS 286 concurrente , FlexOS , DOS 386 concurrente , DOS Plus , DOS multiusuario , System Manager y REAL/32 porque utilizan la extensión de archivo .CMD en lugar de .COM para estos archivos. (Sin embargo, la extensión .CMD entra en conflicto con la extensión de archivo para trabajos por lotes escritos para el procesador de línea de comandos CMD.EXE en las familias de sistemas operativos OS/2 y Windows NT ).
  2. ^ abc Esto funciona porque se puede usar una instrucción de retorno (adecuada) para salir de programas bajo CP/M-80 , CP/M-86 y DOS , aunque los códigos de operación , las condiciones exactas y los mecanismos subyacentes difieren: bajo CP/M-80, Los programas pueden finalizar (es decir, iniciar en caliente en el BIOS ) saltando a 0 en la página cero , ya sea directamente con RST 0 ( código de operación 8080 / 8085 / Z80 C7h) o llamando a la función 0 de BDOS a través de la interfaz CALL 5 . Alternativamente, como la pila está preparada para contener una dirección de retorno 0 antes de pasar el control a un programa cargado, también se puede salir de ellos, mientras la pila esté plana, emitiendo una instrucción RET (código de operación C9h), cayendo así en el código de terminación en el desplazamiento 0 en la página cero. Aunque DOS tiene una interrupción INT 20h dedicada así como subfunciones API INT 21h para terminar programas (que son preferibles para programas más complicados), para programas traducidos por máquina DOS también emula el comportamiento de CP/M hasta cierto punto: un programa puede terminar saltando al desplazamiento 0 en su PSP (el equivalente a la página cero de CP/M), donde el sistema había colocado previamente una instrucción INT 20h. Además, la pila inicial de un programa cargado está preparada para contener una palabra de 0, de modo que un programa que emita un RETN de retorno cercano ( código de operación 8088/8086 C3h) también saltará implícitamente al inicio de su segmento de código, alcanzando así finalmente el INT . 20h también. [a] En CP/M-86, la página cero está estructurada de manera diferente y no hay una interfaz CALL 5, pero el método de retorno de pila y la función BDOS 0 (pero ahora a través de INT E0h ) también funcionan.
  3. ^ En los procesadores 8088/8086 , el código de operación C9h es un alias no documentado para CBh ("RETF", sacando CS : IP de la pila ), mientras que se decodifica como "LEAVE" (establezca SP en BP y extraiga BP) en 80188/80186 y procesadores más nuevos.
  4. ^ ab Este problema podría haberse evitado eligiendo extensiones de archivo que no entraran en conflicto , pero, una vez introducidos, estos nombres de archivos en particular se conservaron de versiones muy tempranas de MS-DOS / PC DOS por razones de compatibilidad con herramientas (de terceros). cableado para esperar estos nombres de archivos específicos.
  5. ^ ab Otros archivos DOS de este tipo son KEYBOARD.SYS , un archivo de base de datos de distribución de teclado binario para el controlador de teclado KEYB en MS-DOS y PC DOS , IO.SYS que contiene el BIOS de DOS en MS-DOS, y MSDOS.SYS , un Archivo de configuración de texto en Windows 95 / MS-DOS 7.0 y superior, pero originalmente un archivo de sistema binario que contiene el kernel de MS-DOS . Sin embargo, MS-DOS y PC DOS no proporcionan ningún archivo de sistema protegido contra fallas, y estos nombres de archivos no se usan ni son necesarios en DR-DOS 7.02 y superiores, que de otro modo sí proporcionan archivos de sistema protegidos contra fallas.
  6. ^ Esta es la razón por la cual estos archivos tienen el atributo oculto configurado, de modo que no aparecen en la lista de forma predeterminada, lo que reduce el riesgo de ser invocados accidentalmente.
  7. ^ Los COUNTRY.SYSformatos de archivo admitidos por las familias de sistemas operativos MS-DOS / PC DOS y DR-DOS contienen datos similares pero están organizados de manera diferente y son incompatibles. Dado que los puntos de entrada a las estructuras de datos se encuentran en diferentes desplazamientos en el archivo, es posible crear COUNTRY.SYSbases de datos "gordas", que podrían usarse en ambas familias de DOS. [b] Sin embargo, DR-DOS 7.02 y su NLSFUNC 4.00 (y superiores) incluyen un analizador mejorado capaz de leer ambos tipos de formatos (y variantes), incluso al mismo tiempo, de modo que los archivos con encabezado Janus no son necesarios. [c] [d] Sin embargo, los archivos enviados son "gordos" por incluir un pequeño código auxiliar ejecutable que simplemente muestra un mensaje incrustado cuando se invoca de manera inapropiada. [d] [b]

Referencias

  1. ^ Devanbu, Premkumar T.; Fong, Philip WL; Stubblebine, Stuart G. (19 a 25 de abril de 1998). "3.3 Java y TH" (PDF) . Técnicas para la ingeniería de software confiable . Actas de la XX Conferencia Internacional sobre Ingeniería de Software. Actas - Conferencia internacional sobre ingeniería de software . Kyoto, Japón. pag. 131. doi :10.1109/ICSE.1998.671109. ISBN 0-8186-8368-6. ISSN  0270-5257. Archivado (PDF) desde el original el 16 de enero de 2014 . Consultado el 29 de septiembre de 2021 .(10 páginas)
  2. ^ Pero, Nicola (18 de diciembre de 2008). "gnustep/tools-make: README.Packaging". GitHub . Archivado desde el original el 25 de mayo de 2022 . Consultado el 26 de mayo de 2022 .
  3. ^ "Borradores de embalaje/GNUstep". Wiki del Proyecto Fedora . 2009-02-25. Archivado desde el original el 25 de mayo de 2022 . Consultado el 26 de mayo de 2022 .
  4. ^ "Notas de la versión del software del sistema de dominio, versión del software 10.1" (PDF) (primera edición impresa). Chelmsford, Massachusetts, EE.UU.: Apollo Computer Inc. Diciembre de 1988. p. 2-16. N° de pedido 005809-A03. Archivado (PDF) desde el original el 26 de mayo de 2023 . Consultado el 24 de julio de 2022 .(256 páginas)
  5. ^ ab Engst, Adam C. (22 de agosto de 1994). "¿Deberían hacer dieta los binarios grasos?". TidBITS . Núm. 240. TidBITS Publishing Inc. ISSN  1090-7017. Archivado desde el original el 29 de septiembre de 2021 . Consultado el 29 de septiembre de 2021 .
  6. ^ ab Engst, Adam C. (29 de agosto de 1994). "Comentarios binarios gordos". TidBITS . Núm. 241. TidBITS Publishing Inc. ISSN  1090-7017. Archivado desde el original el 29 de septiembre de 2021 . Consultado el 29 de septiembre de 2021 .
  7. ^ "Capítulo 1 - Administrador de recursos / Referencia del administrador de recursos - Formato de archivo de recursos". Dentro de Macintosh: arquitecturas de tiempo de ejecución de Mac OS . Computadora Apple . 1996-07-06. Archivado desde el original el 29 de septiembre de 2021 . Consultado el 29 de septiembre de 2021 .
  8. ^ "Capítulo 7 - Programas Fat Binary - Creación de programas Fat Binary". Dentro de Macintosh: arquitecturas de tiempo de ejecución de Mac OS . Computadora Apple . 1997-03-11. Archivado desde el original el 29 de septiembre de 2021 . Consultado el 20 de junio de 2011 .[1]
  9. ^ "Capítulo 8 - Estructura del PEF". Dentro de Macintosh: arquitecturas de tiempo de ejecución de Mac OS . Computadora Apple . 1997-03-11. Archivado desde el original el 29 de septiembre de 2021 . Consultado el 29 de septiembre de 2021 .
  10. ^ Tevaniano, Avadis; DeMoney, Michael; Enderby, Kevin; Wiebe, Douglas; Snyder, Garth (11 de julio de 1995) [20 de agosto de 1993]. "Método y aparato para la arquitectura de archivos ejecutables independientes" (PDF) . Redwood City, California, EE. UU.: NeXT Computer, Inc. Patente estadounidense 5432937A. Archivado (PDF) desde el original el 14 de diciembre de 2020 . Consultado el 26 de mayo de 2022 .[2] (9 páginas); Tevaniano, Avadis; DeMoney, Michael; Enderby, Kevin; Wiebe, Douglas; Snyder, Garth (18 de febrero de 1997) [28 de febrero de 1995]. "Método y aparato para la arquitectura de archivos ejecutables independientes" (PDF) . Redwood City, California, EE. UU.: NeXT Computer, Inc. Patente estadounidense 5604905A. Archivado (PDF) desde el original el 26 de mayo de 2022 . Consultado el 26 de mayo de 2022 .(9 páginas)
  11. ^ "Binarios universales y binarios PowerPC de 32 y 64 bits". Referencia del formato de archivo ABI Mach-O de Mac OS X. Apple Inc. 2009-02-04 [2003]. Archivado desde el original el 27 de abril de 2012.
  12. ^ Singh, Amit (19 de junio de 2006). "2.6.2 Binarios gordos". Componentes internos de Mac OS X: un enfoque de sistemas . Educación Pearson . pag. 66.ISBN 978-0-13270226-3. Consultado el 28 de septiembre de 2021 .
  13. ^ "rEFIt - Binarios grasos EFI". refit.sourceforge.net . Consultado el 18 de octubre de 2022 .
  14. ^ Paul, Matthias 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 .[3] (NB. Tiene detalles sobre las convenciones de llamada de programas COM de DOS).
  15. ^ abc Wilkinson, William "Bill" Albert (2 de abril de 2005) [2003, 16 de febrero de 1999, febrero de 1987, 15 de noviembre de 1986, 10 de noviembre de 1986]. Escrito en Heath Company, EE. UU. "Algo común sobre MS-DOS y CP/M". COMENTARIO . vol. 8, núm. 2. St. Joseph, Michigan, EE.UU.: Grupo de usuarios de Heath/Zenith (HUG). págs. 55–57. #85. Pieza n.º 885-2085. Archivado desde el original el 13 de diciembre de 2021.[4]
  16. ^ abc Cha, Sang Kil; Pak, Brian; Brumley, David ; Lipton, Richard Jay (8 de octubre de 2010) [4 de octubre de 2010]. Programas independientes de la plataforma (PDF) . Actas de la 17ª conferencia ACM sobre seguridad informática y de las comunicaciones (CCS'10). Chicago, Illinois, EE.UU.: Universidad Carnegie Mellon , Pittsburgh, Pensilvania, EE.UU. / Instituto de Tecnología de Georgia , Atlanta, Georgia, EE.UU. págs. 547–558. doi :10.1145/1866307.1866369. ISBN 978-1-4503-0244-9. Archivado (PDF) desde el original el 26 de mayo de 2022 . Consultado el 26 de mayo de 2022 .[5] (12 páginas) (Ver también: [6])(NB. No aborda el escenario específicamente para las arquitecturas de conjuntos de instrucciones 8080 frente a 8086 (como para CP/M y DOS ), pero describe el concepto general de "programa de autoidentificación" de los programas independientes de plataforma (PIP) a través de lo que los autores llame a un encabezado de dispositivo (es decir, fragmentos de lógica de programa que no deben confundirse con dispositivos ROP ) para x86 , MIPS y ARM : es decir , 0Eh, B2h, 02h, A9h, 0Eh, B2h, 02h, 3Ah, 24h, 77h, 01h, 04h o 90h, EBh, 20h, 2Ah, 90h, EBh, 20h, 3Ah, 24h, 77h, 01h, 04h .)
  17. ^ abcdef Wilkinson, William "Bill" Albert; Seligman, Cory; Drushel, Richard F.; Harston, Jonathan Graham; Elliott, John C. (17 de febrero de 1999). "Binarios compatibles con MS-DOS y CP/M". Grupo de noticias : comp.os.cpm. Archivado desde el original el 13 de diciembre de 2021 . Consultado el 13 de diciembre de 2021 .(NB. Algunos de los códigos de operación en el código de ejemplo de Elliott ( EBh, 44h, EBh y EBh, 04h, ... ) pueden estar mezclados).
  18. ^ ab Elliott, John C. (27 de octubre de 2009). "Programa de información CP/M". Grupo de noticias : comp.os.cpm. Archivado desde el original el 13 de diciembre de 2021 . Consultado el 13 de diciembre de 2021 . […] Función de protección de DOS […] La idea se basa en las utilidades del emulador MYZ80 de Simeon Cran; el encabezado de protección de DOS en ellos es aún mejor al no cambiar ningún registro Z80 . La secuencia mágica es EB 52 EB: […] XCHG […] MOV D,D […] XCHG […] pero eso significa que el código DOS termina bastante lejos del inicio del programa. […] Se puede divertirse más con los archivos PMArc autoextraíbles . Inicie uno con […] defb 0EBh, 018h, '-pms-' […] y las utilidades PMA lo tratan como un archivo válido, envía los procesadores 8086 a 011Ah y los procesadores Z80 a 0130h. […]
  19. ^ CristoW (14 de noviembre de 2012) [13 de noviembre de 2012]. Chen, Raymond (ed.). "Microsoft Money falla durante la importación de transacciones de cuentas o al cambiar el beneficiario de una transacción descargada". Lo nuevo y viejo . Archivado desde el original el 5 de julio de 2018 . Consultado el 19 de mayo de 2018 . […] secuencia de bytes […] EB 03 C3 yy xx […] Si crea un archivo .COM con esos 5 bytes como primeros […] verá 'JMP SHORT 3', seguido de 3 bytes basura. […] Si nos fijamos en un desmontaje del Z80 […] eso se traduce como 'EX DE,HL; INC BC;' […] El tercer byte es 'JUMP' seguido de la dirección de 16 bits especificada como yy xx […] tendrás un archivo .COM que se ejecuta en MS-DOS y […] CP/M […](NB. Si bien el autor habla sobre el Z80, esta secuencia también funciona en el 8080 y procesadores compatibles).
  20. ^ Brehm, Andrew J. (2016). "CP/M y MS-DOS Fat Binary". DesertPenguin.org . Archivado desde el original el 19 de mayo de 2018 . Consultado el 19 de mayo de 2018 .(NB. Si bien el artículo habla sobre el Z80 , la secuencia de códigos también funciona en el 8080 y procesadores compatibles).
  21. ^ Elliott, John C. (13 de junio de 1996). "Subir a micros.hensa.ac.uk". Grupo de noticias : comp.os.cpm. Archivado desde el original el 13 de diciembre de 2021 . Consultado el 13 de diciembre de 2021 . […] FATBIN 1.00: combine un archivo CP/M .COM y un archivo DOS .COM para crear uno que se ejecute en ambas plataformas. […] Se utilizó para crear: […] MSODBALL 2.05: convierte disquetes entre el formato Amstrad 706k y el formato DOS 706k. […] Ambos programas se ejecutan bajo CP/M-80 y DOS. […]
  22. ^ Elliott, John C. (28 de junio de 1998) [1 de abril de 1997]. "FATBINv1.01". Archivado desde el original el 28 de junio de 1998.(NB. FATBN101.COM 22k 1997-04-01 FATBIN v1.01. Crea archivos binarios gruesos que se ejecutarán tanto en CP/M como en DOS. Distribuidos en un archivo autoextraíble para CP/M-80 y DOS).
  23. ^ Elliott, John C. (11 de marzo de 2002). "DSKWRITE v1.00". Fossies: el nuevo archivo de software de código abierto . Archivado desde el original el 12 de diciembre de 2021 . Consultado el 12 de diciembre de 2021 . […] DSKWRITE.Z80 contiene la fuente de la versión CP/M . […] DSKWRITE.ASM contiene la fuente de la versión DOS . […] Para obtener el archivo .COM único , debe usar FBMAKE: […][7] (NB. Menciona FBMAKE del paquete FATBNSEA.COM).
  24. ^ ab Elliott, John C. (20 de junio de 2012) [5 de enero de 2005]. "CP/M genérico". Seasip.info . Archivado desde el original el 17 de noviembre de 2021 . Consultado el 12 de diciembre de 2021 . […] Los archivos autoextraíbles son archivos .COM que contienen varios archivos más pequeños. Cuando ejecute uno, creará archivos más pequeños […] Los programas de archivo autoextraíbles se ejecutarán en DOS (2 o posterior) o CP/M , con efectos idénticos. Para extraerlos en Unix , puede utilizar ZXCC […] FATBNSEA.COM […] FATBIN combina un archivo CP/M-80 .COM y un archivo DOS .COM para producir uno que funcionará en ambos sistemas. […] M3C4SEA.COM […] M3CONV versión 4: convierte instantáneas de Spectrum en formato .Z80 o .SNA hacia o desde el formato Multiface 3 (Multiface 3 -> Z80 solo en una PC). […] PMSFX21X.COM […] PMSFX es el programa que se utilizó para generar estos archivos autodescomprimibles. Esta versión (2.11) puede generar archivos que se descomprimen bajo CP/M o DOS. Necesitará PMARC para usar PMSFX. Nuevo: en DOS, admite tamaños de archivo exactos. […] SP2BMSEA.COM […] Convierte un archivo Stop Press Canvas en un archivo .BMP de Windows […][8]
  25. ^ Elliott, John C. (18 de enero de 1997) [11 de enero de 1997]. "PMSFX 2". Grupo de noticias : comp.os.cpm. Archivado desde el original el 13 de diciembre de 2021 . Consultado el 13 de diciembre de 2021 . […] He escrito una versión de PMSFX que produce archivos .COM que se pueden descomprimir en DOS y CP/M (los primeros tres bytes son código Z80 legal , código 8086 legal y encabezado PMA legal ) […] como un sistema autoextraíble. archivo . […]
  26. ^ 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 30 de agosto de 2016 . Consultado el 29 de agosto de 2016 .
  27. ^ ab Necasek, Michal (30 de enero de 2018) [28 de enero de 2018, 26 de enero de 2018]. "WordStar otra vez". Museo OS/2 . Archivado desde el original el 28 de julio de 2019 . Consultado el 28 de julio de 2019 . […] La razón para sospechar tal diferencia es que la versión 3.2x también soporta CP/M-86 (las superposiciones son idénticas entre DOS y CP/M-86, sólo el ejecutable principal es diferente) […] los archivos .OVR son 100% idéntico entre DOS y CP/M-86, con una bandera (que se muestra claramente en el manual de WordStar 3.20 ) que cambia entre ellos en tiempo de ejecución […] la interfaz del sistema operativo en WordStar es bastante estrecha y bien abstracta […] el WordStar 3.2x Las superposiciones son 100% idénticas entre las versiones DOS y CP/M-86. Hay un interruptor de tiempo de ejecución que elige entre llamar a INT 21h (DOS) e INT E0h (CP/M-86). WS.COM no es lo mismo entre DOS y CP/M-86, aunque probablemente tampoco sea muy diferente. […]
  28. ^ Lineback, Nathan. "Capturas de pantalla de GSX". Toastytech.com . Archivado desde el original el 15 de enero de 2020 . Consultado el 15 de enero de 2020 .
  29. ^ abc Paul, Matthias R. (11 de abril de 2002). "Re: [fd-dev] ANUNCIO: CuteMouse 2.0 alpha 1". freedos-dev . Archivado desde el original el 21 de febrero de 2020 . Consultado el 21 de febrero de 2020 . […] FreeKEYB es […] un verdadero controlador .COM y .SYS (modelo pequeño) en uno. Puede sobrescribir de forma segura el primer JMP, eso es parte de lo que quise decir con "encabezado complicado". […] puedes reemplazar el FFFFh:FFFFh por un salto de 3 bytes y una DB FFh pendiente. Funciona con MS-DOS, PC DOS, DR-DOS y probablemente también con cualquier otro problema de DOS. […]
  30. ^ abc Paul, Matthias R. (6 de abril de 2002). "Re: [fd-dev] ANUNCIO: CuteMouse 2.0 alpha 1". freedos-dev . Archivado desde el original el 7 de febrero de 2020 . Consultado el 7 de febrero de 2020 . […] Agregue un encabezado de controlador de dispositivo SYS al controlador, de modo que CTMOUSE pueda ser al mismo tiempo un TSR normal y un controlador de dispositivo, similar a nuestro controlador de teclado avanzado FreeKEYB. […] Esto no es realmente necesario en DR DOS porque INSTALL = es compatible ya que DR DOS 3.41+ y DR DOS preserva el orden de las directivas [D]CONFIG.SYS […] pero mejoraría […] la flexibilidad. en sistemas MS-DOS / PC DOS , que […] siempre ejecutan directivas DEVICE = antes de cualquier instrucción INSTALL=, independientemente de su orden en el archivo. […] el software puede requerir que el controlador del mouse esté presente como controlador de dispositivo, ya que los controladores de mouse siempre han sido controladores de dispositivo en los viejos tiempos. Estos controladores de mouse tenían nombres de controladores de dispositivo específicos dependiendo del protocolo que usaron (" PC$MOUSE " para el modo de sistemas de mouse, por ejemplo), y algunos programas pueden buscar estos controladores para determinar el tipo correcto de mouse que se usará. . […] Otra ventaja sería que los controladores de dispositivos generalmente consumen menos memoria (sin entorno , sin PSP ) […] Es básicamente un encabezado de archivo complicado, un código diferente para analizar la línea de comando, un punto de entrada y una línea de salida diferentes, y algunos Magias de segmento para superar la diferencia ORG 0 / ORG 100h. La carga automática de un controlador de dispositivo es un poco más complicada ya que hay que dejar el encabezado del controlador donde está y solo reubicar el resto del controlador […]
  31. ^ abcd Paul, Matthias R. (10 de junio de 2001) [1995]. "Formato de archivo DOS COUNTRY.SYS" (archivo COUNTRY.LST) (1.44 ed.). Archivado desde el original el 20 de abril de 2016 . Consultado el 20 de agosto de 2016 .
  32. ^ abc Paul, Matthias R. (30 de julio de 1997) [1 de mayo de 1994]. "Capítulo II.4. Undokumentierte Eigenschaften externer Kommandos - SYS.COM". NWDOS-TIP: consejos y trucos para Novell DOS 7, con un clic para deshacer detalles, errores y soluciones. MPDOSTIP (en alemán) (3 ed.). Archivado desde el original el 10 de septiembre de 2017 . Consultado el 6 de agosto de 2014 . Para una actualización zukünftiges para Calderas OpenDOS 7.01, he modificado el código de inicio de IBMBIO.COM , ya que es incorrecto como el programa normal gestado - ohne Absturz zur Kommandozeile zurückkehrt. Si esta función de seguridad está incluida en la versión oficial, se detendrá la función, pero no se abrirá.(NB. NWDOSTIP.TXT es un trabajo completo sobre Novell DOS 7 y OpenDOS 7.01, que incluye la descripción de muchas características e componentes internos no documentados. Es parte de la MPDOSTIP.ZIPcolección aún más grande del autor mantenida hasta 2001 y distribuida en muchos sitios en ese momento. El enlace proporcionado apunta a una versión anterior del NWDOSTIP.TXTarchivo convertida a HTML). [9]
  33. ^ Paul, Matías R. (2 de octubre de 1997). "Caldera OpenDOS 7.01/7.02 Actualización Alpha 3 IBMBIO.COM README.TXT". Archivado desde el original el 4 de octubre de 2003 . Consultado el 29 de marzo de 2009 .[10]
  34. ^ DR-DOS 7.03 WHATSNEW.TXT - Cambios de DR-DOS 7.02 a DR-DOS 7.03. Caldera, Inc. 1998-12-24. Archivado desde el original el 8 de abril de 2019 . Consultado el 8 de abril de 2019 .
  35. ^ ab Sage, Jay (mayo-junio de 1988). Carlson, Arte (ed.). "ZCPR 3.4 - Programas tipo 4". The Computer Journal (TCJ): programación, soporte al usuario, aplicaciones . Esquina ZCPR3 (32). Cataratas de Columbia, Montana, EE. UU.: 10–17 [16]. ISSN  0748-9331. arca:/13960/t1wd4v943 . Consultado el 29 de noviembre de 2021 .[11][12]
  36. ^ ab Sage, Jay (mayo-junio de 1992) [marzo-junio de 1992]. Carlson, Arte; McEwen, Chris (eds.). "Programas tipo 3 y tipo 4". The Computer Journal (TCJ): programación, soporte al usuario, aplicaciones . Rincón del sistema Z: algunas aplicaciones nuevas de programas tipo 4 (55). S. Plainfield, Nueva Jersey, EE.UU.: Socrates Press: 13–19 [14, 16]. ISSN  0748-9331. arca:/13960/t4dn54d22 . Consultado el 29 de noviembre de 2021 .[13][14]
  37. ^ ab Sage, Jay (noviembre-diciembre de 1992). Carlson, Arte; Kibler, Bill D. (eds.). "Función habitual, compatibilidad con ZCPR, independencia del idioma, parte 2". The Computer Journal (TCJ): programación, soporte al usuario, aplicaciones . El rincón del sistema Z (58). Lincoln, California, EE.UU.: 7–10. ISSN  0748-9331. arca:/13960/t70v9g87h . Consultado el 9 de febrero de 2020 . […] había un código de operación de "RST 0" que, si se ejecutaba, daría como resultado un arranque en caliente . Un archivo que contenga un módulo Z3TXT nunca debería ejecutarse, pero con el coste de un byte podríamos protegernos contra esa posibilidad externa. El encabezado también contenía la cadena de caracteres "Z3TXT" seguida de un byte nulo (0). Muchos módulos Z-System incluyen dichos identificadores. En esta categoría se encuentran los paquetes de comandos residentes (RCP), los paquetes de comandos de flujo (FCP) y los módulos descriptores de entorno ( Z3ENV ). Los programas, como […] JETLDR.COM de Bridger Mitchell, que cargan estos módulos desde archivos en la memoria pueden usar la cadena de identificación para validar el archivo, es decir, para asegurarse de que es el tipo de módulo que el usuario ha indicado. ser. De este modo se pueden detectar errores del usuario y archivos dañados. […] El encabezado, por lo tanto, ahora queda como sigue: […] primero […] db 'Z3TXT',0 ; ID terminado en nulo […]; 12345678; debe tener 8 caracteres, […] db 'PROGNAME' ; pad con espacios […]; 123; debe tener 3 caracteres […] db 'ENG' ; nombre del idioma […] dw LONGITUD ; longitud del módulo […][15][16]
  38. ^ "Tabla de características de dispositivos IO: consola o teletipos". Manual del sistema de multiprogramación PDP-6 (PDF) . Maynard, Massachusetts, EE.UU.: Digital Equipment Corporation (DEC). 1965. pág. 43. DIC-6-0-EX-SYS-UM-IP-PRE00. Archivado (PDF) desde el original el 14 de julio de 2014 . Consultado el 10 de julio de 2014 .(1+84+10 páginas)
  39. ^ "5.1.1.1. Funciones dependientes del dispositivo - Modos de datos - Software Full-Duplex A (ASCII) y AL (Línea ASCII)". Manual de referencia de PDP-10: Comunicación con el monitor: monitores de tiempo compartido (PDF) . vol. 3. Corporación de Equipos Digitales (DEC). 1969. págs. 5-3–5-6 [5-5 (431)]. Archivado (PDF) desde el original el 15 de noviembre de 2011 . Consultado el 10 de julio de 2014 .(207 páginas)
  40. ^ "2. Convenciones de llamadas al sistema operativo". Guía de interfaz CP/M 2.0 (PDF) (1 ed.). Pacific Grove, California, EE. UU.: Investigación digital . 1979. pág. 5. Archivado (PDF) desde el original el 28-02-2020 . Consultado el 28 de febrero de 2020 . […] El final de un archivo ASCII se indica mediante un carácter de control-Z (1AH) o un final de archivo real, devuelto por la operación de lectura CP/M . Sin embargo , los caracteres Control-Z incrustados en archivos de código de máquina (por ejemplo, archivos COM ) se ignoran y la condición de fin de archivo devuelta por CP/M se utiliza para finalizar las operaciones de lectura. […](56 páginas)
  41. ^ Hogan, Thom (1982). "3. Comandos transitorios CP/M". Guía del usuario de Osborne CP/M: para todos los usuarios de CP/M (2 ed.). Berkeley, California, Estados Unidos: A. Osborne/McGraw-Hill . pag. 74.ISBN 0-931988-82-9. Consultado el 28 de febrero de 2020 . […] CP/M marca el final de un archivo ASCII colocando un carácter CONTROL-Z en el archivo después del último carácter de datos. Si el archivo contiene un múltiplo exacto de 128 caracteres, en cuyo caso agregar CONTROL-Z desperdiciaría 127 caracteres, CP/M no lo hace. El uso del carácter CONTROL-Z como marcador de fin de archivo es posible porque CONTROL-Z rara vez se usa como datos en archivos ASCII. Sin embargo, en un archivo que no es ASCII, es tan probable que aparezca CONTROL-Z como cualquier otro carácter. Por lo tanto, no se puede utilizar como marcador de fin de archivo. CP/M utiliza un método diferente para marcar el final de un archivo que no es ASCII. CP/M supone que ha llegado al final del archivo cuando ha leído el último registro (unidad básica de espacio en disco) asignado al archivo. La entrada del directorio del disco para cada archivo contiene una lista de los registros del disco asignados a ese archivo. Este método se basa en el tamaño del archivo, más que en su contenido, para localizar el final del archivo. […][17][18]
  42. ^ BC_Programmer (31 de enero de 2010) [30 de enero de 2010]. "Re: El comando Copiar que fusiona varios archivos etiqueta la palabra SUB al final". Foro de esperanza informática . Archivado desde el original el 26 de febrero de 2020 . Consultado el 26 de febrero de 2020 .
  43. ^ "¿Cuáles son las diferencias entre los archivos .txt de Linux y Windows (codificación Unicode)?". Superusuario . 2011-08-03 [2011-06-08]. Archivado desde el original el 26 de febrero de 2020 . Consultado el 26 de febrero de 2020 .
  44. ^ ab Gordon, Ryan C. (octubre de 2009). "FatELF: Binarios universales para Linux". icculus.org . Archivado desde el original el 27 de agosto de 2020 . Consultado el 13 de julio de 2010 .
  45. ^ Gordon, Ryan C. (noviembre de 2009). "Especificación FatELF, versión 1". icculus.org . Archivado desde el original el 27 de agosto de 2020 . Consultado el 25 de julio de 2010 .
  46. ^ Windisch, Eric (3 de noviembre de 2009). "Asunto: Grupos de noticias: gmane.linux.kernel, Re: parches FatELF ..." gmane.org. Archivado desde el original el 15 de noviembre de 2016 . Consultado el 8 de julio de 2010 .
  47. ^ Gordon, Ryan C. (2009). "FatELF: Universal Binaries para Linux. - La página de descarga de máquina virtual de prueba de concepto". icculus.org . Archivado desde el original el 21 de mayo de 2022 . Consultado el 26 de mayo de 2022 .(NB. Imagen de VM de Ubuntu 9.04 con soporte Fat Binary).
  48. ^ Holwerda, Thom (5 de noviembre de 2009). "Ryan Gordon detiene el proyecto FatELF". Linux. osnews.com. Archivado desde el original el 26 de mayo de 2022 . Consultado el 5 de julio de 2010 .
  49. ^ Brockmeier, Joe "Zonker" (23 de junio de 2010). "YO: Anatomía de un (presunto) fracaso". LWN.net . Noticias semanales de Linux. Archivado desde el original el 26 de mayo de 2022 . Consultado el 6 de febrero de 2011 .
  50. ^ Mulder, Sijmen J. (6 de marzo de 2021) [25 de abril de 2018]. "sjmulder/fatpack: cree archivos binarios 'gordos' de arquitectura múltiple para Windows". GitHub . Archivado desde el original el 26 de mayo de 2022 . Consultado el 26 de mayo de 2022 .
  51. ^ "Archivos Arm64X PE". aprender.microsoft.com . Microsoft . 2022-08-13. Archivado desde el original el 20 de agosto de 2023 . Consultado el 31 de marzo de 2023 .
  52. ^ "Construir binarios Arm64X". aprender.microsoft.com . Microsoft . 2023-03-10. Archivado desde el original el 20 de agosto de 2023 . Consultado el 31 de marzo de 2023 .
  53. ^ Wang, Perry H.; Collins, Jamison D.; Chinya, Gautham N.; Jiang, Hong; Tian, ​​Xinmin; Girkar, Milind; Yang, Nick Y.; Lueh, Guei-Yuan; Wang, Hong (junio de 2007). "EXOCHI: arquitectura y entorno de programación para un sistema heterogéneo multinúcleo multiproceso". Avisos ACM SIGPLAN . 42 (6): 156–166. doi :10.1145/1273442.1250753.(11 páginas)
  54. ^ Wang, Perry H.; Collins, Jamison D.; Chinya, Gautham N.; Jiang, Hong; Tian, ​​Xinmin; Girkar, Milind; Pearce, Lisa; Lueh, Guei-Yuan; Yakoushkin, Sergey; Wang, Hong (22 de agosto de 2007). "Exoesqueleto acelerador" (PDF) . Revista de tecnología Intel . 11: Computación a escala Tera (3). Corporación Intel : 185–196. doi :10.1535/itj.1103. ISSN  1535-864X. Archivado (PDF) desde el original el 26 de mayo de 2022 . Consultado el 26 de mayo de 2022 .(12 de 1+vii+90+1 páginas)
  55. ^ "cudaFatFormat.h/ptxomp.c". 1.13. Corporación Nvidia . 2004-11-15. Archivado desde el original el 26 de mayo de 2022 . Consultado el 26 de mayo de 2022 .
  56. ^ Harris, Mark J. (8 de mayo de 2014) [5 de junio de 2013]. "Tutorial técnico: consejo profesional de CUDA: comprensión de los binarios pesados ​​y el almacenamiento en caché JIT". Desarrollador Nvidia . NVIDIA . Archivado desde el original el 23 de marzo de 2022 . Consultado el 26 de mayo de 2022 .
  57. ^ "Utilidades binarias CUDA" (PDF) (Nota de aplicación). 6.0. NVIDIA . Febrero de 2014. DA-06762-001_v6.0. Archivado (PDF) desde el original el 25 de mayo de 2022 . Consultado el 25 de mayo de 2022 .
  58. ^ "fatbinary - ayuda". manual de ayuda.io . 8.0. 2016. Archivado desde el original el 25 de mayo de 2022 . Consultado el 25 de mayo de 2022 .
  59. ^ "Controlador del compilador CUDA NVCC: guía de referencia" (PDF) . 11.7. NVIDIA . Mayo 2022. TRM-06721-001_v11.7. Archivado (PDF) desde el original el 25 de mayo de 2022 . Consultado el 25 de mayo de 2022 .
  60. ^ Braun, Lorenz; Fröning, Holger (18 de noviembre de 2019). CUDA Flux: un generador de perfiles de instrucciones liviano para aplicaciones CUDA (PDF) . Modelado de rendimiento, evaluación comparativa y simulación de sistemas informáticos de alto rendimiento (PMBS) IEEE/ACM. Denver, Colorado, Estados Unidos: IEEE . doi :10.1109/PMBS49563.2019.00014. ISBN 978-1-7281-5977-5. Archivado (PDF) desde el original el 21 de marzo de 2022 . Consultado el 26 de mayo de 2022 .
  61. ^ Fung, Wilson WL; Sham, Iván; Yuan, George; Aamodt, Tor M. (2007). "Programación y formación dinámica de deformaciones para un flujo de control de GPU eficiente" (PDF) . Vancouver, Columbia Británica, Canadá. Archivado (PDF) desde el original el 26 de mayo de 2022 . Consultado el 26 de mayo de 2022 .(12 páginas)
  62. ^ Bakhoda, Ali; Yuan, George L.; Fung, Wilson WL; Wong, Enrique; Aamodt, Tor M. (28 de abril de 2009) [26 de abril de 2009]. Análisis de cargas de trabajo CUDA mediante un simulador de GPU detallado (PDF) . Actas del Simposio internacional IEEE sobre análisis del rendimiento de sistemas y software (ISPASS). Boston, Massachusetts, Estados Unidos. págs. 163-174. doi :10.1109/ISPASS.2009.4919648. Archivado (PDF) desde el original el 26 de mayo de 2022 . Consultado el 6 de mayo de 2022 .[19]
  63. ^ ab "13.4 El contenedor del compilador AMD: binarios gruesos". El marco de simulación Multi2Sim: un modelo CPU-GPU para informática heterogénea (PDF) . v4.2. Multi2Sim. 2013, págs. 173-176 [176]. Archivado (PDF) desde el original el 25 de mayo de 2022 . Consultado el 25 de mayo de 2022 .(4 de 210 páginas)
  64. ^ Ubal, Rafael; Jang, Byunghyun; Mistry, tal vez; Schaa, Dana; Kaeli, David R. (23 de septiembre de 2012) [19 de septiembre de 2012]. "Multi2Sim: un marco de simulación para informática CPU-GPU" (PDF) . XXI Congreso Internacional sobre Arquitecturas Paralelas y Técnicas de Compilación (PACT) . Minneapolis, Minnesota, Estados Unidos: IEEE . ISBN 978-1-4503-1182-3. Archivado (PDF) desde el original el 25 de mayo de 2022 . Consultado el 25 de mayo de 2022 .(10 páginas)
  65. ^ "Descripción general de LTO (internos de la colección de compiladores GNU (GCC))". gcc.gnu.org . Archivado desde el original el 12 de septiembre de 2021 . Consultado el 12 de septiembre de 2021 .
  66. ^ Wennborg, Hans (2018). "Atributos en Clang". Documentación de Clang 7 . Archivado desde el original el 7 de abril de 2022 . Consultado el 26 de mayo de 2022 .
  67. ^ Bahena, Víctor Rodríguez (3 de abril de 2018). "Uso transparente de paquetes de biblioteca optimizados para la arquitectura Intel". Potencia y rendimiento. Borrar proyecto Linux . Corporación Intel . Archivado desde el original el 26 de mayo de 2022 . Consultado el 26 de mayo de 2022 .
  68. ^ Pablo, Matías R.; Frinke, Axel C. (13 de octubre de 1997) [1991], FreeKEYB: controlador de consola y teclado DOS mejorado (Manual de usuario) (v6.5 ed.)[20] (NB. FreeKEYB es un sucesor de K3PLUS configurable dinámicamente basado en Unicode que admite la mayoría de diseños de teclado , páginas de códigos y códigos de países . Utiliza un ensamblador de macros disponible en el mercado, así como un marco de pre y post-automático. Al procesar herramientas de análisis para generar metadatos de dependencia y transformación de código que se incrustarán en el archivo ejecutable junto con el código binario y un cargador que se descarta, relaja y reubica automáticamente, el controlador implementa técnicas de reubicación y eliminación dinámica granular de código muerto a nivel de bytes en el momento de la carga. tiempo , así como código de automodificación y reconfigurabilidad en tiempo de ejecución para minimizar su huella de memoria para cerrar la forma canónica dependiendo del hardware subyacente, el sistema operativo y la configuración del controlador, así como el conjunto de funciones y la configuración regional seleccionadas (alrededor de sesenta cambios de configuración). con cientos de opciones para un número casi ilimitado de combinaciones posibles). Esta complejidad y dinámica están ocultas para los usuarios, que manejan un único archivo ejecutable como lo harían con un controlador convencional).
  69. ^ Paul, Matías R. (6 de abril de 2002). "[fd-dev] Ctrl+Alt+Supr". freedos-dev . Archivado desde el original el 27 de abril de 2019 . Consultado el 27 de abril de 2019 . […] FreeKEYB crea la imagen de tiempo de ejecución del controlador en el momento de la inicialización dependiendo del tipo de máquina en la que se está cargando, el tipo de teclado, diseño, país y página de códigos utilizados, el tipo de mouse y adaptador(es) de video instalados, el otros controladores cargados en ese sistema, el sistema operativo y los métodos de carga y reubicación utilizados, las características individuales incluidas y las opciones de configuración especificadas en la línea de comando. Debido a la gran cantidad de opciones y opciones admitidas en la línea de comandos […] (alrededor de cincuenta opciones […] con múltiples configuraciones posibles) existe una gran cantidad de combinaciones de funciones con incontables dependencias […] lo que resulta en […] un número infinito de [ …] diferentes imágenes de destino. La técnica de eliminación dinámica de códigos muertos de FreeKEYB logra resolver […] estas […] dependencias y […] eliminar códigos y datos muertos […] no se limita a […] incluir o excluir un número algo limitado de módulos o subrutinas completas y arreglar algunas tablas de despacho como en la programación TSR clásica, pero […] funciona […] a […] nivel de bytes […] capaz de eliminar […] instrucciones individuales en medio de rutinas más grandes […] distribuidas por todo el código para manejar un caso particular o admitir una característica específica […] se utilizan herramientas especiales para analizar el código […] y crear […] tablas de reparación […] automatizadas […] utilizando definiciones condicionales […] para declarar los diversos casos […] no sólo es opcional en el momento del ensamblaje sino también en el momento de la inicialización […] sin la […] sobrecarga de tener al menos una cantidad de código inactivo en la imagen en tiempo de ejecución […] para realizar un seguimiento de todas las dependencias entre […] estos condicionales, construyen y reubican dinámicamente la imagen en tiempo de ejecución, arreglan todas las referencias entre estas partes binarias pequeñas, cambiantes y en movimiento […] aún permitiendo usar el pequeño modelo de estilo .COM/.SYS […] […] está listo en el momento de la inicialización […]
  70. ^ Paul, Matías R. (21 de agosto de 2001). "[fd-dev] Cambio de páginas de códigos en FreeDOS". freedos-dev . Archivado desde el original el 19 de abril de 2019 . Consultado el 20 de abril de 2019 . […] una […] característica única […] que llamamos eliminación dinámica de códigos muertos , por lo que puede en el momento de la instalación […] especificar qué componentes del controlador desea y cuáles no. Esto llega hasta un punto de modularización cargable dinámica y vinculación tardía que no he visto en DOS hasta ahora. Si no le gusta el protector de pantalla, las macros, la calculadora o la compatibilidad con el mouse, o <casi cualquier otra cosa>, puede especificar esto en la línea de comando y FreeKEYB, teniendo en cuenta todas las dependencias entre las rutinas, lo hará por completo. elimine todos los fragmentos de código, que tratan con esa característica y no son necesarios para proporcionar la funcionalidad solicitada, antes de que el controlador reubique la imagen en la ubicación de destino y se convierta en residente. […]
  71. ^ Paul, Matías R. (10 de abril de 2001). "[ANN] Lanzamiento de FreeDOS beta 6" (en alemán). Grupo de noticias : de.comp.os.msdos. Archivado desde el original el 9 de septiembre de 2017 . Consultado el 2 de julio de 2017 . […] Brandneue[s] Feature, der dynamischen Dead-Code-Elimination , die die jeweils notwendigen Bestandteile des Treibers erst zum Installationszeitpunkt zusammenbastelt und reloziert, so daß keine ungenutzten Code- oder Datenbereiche mehr residente bleiben (zB wenn jemand ein bestimmtes FreeKEYB- Característica no benötigt). […]

Otras lecturas