Un binario gordo (o binario multiarquitectura ) es un programa o biblioteca ejecutable que se ha expandido (o "engordado") con código nativo de múltiples conjuntos de instrucciones , lo que permite su ejecución en varios tipos de procesadores. [ 1 ] Esto da como resultado un archivo más grande que un archivo binario normal de una sola arquitectura, de ahí su 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 procesos secundarios , cada uno con su propio punto de entrada que es utilizado directamente por el sistema operativo.
El uso de binarios fat no es común en el software del sistema operativo , excepto en NeXTSTEP y los sistemas operativos de Apple derivados de NeXTSTEP, como macOS e iOS (ver más abajo); hay 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 los múltiples APK de Android ), seleccionar un binario específico de la arquitectura en tiempo de ejecución (como con los directorios de unión de Plan 9 ypaquetes gordos de GNUstep ), [ 2 ] [ 3 ] distribuir software en forma de código fuente y compilarlo in situ, o el uso de una máquina virtual (como con Java ) y compilación justo a tiempo .
Apolo
Los ejecutables compuestos de Apollo
En 1988, Domain/OS SR10.1 de Apollo Computer introdujo un nuevo tipo de archivo, "cmpexe" (ejecutable compuesto), que agrupaba binarios para ejecutables de Motorola 680x0 y Apollo PRISM . [ 4 ]
Manzana
El binario gordo de Apple
Un esquema de binarios grandes facilitó la transición del Apple Macintosh , que comenzó en 1994, de los microprocesadores 68k a los microprocesadores PowerPC . Muchas aplicaciones para la antigua plataforma 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 ejecutaba más lento que el código nativo. Las aplicaciones publicadas como "binarios grandes" ocupaban más espacio de almacenamiento, pero se ejecutaban a máxima velocidad en ambas plataformas. Esto se logró empaquetando una versión compilada para 68k y una versión compilada para PowerPC del mismo programa en sus archivos ejecutables. [ 5 ] [ 6 ] El código 68k más antiguo (CFM-68K o 68K clásico) continuó almacenándose en la bifurcación de recursos , mientras que el código PowerPC más nuevo se encontraba en la bifurcación de datos , en formato PEF . [ 7 ] [ 8 ] [ 9 ]
Los binarios fat eran más grandes que los programas que solo admitían PowerPC o 68k, lo que llevó a la creación de varias utilidades que eliminaban 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 del programa generalmente era un gran porcentaje del uso total del disco, y eliminar los miembros innecesarios de un binario fat liberaría una cantidad significativa de espacio en un disco duro.
Binarios multiarquitectura de NeXT/Apple
Binarios multiarquitectura NeXTSTEP
Los binarios grandes son una característica del sistema operativo NeXTSTEP / OPENSTEP de NeXT , a partir de NeXTSTEP 3.1.
En NeXTSTEP, se les llama "Binarios de arquitectura múltiple". Los binarios de arquitectura múltiple se concibieron originalmente para permitir que el software se compilara para ejecutarse tanto en el hardware de NeXT basado en Motorola 68k como en PCs basados 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 demás plataformas compatibles con OPENSTEP (m68k/ SPARC / PA-RISC ).
Los binarios de arquitectura múltiple (fat) son una característica del formato Mach-O .
La cadena de herramientas y el IDE se ampliaron para facilitar la compilación cruzada. Se incluyeron algunas casillas de verificación para seleccionar las arquitecturas que se deseaban incluir.
Cada binario de arquitectura múltiple comienza con una estructura ( struct fat_header) que contiene dos enteros sin signo. El primer entero ("mágico") se utiliza como un número mágico para identificar este archivo como un binario Fat. El segundo 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 nfat_arch 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 a los que está dirigido el binario Mach-O (dentro del archivo).struct fat_arch
La versión de la Colección de Compiladores GNU incluida en las Herramientas para Desarrolladores permitía la compilación cruzada del código fuente para las diferentes arquitecturas en las que NeXTSTEP podía ejecutarse. Por ejemplo, era posible seleccionar las arquitecturas de destino con varias opciones '-arch' (con la arquitectura como argumento). Esto facilitaba la distribución de un programa para que NeXTSTEP se ejecutara en distintas arquitecturas.
También era posible crear bibliotecas (por ejemplo, utilizando la herramienta libtool de NeXTSTEP ) con diferentes archivos objeto 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 objeto nativo en el sistema operativo gratuito Darwin de Apple (2000) y en Mac OS X de Apple (2001), y los binarios de arquitectura múltiple de NeXT siguieron siendo compatibles con el sistema operativo. En Mac OS X, los binarios de arquitectura múltiple se pueden usar 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 pueden usar para admitir múltiples arquitecturas, como PowerPC de 32 y 64 bits , o PowerPC y x86 , o x86-64 y ARM64 . [ 11 ]
El binario universal de Apple

En 2005, Apple anunció otra transición, de procesadores PowerPC a 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 multiarquitectura. [ 12 ] Apple denomina a estos programas " aplicaciones universales " y al formato de archivo " binario universal ", quizás como una forma de distinguir esta nueva transición de la anterior o de otros usos del formato binario multiarquitectura.
El formato binario universal no era necesario para la migración de aplicaciones nativas PowerPC preexistentes; entre 2006 y 2011, Apple proporcionó Rosetta , un traductor binario dinámico de PowerPC (PPC) a x86 , para esta función. Sin embargo, Rosetta tenía una sobrecarga de rendimiento considerable, por lo que se animó a los desarrolladores a ofrecer binarios tanto para PowerPC como para Intel, utilizando binarios universales. El coste obvio de los binarios universales es que cada archivo ejecutable instalado es más grande, pero en los años transcurridos entre la introducción de Mac OS X y el cambio a Intel, el espacio en disco duro superó con creces el tamaño de los ejecutables; si bien un binario universal podría duplicar el tamaño de una versión de la misma aplicación para una sola plataforma, el tamaño adicional suele ser insignificante dada la cantidad de espacio libre disponible. De hecho, las aplicaciones con binarios universales suelen ser más pequeñas que dos aplicaciones de arquitectura única, ya que los recursos del programa se pueden compartir en lugar de duplicarse. Si no se requieren todas las arquitecturas, se pueden usar las aplicaciones de línea de comandos lipo y ditto para eliminar versiones de la imagen binaria de arquitectura múltiple, creando así lo que a veces se denomina un binario delgado .
Además, los ejecutables binarios de arquitectura múltiple pueden contener código tanto para versiones de 32 bits como de 64 bits de PowerPC y x86, lo que permite distribuir aplicaciones en un formato compatible con procesadores de 32 bits, pero que aprovecha el mayor espacio de direcciones y las 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 ejecutaban en Mac OS X 10.4 a Mac OS X 10.6 ), Apple incluía utilidades que permitían que las aplicaciones se desarrollaran para las arquitecturas Intel y PowerPC; los binarios universales podían 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ó en Xcode 4.0 y, por lo tanto, no está disponible para los desarrolladores que utilizan Mac OS X 10.7 o superior.
En 2020, Apple anunció otra transición , esta vez de los procesadores Intel x86 a los procesadores Apple Silicon (arquitectura ARM64). Para facilitar la transición, Apple añadió compatibilidad con el formato binario Universal 2 ; los archivos binarios Universal 2 son archivos binarios multiarquitectura que contienen código ejecutable tanto para x86-64 como para ARM64, lo que permite que el binario se ejecute de forma nativa tanto en procesadores Intel de 64 bits como en procesadores Apple Silicon de 64 bits. Además, Apple introdujo la traducción binaria dinámica Rosetta 2 para el conjunto de instrucciones de x86 a Arm64, lo que permite a los usuarios ejecutar aplicaciones que no tienen variantes binarias Universal.
Binario EFI de Apple Fat
En 2006, Apple cambió de procesadores PowerPC a procesadores Intel y reemplazó Open Firmware por EFI . Sin embargo, para 2008, algunos de sus Macs usaban EFI de 32 bits y otros de 64 bits. Por esta razón, Apple amplió la especificación EFI con binarios "fat" que contenían binarios EFI de 32 y 64 bits. [ 13 ]
CP/M y DOS
Binarios combinados de estilo COM para CP/M-80 y DOS
Los ejecutables CP/M-80 , MP/M-80 , Concurrent CP/M , CP/M Plus , Personal CP/M-80 , SCP y MSX-DOS para las familias de procesadores Intel 8080 (y Zilog Z80 ) utilizan la misma extensión de archivo .COM que los sistemas operativos compatibles con DOS para los binarios Intel 8086. [ nb 1 ] En ambos casos, los programas se cargan en el desplazamiento +100h 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 bajo el sistema operativo incorrecto conduce a un comportamiento incorrecto e impredecible.
Para evitar esto, se han ideado algunos métodos para construir binarios fat 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 construido para su entorno correspondiente, o agregan stubs que hacen que el programa salga de forma elegante 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 código válido tanto para los procesadores 8086 como para los 8080, lo que haría que los procesadores se bifurquen a 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 procesador 8080 o 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 para incluir también la firma "-pms-" para archivos PMA autoextraíbles , [ 25 ] [ 17 ] [ 24 ] [ 18 ] representando así también 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 los procesadores x86 decodifican como una instrucción "RET", lo que permite salir del programa de forma controlada, [ nb 2 ] mientras que los procesadores 8080 lo decodifican como una instrucción "JP 103h" y simplemente saltan a la siguiente instrucción del programa. De manera similar, el ensamblador CP/M Z80ASM+ de SLR Systems mostraría un mensaje de error si se ejecutara erróneamente en DOS. [ 17 ]
Algunos archivos .COM de CP/M-80 3.0 pueden tener una o más superposiciones RSX adjuntas por GENCOM . [ 26 ] Si es así, comienzan con una cabecera adicional de 256 bytes (una página ). Para indicar esto, el primer byte de la cabecera se establece en el byte mágico C9h , que funciona tanto como una firma que identifica este tipo de archivo COM al cargador ejecutable de CP/M 3.0 , como una instrucción "RET" para procesadores compatibles con 8080 que conduce a una salida elegante si el archivo se ejecuta en versiones anteriores de CP/M-80. [ nb 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ódigo superpuestas similares para binarios combinados Z80 / 6502 , [ 17 ] 8086/68000 [ 17 ] o x86/ MIPS / ARM . [ 16 ]
Binarios combinados para CP/M-86 y DOS
CP/M-86 y DOS no comparten una extensión de archivo común para los ejecutables. [ nb 1 ] Por lo tanto, normalmente no es posible confundir los ejecutables. Sin embargo, las primeras versiones de DOS tenían tanto en común con CP/M en términos de su arquitectura que algunos programas iniciales de DOS se desarrollaron para compartir binarios que contenían código ejecutable. Un programa conocido que hacía esto era WordStar 3.2x , que usaba archivos de superposición idénticos en sus puertos para CP/M-86 y MS-DOS , [ 27 ] y usaba código corregido dinámicamente para adaptarse a las diferentes convenciones de llamada de estos sistemas operativos en tiempo de ejecución . [ 27 ]
El 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 corrige dinámicamente el sistema operativo cuando se carga el controlador (normalmente en la BIOS de DOS cuando ejecuta las instrucciones DEVICE en CONFIG.SYS ). Dado que DOS no rechaza los archivos con extensión .COM para ser cargados por DEVICE y no comprueba 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 incrustado dentro de los primeros cuatro bytes del archivo (tres bytes suelen ser suficientes). [ 29 ] Si las secciones del programa incrustado y del controlador de dispositivo comparten una porción común de código o datos, es necesario que el código gestione la carga 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 la que de otro modo ya habría realizado un cargador reubicador , excepto que en este caso tiene que hacerlo el propio programa cargado; esto es similar a la situación con los controladores autorreubicadores pero con el programa ya cargado en la ubicación de destino por 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 binario de base de datos NLS para usar con la directiva CONFIG.SYS COUNTRY y el controlador NLSFUNC . [ 31 ] Del mismo modo, los archivos del sistema PC DOS y DR-DOS IBMBIO.COM e IBMDOS.COM son imágenes binarias especiales cargadas por 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. [ nb 4 ] [ nb 6 ]
A veces es posible evitar esto utilizando técnicas similares a las descritas anteriormente. Por ejemplo, DR-DOS 7.02 y versiones posteriores incorporan una función de seguridad desarrollada por Matthias R. Paul: [ 32 ] Si estos archivos se llaman de forma inapropiada, pequeños fragmentos incrustados simplemente mostrarán información de 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 externa de identificación de archivos VERSION de NetWare y DR-DOS . [ 31 ] [ 32 ] [ nb 7 ]
Una característica de protección similar era la instrucción 8080 C7h ("RST 0") al comienzo mismo de los programas "Z3ENV" de tipo 3 y tipo 4 del sistema Z de Jay Sage y Joe Wright [ 35 ] [ 36 ] así como los archivos de superposición de lenguaje "Z3TXT" [ 37 ] que resultarían en un arranque en caliente (en lugar de un bloqueo) bajo CP/M-80 si se cargaban de forma inapropiada. [ 35 ] [ 36 ] [ 37 ] [ nb 2 ]
De manera remotamente similar, muchos formatos de archivo (binarios) incluyen por convención un byte 1Ah ( ASCII ^Z ) cerca del principio del archivo. Este carácter de control se interpretará como un marcador de fin de archivo (EOF) "suave" cuando un archivo se abre en modo no binario y, por lo tanto, en muchos sistemas operativos (incluidos 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 la consola.
Linux
FatELF: Binarios universales para Linux

FatELF [ 44 ] era una implementación de binarios pesados para Linux y otros sistemas operativos tipo 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 palabra , conjunto de instrucciones de la CPU , etc.), existe la ventaja de los binarios con soporte para múltiples ABI y versiones del kernel.
Según los desarrolladores, FatELF tiene varios casos de uso: [ 44 ]
- Las distribuciones ya no necesitan tener descargas separadas para distintas plataformas.
- Ya no se requieren los árboles /lib , /lib32 y /lib64 separados en la estructura de directorios del sistema operativo .
- El sistema selecciona de forma centralizada los binarios y las bibliotecas correctas, en lugar de utilizar scripts de shell .
- Si la interfaz binaria de aplicación (ABI) de ELF cambia algún día, los usuarios de versiones anteriores podrán seguir recibiendo soporte.
- Distribución de complementos para navegadores web que funcionan de inmediato con múltiples plataformas.
- Distribución de un único archivo de aplicación que funciona en variantes de los sistemas operativos Linux y BSD , sin necesidad de una capa de compatibilidad de plataforma.
- Una misma partición de disco duro puede arrancar en distintas máquinas con diferentes arquitecturas de CPU, para fines de desarrollo y experimentación. Mismo sistema de archivos raíz, diferente kernel y arquitectura de CPU.
- Las aplicaciones proporcionadas mediante recursos compartidos de red o memorias USB funcionarán en múltiples sistemas. Esto también resulta útil para crear aplicaciones portátiles e imágenes de computación en la nube para sistemas heterogéneos. [ 46 ]
Hay disponible una imagen de prueba de concepto de Ubuntu 9.04 . [ 47 ] A partir de 2021, FatELF no se ha integrado en el núcleo principal de Linux. [ 48 ] [ 49 ]
Windows
Paquete completo
Aunque el formato Portable Executable (PEE ) utilizado por Windows no permite asignar código a plataformas, aún es posible crear un programa cargador que realice la ejecución según la arquitectura. Esto se debe a que las versiones de escritorio de Windows en ARM admiten la emulación x86 de 32 bits , lo que lo convierte en un destino de código máquina "universal" útil. Fatpack es un cargador que demuestra este concepto: incluye un programa x86 de 32 bits que intenta ejecutar los ejecutables empaquetados en sus secciones de recursos uno por uno. [ 50 ]
Arm64X
Al desarrollar Windows 11 ARM64, Microsoft introdujo una nueva forma de extender el formato Portable Executable llamada Arm64X. [ 51 ] Un binario Arm64X contiene todo el contenido que estaría en binarios separados de x64/Arm64EC y Arm64, pero fusionado en un único archivo más eficiente en el disco. El conjunto de herramientas de Visual C++ se ha actualizado para admitir la producción de dichos binarios. Y cuando la creación de binarios Arm64X es técnicamente difícil, los desarrolladores pueden crear DLL de reenvío puro Arm64X en su lugar. [ 52 ]
Conceptos similares
Los siguientes enfoques son similares a los binarios "fat" en el sentido de que se proporcionan múltiples versiones de código 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, por ejemplo, el compilador CHI ( C para Integración Heterogénea) del conjunto de desarrollo Intel EXOCHI (Exoskeleton Sequencer) extiende el concepto de pragma OpenMP para multihilo para producir binarios grandes que contienen secciones de código para diferentes arquitecturas de conjuntos de instrucciones (ISA) a partir de 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 ]
Presentada en 2006, la plataforma de computación paralela de Nvidia , CUDA (Compute Unified Device Architecture), es un software que permite la computación de propósito general en GPU ( GPGPU ). Su compilador NVCC, basado en LLVM , puede crear binarios pesados basados en ELF que contienen el llamado ensamblador virtual PTX (como texto), que el controlador de tiempo de ejecución de CUDA puede compilar posteriormente en tiempo de ejecución en código ejecutable binario SASS (Streaming Assembler ) para la GPU de destino presente. 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, de 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 pesados también son compatibles con GPGPU-Sim , un simulador de GPU presentado también en 2007. [ 61 ] [ 62 ]
Multi2Sim (M2S) , un marco de simulación de sistemas heterogéneos OpenCL (originalmente solo para CPU MIPS o x86, pero luego extendido para admitir también CPU ARM y GPU como las familias AMD / ATI Evergreen y Southern Islands , así como Nvidia Fermi y Kepler ) [ 63 ] también admite binarios fat basados en ELF. [ 64 ] [ 63 ]
objetos grasos
GNU Compiler Collection (GCC) y LLVM no tienen un formato binario fat, pero sí archivos objeto fat para la optimización en tiempo de enlace (LTO). Dado que LTO implica retrasar la compilación al tiempo de enlace, los archivos objeto deben almacenar la representación intermedia (IR), pero, por otro lado, también puede ser necesario almacenar el código máquina (por velocidad o compatibilidad). Un objeto LTO que contiene tanto IR como código máquina se conoce como un objeto fat . [ 65 ]
Multiversión de funciones
Incluso en un programa o biblioteca diseñado para la misma arquitectura de conjunto de instrucciones , un programador puede desear utilizar extensiones de conjunto de instrucciones más recientes manteniendo la compatibilidad con una CPU antigua. Esto se puede lograr con el versionado múltiple de funciones (FMV): se escriben versiones de la misma función en el programa, y un fragmento de código decide cuál usar detectando 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 versionado múltiple. [ 66 ] Esta es una forma de despacho dinámico sin efectos semánticos.
Muchas bibliotecas matemáticas incluyen rutinas de ensamblador escritas a mano que se seleccionan automáticamente según la capacidad de la CPU. Algunos ejemplos son glibc , Intel MKL y OpenBLAS . Además, el cargador de bibliotecas de glibc admite la carga desde rutas alternativas para características específicas de la CPU. [ 67 ]
Un enfoque similar, pero a nivel de byte y con granularidad, ideado originalmente por Matthias R. Paul y Axel C. Frinke, consiste en permitir que un pequeño cargador autodesechable, relajante y reubicable, integrado en el archivo ejecutable junto con cualquier número de fragmentos de código binario alternativos, construya condicionalmente una imagen de tiempo de ejecución optimizada en tamaño o velocidad 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 mediante una forma de eliminación dinámica de código muerto (DDCE). [ 68 ] [ 69 ] [ 70 ] [ 71 ]
Véase también
- Software multiplataforma
- Stub de DOS
- puntero gordo
- Ejecutable lineal (LX)
- Nuevo ejecutable (NE)
- Ejecutable portátil (PE)
- Código independiente de la posición (PIC)
- Efecto secundario
- Formato hexadecimal universal , un formato de archivo hexadecimal "grueso" que apunta a múltiples plataformas.
- Ejecutable alfanumérico , código ejecutable camuflado como texto (a veces incluso legible).
- Shellcode multiarquitectura , shellcode dirigido a múltiples plataformas (y a veces incluso camuflado como texto alfanumérico).
Notas
- 1 2 Esto no supone un problema para los ejecutables de estilo CP/M-86 en CP/M-86 , CP/M-86 Plus , Personal CP/M-86 , S5-DOS , Concurrent CP/M-86 , Concurrent DOS , Concurrent DOS 286 , FlexOS , Concurrent DOS 386 , DOS Plus , Multiuser DOS , System Manager y REAL/32, ya que 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 los trabajos por lotes escritos para el procesador de línea de comandos CMD.EXE en lasfamilias de sistemas operativos OS/2 y Windows NT ).
- 1 2 3 Esto funciona porquese puede usar una instrucción de retorno (adecuada) para salir de los programas en CP/M-80 , CP/M-86 y DOS , aunque los códigos de operación , las condiciones exactas y los mecanismos subyacentes difieren: En CP/M-80, los programas pueden terminar (es decir, arrancar en caliente en la BIOS ) saltando a 0 en la página cero , ya sea directamente con RST 0 ( código de operación C7h de 8080 / 8085 / Z80 ), o llamando a la función BDOS 0 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, pueden, mientras la pila esté plana, también salir 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 dedicada INT 20h, así comosubfunciones de API INT 21h para terminar programas (que son preferibles para programas más complejos), para programas traducidos por máquina, DOS también emula el comportamiento de CP/M hasta cierto punto: un programa puede terminarse 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 emite un retorno cercano RETN ( código de operación C3h del 8088/8086 ) también saltará implícitamente al inicio de su segmento de código, llegando así finalmentetambién a INT 20h. [a] En CP/M-86, la página cero está estructurada de manera diferente y no hayinterfaz 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.
- ↑ En los procesadores 8088 / 8086 , el código de operación C9h es un alias no documentado para CBh ("RETF", que extrae CS:IP de la pila ), mientras que se decodifica como "LEAVE" (establece SP en BP y extrae BP) en los procesadores 80188 / 80186 y más recientes.
- 1 2 Este problema podría haberse evitado eligiendo extensiones de archivo que no generaran conflictos , pero, una vez introducidos, estos nombres de archivo particulares se mantuvieron desde versiones muy tempranas de MS-DOS / PC DOS por razones de compatibilidad con herramientas (de terceros) programadas para esperar estos nombres de archivo específicos.
- 1 2 Otros archivos DOS de este tipo son KEYBOARD.SYS , un archivo de base de datos de diseño de teclado binariopara el controlador de teclado KEYB en MS-DOS y PC DOS , IO.SYS que contiene la 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 núcleo de MS-DOS . Sin embargo, MS-DOS y PC DOS no proporcionan archivos de sistema protegidos contra fallos en absoluto, y estos nombres de archivo no se utilizan ni se necesitan en DR-DOS 7.02 y superior, que de otro modo sí proporciona archivos de sistema protegidos contra fallos.
- ↑ Esta es la razón por la que estos archivos tienen el atributo oculto activado, para que no se incluyan en la lista por defecto, reduciendo así el riesgo de que se ejecuten accidentalmente.
- ↑ Los
COUNTRY.SYSformatos de archivo compatibles con 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 del archivo, es posible crearCOUNTRY.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 superior) incluyen un analizador mejorado capaz de leer ambos tipos de formatos (y variantes), incluso al mismo tiempo, por lo que los archivos con encabezado Janus no son necesarios. [c] [d] No obstante, los archivos distribuidos son "gordos" porque incluyen un pequeño fragmento ejecutable que simplemente muestra un mensaje incrustado cuando se invoca de forma inapropiada. [d] [b]
Referencias
- ↑ Devanbu, Premkumar T.; Fong, Philip WL; Stubblebine, Stuart G. (19–25 de abril de 1998). «Técnicas para la ingeniería de software confiable» (PDF) . Actas de la 20.ª Conferencia Internacional sobre Ingeniería de Software . IEEE. págs. 126–135 [131]. doi : 10.1109/ICSE.1998.671109 . ISBN 0-8186-8368-6ISSN 0270-5257 . Archivado (PDF) del original el 16 de enero de 2014. Consultado el 29 de septiembre de 2021 . (10 páginas)
- ↑ Pero, Nicola (2008-12-18). "gnustep/tools-make: README.Packaging" . GitHub . Archivado del original el 25-05-2022 . Recuperado el 26-05-2022 .
- ↑ "PackagingDrafts/GNUstep" . Wiki del proyecto Fedora . 25 de febrero de 2009. Archivado del original el 25 de mayo de 2022. Consultado el 26 de mayo de 2022 .
- ↑ "Notas de la versión del software del sistema de dominio, versión 10.1" (PDF) (primera edición impresa). Chelmsford, Massachusetts, EE. UU.: Apollo Computer Inc. Diciembre de 1988. págs. 2-16 . Número de pedido 005809-A03. Archivado (PDF) del original el 26 de mayo de 2023. Consultado el 24 de julio de 2022 . (256 páginas)
- 1 2 Engst, Adam C. (1994-08-22). "¿Deberían los binarios de grasa hacer dieta?" . TidBITS . No. 240. TidBITS Publishing Inc. ISSN 1090-7017 . Archivado del original el 29-09-2021 . Recuperado el 29-09-2021 .
- 1 2 Engst, Adam C. (1994-08-29). "Fat Binary Comments" . TidBITS . N.° 241. TidBITS Publishing Inc. ISSN 1090-7017 . Archivado del original el 29-09-2021 . Recuperado el 29-09-2021 .
- ↑ "Capítulo 1 - Administrador de recursos / Referencia del administrador de recursos - Formato de archivo de recursos" . Inside Macintosh: Mac OS Runtime Architectures . Apple Computer . 6 de julio de 1996. Archivado del original el 29 de septiembre de 2021. Consultado el 29 de septiembre de 2021 .
- ↑ "Capítulo 7 - Programas binarios pesados - Creación de programas binarios pesados" . Inside Macintosh: Mac OS Runtime Architectures . Apple Computer . 11 de marzo de 1997. Archivado del original el 29 de septiembre de 2021. Consultado el 20 de junio de 2011 .
- ↑ "Capítulo 8 - Estructura PEF" . Inside Macintosh: Mac OS Runtime Architectures . Apple Computer . 11 de marzo de 1997. Archivado del original el 29 de septiembre de 2021. Consultado el 29 de septiembre de 2021 .
- ↑ Tevanian, Avadis; DeMoney, Michael; Enderby, Kevin; Wiebe, Douglas; Snyder, Garth (1995-07-11) [1993-08-20]. "Método y aparato para archivos ejecutables independientes de la arquitectura" (PDF) . Redwood City, California, EE. UU.: NeXT Computer, Inc. Patente estadounidense 5432937A. Archivado (PDF) del original el 14-12-2020 . Recuperado el 26-05-2022 .(9 páginas); Tevanian, Avadis; DeMoney, Michael; Enderby, Kevin; Wiebe, Douglas; Snyder, Garth (18-02-1997) [28-02-1995]. "Método y aparato para archivos ejecutables independientes de la arquitectura" (PDF) . Redwood City, California, EE. UU.: NeXT Computer, Inc. Patente estadounidense 5604905A. Archivado (PDF) del original el 26-05-2022 . Recuperado el 26-05-2022 .(9 páginas)
- ↑ "Binarios universales y binarios PowerPC de 32/64 bits" . Referencia del formato de archivo ABI Mach-O de Mac OS X. Apple Inc. 4 de febrero de 2009 [2003]. Archivado del original el 27 de abril de 2012.
- ↑ Singh, Amit (19 de junio de 2006). "2.6.2 Fat Binaries" . Mac OS X Internals - A Systems Approach . Pearson Education . pág. 66. ISBN 978-0-13270226-3. Consultado el 28 de septiembre de 2021 .
- ↑ "rEFIt - EFI Fat Binaries" . refit.sourceforge.net . Consultado el 18 de octubre de 2022 .
- ↑ Paul, Matthias R. (2002-10-07) [2000]. "Re: Ejecutar un archivo COM" . Grupo de noticias : alt.msdos.programmer . Recuperado el 2017-09-03 .
{{cite newsgroup}}: CS1 maint: servicio de archivado obsoleto ( enlace )(Nota: Incluye detalles sobre las convenciones de llamada a programas COM de DOS). - 1 2 3 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" . REMark . Vol. 8, n.º 2. St. Joseph, Michigan, EE. UU.: Heath/Zenith Users' Group (HUG). págs. 55–57 . N.º 85. P/N 885-2085. Archivado del original el 13 de diciembre de 2021.
- 1 2 3 Cha, Sang Kil; Pak, Brian; Brumley, David ; Lipton, Richard Jay (2010-10-08) [2010-10-04]. Programas independientes de la plataforma (PDF) . Actas de la 17.ª conferencia ACM sobre seguridad informática y de comunicaciones (CCS'10). Chicago, Illinois, EE. UU.: Universidad Carnegie Mellon , Pittsburgh, Pensilvania, EE. UU. / Instituto Tecnológico de Georgia , Atlanta, Georgia, EE. UU. págs. 547–558 . doi : 10.1145/1866307.1866369 . ISBN 978-1-4503-0244-9. Archivado (PDF) del original el 26-05-2022 . Recuperado el 26-05-2022 .(12 páginas) (Véase también:)(Nota: No aborda el escenario específico para las arquitecturas de conjuntos de instrucciones 8080 frente a 8086 (como para CP/M y DOS ), sino que describe el concepto general de "programa autoidentificable" de programas independientes de la plataforma (PIP) a través de lo que los autores denominan un encabezado de gadget (es decir, bloques de lógica de programa que no deben confundirse con los gadgets ROP ) para x86 , MIPS y ARM : por ejemplo, 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 ).
- 1 2 3 4 5 6 Wilkinson, William "Bill" Albert; Seligman, Cory; Drushel, Richard F.; Harston, Jonathan Graham; Elliott, John C. (1999-02-17). "Binarios compatibles con MS-DOS y CP/M" . Grupo de noticias : comp.os.cpm . Archivado del original el 13 de diciembre de 2021. Recuperado el 13 de diciembre de 2021 . (Nota: Es posible que algunos de los códigos de operación en el código de ejemplo de Elliott ( EBh, 44h, EBh y EBh, 04h, ... ) estén intercambiados).
- 1 2 Elliott, John C. (27-10-2009). "Programa de información de CP/M" . Grupo de noticias : comp.os.cpm . Archivado del original el 13-12-2021 . Recuperado el 13-12-2021 .
[…] Función de protección DOS […] La idea se basa en las utilidades del emulador MYZ80 de Simeon Cran; el encabezado de protección DOS en esos va un paso más allá 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 tener más diversión con archivos
PMArc
autoextraíbles . Inicie uno con […] defb 0EBh, 018h, '-pms-' […] y las utilidades PMA lo tratarán como un archivo válido, enviará los procesadores
8086
a 011Ah y los procesadores Z80 a 0130h. […]
- ↑ ChristW (14-11-2012) [13-11-2012]. Chen, Raymond (ed.). "Microsoft Money falla durante la importación de transacciones de cuenta o al cambiar el beneficiario de una transacción descargada" . The New Old Thing . Archivado del original el 05-07-2018 . Recuperado el 19-05-2018 .
[…] secuencia de bytes […] EB 03 C3 yy xx […] Si crea un
archivo .COM
con esos 5 bytes como los primeros […] verá 'JMP SHORT 3', seguido de 3 bytes basura. […] Si observa un desensamblaje
Z80
[…] que se traduce en 'EX DE,HL; INC BC;' […] El tercer byte es 'JUMP' seguido de la dirección de 16 bits especificada como yy xx […] tendrá un archivo .COM que se ejecuta en
MS-DOS
y […]
CP/M
[…]
(Nota: Si bien el autor habla del Z80, esta secuencia también funciona en el 8080 y procesadores compatibles).
- ↑ Brehm, Andrew J. (2016). "CP/M y MS-DOS Fat Binary" . DesertPenguin.org . Archivado del original el 19 de mayo de 2018. Recuperado el 19 de mayo de 2018 .(Nota: Si bien el artículo habla del Z80 , la secuencia de código también funciona en el 8080 y procesadores compatibles).
- ↑ Elliott, John C. (13 de junio de 1996). "Subir a micros.hensa.ac.uk" . Grupo de noticias : comp.os.cpm . Archivado del original el 13 de diciembre de 2021. Recuperado el 13 de diciembre de 2021.
[…] FATBIN 1.00: combina un
archivo .COM de
CP/M
y un archivo .COM
de DOS
para crear uno que se ejecuta 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. […]
- ↑ Elliott, John C. (28-06-1998) [01-04-1997]. "FATBIN v1.01" . Archivado del original el 28-06-1998.(Nota: FATBIN v1.01.COM 22k 1997-04-01. Crea archivos binarios fat que se ejecutan tanto en CP/M como en DOS. Se distribuye en un archivo autoextraíble para CP/M-80 y DOS).
- ↑ Elliott, John C. (11 de marzo de 2002). "DSKWRITE v1.00" . Fossies - el archivo de software de código abierto Fresh . Archivado del original el 12 de diciembre de 2021. Consultado el 12 de diciembre de 2021.
[…] DSKWRITE.Z80 contiene el código fuente de la versión
CP/M
. […] DSKWRITE.ASM contiene el código fuente de la versión
DOS
. […] Para obtener el
archivo .COM
único , debe usar FBMAKE: […]
(Nota: Se menciona FBMAKE del paquete FATBNSEA.COM).
- 1 2 Elliott, John C. (2012-06-20) [2005-01-05]. "Generic CP/M" . Seasip.info . Archivado del original el 17-11-2021 . Recuperado el 12-12-2021 .
[…]
Los archivos autoextraíbles
son
archivos .COM
que contienen varios archivos más pequeños. Cuando ejecutas uno, creará sus archivos más pequeños […] Los programas de archivos autoextraíbles se ejecutarán en
DOS
(2 o posterior) o
CP/M
, con efectos idénticos. Para extraerlos en
Unix
, puedes usar ZXCC […] FATBNSEA.COM […] FATBIN combina un archivo .COM de CP/M-80 y un archivo .COM de DOS para producir uno que funcionará en ambos sistemas. […] M3C4SEA.COM […] M3CONV versión 4: convierte instantáneas
de Spectrum
en formato .Z80 o .SNA a o desde
formato
Multiface 3 (Multiface 3 ->
Z80
solo en 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 solos en 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 a un archivo
.BMP
de Windows […]
- ↑ Elliott, John C. (18/01/1997) [11/01/1997]. "PMSFX 2" . Grupo de noticias : comp.os.cpm . Archivado del original el 13/12/2021 . Recuperado el 13/12/2021 .
[…] He escrito una versión de
PMSFX
que produce
archivos .COM
descomprimibles en
DOS
y
CP/M
(los tres primeros bytes son código
Z80
válido , código
8086
válido y encabezado
PMA
válido ) […] como un
archivo autoextraíble
. […]
- ↑ Elliott, John C.; Lopushinsky, Jim (2002) [1998-04-11]. "CP/M 3 COM file header" . Seasip.info . Archivado del original el 30-08-2016 . Recuperado el 29-08-2016 .
- 1 2 Necasek, Michal (2018-01-30) [2018-01-28, 2018-01-26]. "WordStar Again" . Museo OS/2 . Archivado del original el 2019-07-28 . Recuperado el 2019-07-28 .
[…] La razón para sospechar tal diferencia es que la versión 3.2x también admitía
CP/M-86
(las
superposiciones
son idénticas entre
DOS
y CP/M-86, solo el ejecutable principal es diferente) […] los archivos
.OVR
son 100% idénticos entre DOS y CP/M-86, con una bandera (claramente mostrada 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 está bien abstraída […] las superposiciones de WordStar 3.2x son 100% idénticas entre las versiones de DOS y CP/M-86. Existe 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 en DOS y CP/M-86, aunque probablemente tampoco sea muy diferente. […]
- ↑ Lineback, Nathan. "Capturas de pantalla de GSX" . Toastytech.com . Consultado el 15 de enero de 2020 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - 1 2 3 Paul, Matthias R. (2002-04-11). "Re: [ fd-dev ] ANUNCIO: CuteMouse 2.0 alpha 1" . freedos-dev . Archivado del original el 21-02-2020 . Recuperado el 21-02-2020 .
[...] FreeKEYB es [...] un verdadero controlador .COM y .SYS (modelo pequeño) en uno. Puedes 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 un DB FFh pendiente. Funciona con MS-DOS, PC
DOS, DR-DOS y muy probablemente con cualquier otro problema de DOS también. [...]
- 1 2 3 Paul, Matthias R. (2002-04-06). "Re: [ fd-dev ] ANUNCIO: CuteMouse 2.0 alpha 1" . freedos-dev . Archivado del original el 2020-02-07 . Recuperado el 2020-02-07 .
[…] Agregar un encabezado de controlador de dispositivo SYS al controlador, para que CTMOUSE pudiera ser ambos en uno, un
TSR
normal y un controlador de dispositivo, similar a nuestro controlador de teclado avanzado FreeKEYB. […] Esto realmente no es necesario en
DR DOS
porque
INSTALL
= es compatible desde DR
DOS 3.41+ y DR
DOS conserva el orden de las directivas
[
D
]
CONFIG.SYS
[…] pero […] mejoraría la […] flexibilidad en los sistemas
MS-DOS
/
PC DOS
, que […] siempre ejecutan las directivas
DEVICE
= antes de cualquier instrucción INSTALL=, independientemente de su orden en el archivo. […] El software puede requerir que el controlador del ratón esté presente como controlador de dispositivo, ya que los controladores de ratón siempre han sido controladores de dispositivo desde hace mucho tiempo. Estos controladores de ratón tenían nombres específicos según el protocolo que utilizaban ("
PC$MOUSE
" para
el Modo de Sistemas de Ratón,
por ejemplo), y algunos programas pueden buscar estos controladores para determinar el tipo de ratón correcto. […] Otra ventaja es que los controladores de dispositivo suelen consumir menos memoria (sin
entorno
, sin
PSP
). […] Básicamente, se trata de un encabezado de archivo complejo, un código diferente para analizar la línea de comandos, un punto de entrada y una línea de salida diferentes, y algunas técnicas de segmentación para superar la diferencia ORG 0 / ORG 100h.
La auto-carga
de un controlador de dispositivo es un poco más compleja, ya que hay que dejar el encabezado del controlador donde está y solo reubicar el resto del controlador. […]
- 1 2 3 4 Paul, Matthias R. (10-06-2001) [1995]. "Formato de archivo DOS COUNTRY.SYS" (archivo COUNTRY.LST) ( ed. 1.44). Archivado del original el 20-04-2016 . Recuperado el 20-08-2016 .
- ^ Paul, Matías 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á.
(Nota: NWDOSTIP.TXT es una obra exhaustiva sobre Novell DOS 7 y OpenDOS 7.01, que incluye la descripción de muchas características y aspectos internos no documentados. Forma parte de la
MPDOSTIP.ZIPcolección, aún más extensa, del autor, mantenida hasta 2001 y distribuida en numerosos sitios web en aquella época. El enlace proporcionado dirige a una versión anterior delNWDOSTIP.TXTarchivo convertida a HTML). - ↑ Paul, Matthias R. (1997-10-02). "Caldera OpenDOS 7.01/7.02 Update Alpha 3 IBMBIO.COM README.TXT" . Archivado del original el 4 de octubre de 2003. Recuperado el 29 de marzo de 2009 .
- ↑ 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 .
- 1 2 Sage, Jay (mayo-junio de 1988). Carlson, Art (ed.). "ZCPR 3.4 - Programas de tipo 4" . The Computer Journal (TCJ) - Programación, soporte al usuario, aplicaciones . ZCPR3 Corner (32). Columbia Falls, Montana, EE. UU.: 10-17 [ 16 ]. ISSN 0748-9331 . ark:/13960/t1wd4v943 . Recuperado el 29 de noviembre de 2021 .
- 1 2 Sage, Jay (mayo-junio de 1992) [marzo-junio de 1992]. Carlson, Art; McEwen, Chris (eds.). "Programas de tipo 3 y tipo 4" . The Computer Journal (TCJ) - Programación, soporte al usuario, aplicaciones . Z-System Corner - Algunas nuevas aplicaciones de programas de tipo 4 (55). S. Plainfield, Nueva Jersey, EE. UU.: Socrates Press: 13-19 [14, 16 ]. ISSN 0748-9331 . ark:/13960/t4dn54d22 . Recuperado el 29-11-2021 .
- 1 2 Sage, Jay (noviembre-diciembre de 1992). Carlson, Art; Kibler, Bill D. (eds.). "Regular Feature, ZCPR Support, Language Independence, part 2" . The Computer Journal (TCJ) - Programming, User Support, Applications . The Z-System Corner (58). Lincoln, CA, EE. UU.: 7–10 . ISSN 0748-9331 . ark:/13960/t70v9g87h . Recuperado el 09-02-2020 .
[...] había un opcode de "RST 0", que, si se ejecutaba, resultaría en un
arranque en caliente
. Un archivo que contiene un módulo
Z3TXT
nunca debería ejecutarse, pero a un costo de un byte podríamos protegernos contra esa remota posibilidad. El encabezado también contenía la cadena de caracteres "Z3TXT" seguida de un byte nulo (0). Muchos módulos
de Z-System
incluyen tales 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 a la memoria, pueden usar la cadena de identificación para validar el archivo, es decir, para asegurarse de que sea el tipo de módulo que el usuario ha indicado. De esta manera, se pueden detectar errores del usuario y archivos dañados. […] El encabezado, por lo tanto, queda de la siguiente manera: […] rst […] db 'Z3TXT',0
; ID terminado en nulo […]
; 12345678
; debe tener 8 caracteres, […] db 'PROGNAME'
; rellenar con espacios […]
; 123
; debe tener 3 caracteres […] db 'ENG'
; nombre del idioma […] dw LENGTH
; longitud del módulo […]
- ↑ "Tabla de características de dispositivos de E/S - Consolas o teletipos". Manual del sistema de multiprogramación PDP-6 (PDF) . Maynard, Massachusetts, EE. UU.: Digital Equipment Corporation (DEC). 1965. pág. 43. DEC-6-0-EX-SYS-UM-IP-PRE00. Archivado (PDF) del original el 14/07/2014 . Consultado el 10/07/2014 . (1+84+10 páginas)
- ↑ "5.1.1.1. Funciones dependientes del dispositivo - Modos de datos - Software dúplex completo A(ASCII) y AL(línea ASCII)". Manual de referencia del PDP-10: Comunicación con el monitor - Monitores de tiempo compartido (PDF) . Vol. 3. Digital Equipment Corporation (DEC). 1969. págs. 5-3–5-6 [5-5 (431)]. Archivado (PDF) del original el 15/11/2011 . Recuperado el 10/07/2014 . (207 páginas)
- ↑ "2. Convenciones de llamadas al sistema operativo". Guía de interfaz CP/M 2.0 (PDF) (1.ª ed.). Pacific Grove, California, EE. UU.: Digital Research . 1979. pág. 5. Archivado (PDF) del original el 28/02/2020 . Recuperado el 28/02/2020 .
[…] El final de un archivo
ASCII
se indica mediante el carácter
Control-Z
(1AH) o un final de archivo real, devuelto por la operación de lectura
de CP/M
. Sin embargo, los caracteres Control-Z incrustados en archivos de código máquina (por ejemplo,
archivos COM
) se ignoran, y la condición de final de archivo devuelta por CP/M se utiliza para terminar las operaciones de lectura. […]
(56 páginas)
- ↑ Hogan, Thom (1982). "3. Comandos transitorios de CP/M". Guía del usuario de Osborne CP/M - Para todos los usuarios de CP/M (2.ª ed.). Berkeley, California, EE. UU.: A. Osborne/McGraw-Hill . pág. 74. ISBN 0-931988-82-9. Recuperado el 28-02-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, CONTROL-Z tiene la misma probabilidad de aparecer que cualquier otro carácter. Por lo tanto, no se puede usar como marcador de fin de archivo. CP/M usa un método diferente para marcar el final de un archivo que no es ASCII. CP/M asume 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 de disco para cada archivo contiene una lista de los registros de disco asignados a ese archivo. Este método se basa en el tamaño del archivo, en lugar de en su contenido, para localizar el final del mismo. […]
- ↑ BC_Programmer (31/01/2010) [30/01/2010]. "Re: El comando Copy que fusiona varios archivos añade la palabra SUB al final" . Computer Hope Forum . Archivado del original el 26/02/2020 . Consultado el 26/02/2020 .
- ↑ "¿Cuáles son las diferencias entre los archivos .txt de Linux y Windows (codificación Unicode)?" . Superuser . 2011-08-03 [2011-06-08]. Archivado del original el 2020-02-26 . Consultado el 2020-02-26 .
- 1 2 Gordon, Ryan C. (octubre de 2009). "FatELF: binarios universales para Linux" . icculus.org . Archivado del original el 27 de agosto de 2020. Recuperado el 13 de julio de 2010 .
- ↑ Gordon, Ryan C. (noviembre de 2009). "Especificación FatELF, versión 1" . icculus.org . Archivado del original el 27 de agosto de 2020. Recuperado el 25 de julio de 2010 .
- ↑ Windisch, Eric (3 de noviembre de 2009). "Asunto: Grupos de noticias: gmane.linux.kernel, Re: Parches FatELF..." gmane.org. Archivado del original el 15 de noviembre de 2016. Recuperado el 8 de julio de 2010 .
- ↑ Gordon, Ryan C. (2009). "FatELF: Binarios universales para Linux. - La página de descarga de la máquina virtual de prueba de concepto" . icculus.org . Archivado del original el 21 de mayo de 2022. Consultado el 26 de mayo de 2022 .(Nota: Imagen de máquina virtual de Ubuntu 9.04 con soporte para binarios completos).
- ↑ Holwerda, Thom (5 de noviembre de 2009). "Ryan Gordon detiene el proyecto FatELF" . Linux. osnews.com. Archivado del original el 26 de mayo de 2022. Consultado el 5 de julio de 2010 .
- ↑ Brockmeier, Joe "Zonker" (23 de junio de 2010). "SELF: Anatomía de un (supuesto) fracaso" . LWN.net . Linux Weekly News. Archivado del original el 26 de mayo de 2022. Recuperado el 6 de febrero de 2011 .
- ↑ Mulder, Sijmen J. (2021-03-06) [2018-04-25]. "sjmulder/fatpack - Crea binarios 'fat' multiarquitectura para Windows" . GitHub . Archivado del original el 26-05-2022 . Recuperado el 26-05-2022 .
- ↑ "Archivos PE Arm64X" . learn.microsoft.com . Microsoft . 13 de agosto de 2022. Archivado del original el 20 de agosto de 2023. Consultado el 31 de marzo de 2023 .
- ↑ "Crear binarios Arm64X" . learn.microsoft.com . Microsoft . 10 de marzo de 2023. Archivado del original el 20 de agosto de 2023. Consultado el 31 de marzo de 2023 .
- ↑ 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 multihilo multinúcleo heterogéneo" . ACM SIGPLAN Notices . 42 (6): 156–166 . doi : 10.1145/1273442.1250753 .(11 páginas)
- ↑ Wang, Perry H.; Collins, Jamison D.; Chinya, Gautham N.; Jiang, Hong; Tian, Xinmin; Girkar, Milind; Pearce, Lisa; Lueh, Guei-Yuan; Yakoushkin, Sergey; Wang, Hong (2007-08-22). "Exosqueleto acelerador" (PDF) . Intel Technology Journal . 11: Computación a escala de terabytes (3). Intel Corporation : 185–196 . doi : 10.1535/itj.1103 . ISSN 1535-864X . Archivado (PDF) del original el 26 de mayo de 2022. Recuperado el 26 de mayo de 2022 . (12 de 1+vii+90+1 páginas)
- ↑ "cudaFatFormat.h / ptxomp.c" . 1.13. Nvidia Corporation . 15 de noviembre de 2004. Archivado del original el 26 de mayo de 2022. Consultado el 26 de mayo de 2022 .
- ↑ Harris, Mark J. (8 de mayo de 2014) [5 de junio de 2013]. "Tutorial técnico: Consejo profesional de CUDA: Entienda los binarios grandes y el almacenamiento en caché JIT" . Nvidia Developer . Nvidia . Archivado del original el 23 de marzo de 2022. Consultado el 26 de mayo de 2022 .
- ↑ "Utilidades binarias de CUDA" (PDF) (Nota de aplicación). 6.0. Nvidia . Febrero de 2014. DA-06762-001_v6.0. Archivado (PDF) del original el 25 de mayo de 2022. Consultado el 25 de mayo de 2022 .
- ↑ "fatbinary - ayuda" . helpmanual.io . 8.0. 2016. Archivado del original el 25/05/2022 . Consultado el 25/05/2022 .
- ↑ "Guía de referencia del controlador del compilador CUDA NVCC" (PDF) . 11.7. Nvidia . Mayo de 2022. TRM-06721-001_v11.7. Archivado (PDF) del original el 25 de mayo de 2022. Consultado el 25 de mayo de 2022 .
- ↑ Braun, Lorenz; Frönin, Holger (18 de noviembre de 2019). "CUDA Flux: Un perfilador de instrucciones ligero para aplicaciones CUDA" (PDF) . 2019 IEEE/ACM Performance Modeling, Benchmarking and Simulation of High Performance Computer Systems (PMBS) . IEEE . págs. 73–81 . doi : 10.1109/PMBS49563.2019.00014 . ISBN 978-1-7281-5977-5. Archivado (PDF) del original el 21-03-2022 . Recuperado el 26-05-2022 .
- ↑ Fung, Wilson WL; Sham, Ivan; Yuan, George; Aamodt, Tor M. (2007). "Formación y programación dinámica de warps para un flujo de control eficiente de GPU" (PDF) . Vancouver, Columbia Británica, Canadá. Archivado (PDF) del original el 26 de mayo de 2022. Recuperado el 26 de mayo de 2022 .(12 páginas)
- ↑ Bakhoda, Ali; Yuan, George L.; Fung, Wilson WL; Wong, Henry; Aamodt, Tor M. (2009-04-28) [2009-04-26]. "Análisis de cargas de trabajo CUDA mediante un simulador GPU detallado" (PDF) . Simposio Internacional IEEE de 2009 sobre Análisis de Rendimiento de Sistemas y Software . págs. 163–174 . doi : 10.1109/ISPASS.2009.4919648 . ISBN 978-1-4244-4184-6. Archivado (PDF) del original el 26-05-2022 . Recuperado el 06-05-2022 .
- 1 2 "13.4 El envoltorio del compilador AMD: binarios pesados". El marco de simulación Multi2Sim: un modelo CPU-GPU para computación heterogénea (PDF) . v4.2. Multi2Sim. 2013. págs. 173–176 [176]. Archivado (PDF) del original el 25/05/2022 . Recuperado el 25/05/2022 . (4 de 210 páginas)
- ↑ Ubal, Rafael; Jang, Byunghyun; Mistry, Perhaad; Schaa, Dana; Kaeli, David R. (23-09-2012) [19-09-2012]. "Multi2Sim: Un marco de simulación para computación CPU-GPU" (PDF) . XXI Conferencia Internacional sobre Arquitecturas Paralelas y Técnicas de Compilación (PACT) . Minneapolis, Minnesota, EE. UU.: IEEE . ISBN 978-1-4503-1182-3. Archivado (PDF) del original el 25-05-2022 . Recuperado el 25-05-2022 .(10 páginas)
- ↑ "Descripción general de LTO (GNU Compiler Collection (GCC) Internals)" . gcc.gnu.org . Archivado del original el 12 de septiembre de 2021. Consultado el 12 de septiembre de 2021 .
- ↑ Wennborg, Hans (2018). "Atributos en Clang" . Documentación de Clang 7. Archivado del original el 7 de abril de 2022. Consultado el 26 de mayo de 2022 .
- ↑ Bahena, Victor Rodriguez (2018-04-03). "Uso transparente de paquetes de bibliotecas optimizados para la arquitectura Intel" . Power and Performance. Clear Linux Project . Intel Corporation . Archivado del original el 26 de mayo de 2022. Recuperado el 26 de mayo de 2022 .
- ↑ Paul, Matthias R.; Frinke, Axel C. (1997-10-13) [1991], FreeKEYB – Controlador mejorado de teclado y consola para DOS (Manual del usuario) ( ed. v6.5) (Nota: FreeKEYB es un sucesor de K3PLUS, basado en Unicode y configurable dinámicamente, que admite la mayoría de diseños de teclado , páginas de códigos y códigos de país . Utilizando un ensamblador de macros estándar y un marco de herramientas de análisis de preprocesamiento y posprocesamiento automático para generar metadatos de dependencia y transformación de código que se incrustan en el archivo ejecutable junto con el código binario y un cargador autodesechable, relajado y reubicable, el controlador implementa técnicas de eliminación y reubicación dinámicas de código muerto a nivel de byte en tiempo de carga , así como código automodificable y reconfigurable en tiempo de ejecución para minimizar su consumo de memoria hasta aproximarse a la forma canónica , dependiendo del hardware subyacente, el sistema operativo y la configuración del controlador, así como del conjunto de características y la configuración regional seleccionados (aproximadamente sesenta interruptores de configuración con cientos de opciones para un número casi ilimitado de combinaciones posibles). Esta complejidad y dinámica se ocultan a los usuarios, quienes trabajan con un único archivo ejecutable como lo harían con un controlador convencional.)
- ↑ Paul, Matthias R. (2002-04-06). " [ fd-dev ] Ctrl+Alt+Del" . freedos-dev . Recuperado el 27-04-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 carga, el tipo de teclado, distribución, país y página de códigos utilizados, el tipo de ratón y adaptadores de vídeo instalados, los demás 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 comandos. Debido a la gran cantidad de interruptores y opciones de línea de comandos admitidos [...] (alrededor de cincuenta interruptores [...] con múltiples configuraciones posibles), existe una gran cantidad de combinaciones de características con dependencias incontables [...] que dan como resultado [...] un número infinito de [...] imágenes de destino diferentes. La técnica de eliminación dinámica de código muerto de FreeKEYB logra resolver […] estas […] dependencias y […] eliminar código muerto y datos […] no se limita a […] incluir o excluir un número algo limitado de módulos o subrutinas completas y corregir algunas tablas de despacho como en la programación TSR clásica, sino que […] funciona […] a […] nivel de byte […] 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 corrección […] automatizado […] usando definiciones condicionales […] para declarar los distintos casos […] no solo opcional en tiempo de ensamblaje sino en tiempo de inicialización […] sin la […] sobrecarga de tener al menos alguna cantidad de código muerto restante en la imagen de tiempo de ejecución […] para realizar un seguimiento de todas las dependencias entre […] estas condicionales, construir y reubicar dinámicamente la imagen de tiempo de ejecución, corregir todas las referencias entre estas pequeñas, cambiantes y móviles partes binarias […] aún permitiendo usar el pequeño estilo .COM/.SYS […] modelo […] se realiza en tiempo de inicialización […]
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ Paul, Matthias R. (2001-08-21). " [ fd-dev ] Cambio de páginas de códigos en FreeDOS" . freedos-dev . Archivado del original el 19-04-2019 . Recuperado el 20-04-2019 .
[…] una […] característica única […] que llamamos
eliminación dinámica de código muerto
, por lo que puede en el momento de la instalación […] especificar qué componentes del controlador desea y cuáles no. Esto llega a un grado de modularización de carga dinámica y enlace tardío 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 ratón, o <casi cualquier otra cosa>, puede especificarlo en la línea de comandos, y FreeKEYB, teniendo en cuenta todas las dependencias entre las rutinas, eliminará por completo todos los fragmentos de código que se ocupan de esa característica y que no son necesarios para proporcionar la funcionalidad solicitada, antes de que el controlador reubique la imagen en la ubicación de destino y se haga residente. […]
- ^ Pablo, Matías R. (10 de abril de 2001). " [ ANN ] Lanzamiento de FreeDOS beta 6" (en alemán). Grupo de noticias : de.comp.os.msdos . 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 La función FreeKEYB no está disponible). […]
{{cite newsgroup}}: CS1 maint: servicio de archivado obsoleto ( enlace )
Lecturas adicionales
- Tunney, Justine Alexandra Roberts (11 de febrero de 2021). "¿Qué tan grueso debe ser un binario grueso?" . cosmopolitan libc - tu biblioteca C de compilación única y ejecución en cualquier lugar / Comunicado Cosmopolitan . Archivado del original el 12 de septiembre de 2021. Recuperado el 12 de septiembre de 2021 .; Tunney, Justine Alexandra Roberts (11 de febrero de 2021). "¿Qué tan grueso debe ser un binario grueso?" . Hacker News . Archivado del original el 1 de junio de 2021. Recuperado el 12 de septiembre de 2021 .
- Tunney, Justine Alexandra Roberts (24 de agosto de 2020). "αcτµαlly pδrταblε εxεcµταblε (Ape)" . Archivado del original el 12 de septiembre de 2021. Recuperado el 12 de septiembre de 2021 .
- Gotham, Frederick (2020-10-22). "Making a Fat Binary for Linux and Mac". Narkive. Archived from the original on 2021-09-12. Retrieved 2021-09-12.
- Gotham, Frederick (2020-10-24). "Fat Binary - MS-Windows and four Linux". Narkive. Archived from the original on 2021-09-12. Retrieved 2021-09-12.
- Gotham, Frederick (2020-11-02). "Fat Binary - DOS Windows Linux". Narkive. Archived from the original on 2021-09-12. Retrieved 2021-09-12.
- "We develop to WarpUP the Amiga - StormC for PowerPC and p-OS". Haage & Partner GmbH. September 1996. Archived from the original on 2017-12-06. Retrieved 2021-09-29.
- Münch, Matthias (2006) [2005]. "AmigaOS 3.9 - Features". AmigaOS: multimedia, multi-threaded, multi-tasking. Archived from the original on 2021-09-29. Retrieved 2021-09-29.
- Executable file formats