COFF | ||
---|---|---|
Desarrollador | ||
AT&T Corporation | ||
Información general | ||
Extensión de archivo | ninguna,.o | |
Tipo de MIME | application/x-coff y application/x-coffexec | |
Tipo de formato | Binario,executable,object,shared libraries | |
Extendido a | XCOFF,ECOFF,Portable Executable | |
Formato abierto | ? | |
El formatoCOFF, también llamadoCommon Object File Format, es una especificación de formato para archivos ejecutables, código objeto y bibliotecas compartidas, usada en sistemas Unix. Se introdujo enUnix System V, remplazando al formatoa.out usado anteriormente, y constituyó la base para especificaciones extendidas comoXCOFF yECOFF, antes de ser reemplazado en gran medida por ELF, introducida porSVR4. COFF y sus variantes siguen siendo usados en algunos sistemasUnix-like, enMicrosoft Windows, en entornosEFI y en algunos sistemas de desarrollo embebidos.
El formato de archivo de objeto original deUnix —a.out— no era capaz de soportar adecuadamente bibliotecas compartidas (shared libraries), identificación de formatos extraños o enlazado explícito de direcciones. Como el desarrollo de los sistemasUnix-like continuaba tanto dentro como fuera de AT&T, surgieron diferentes soluciones a este y otros temas.
COFF fue introducido enUNIX System V de AT&T para las plataformas de 32 bits no-VAX, como el 3B20. COFF implicó mejoras con respecto al formatoa.out, incluyendo secciones arbitrarias (de memoria), declaraciones explícitas de procesador, y la vinculación de direcciones explícita.
Sin embargo, el diseño de COFF era limitado e incompleto: había un límite en el número máximo de secciones, un límite en la longitud de los nombres de sección incluyendo archivos fuente, y la información simbólica de depuración era incapaz de soportar lenguajes comoC, y mucho menos lenguajes más nuevos comoC++ o de soportar nuevos procesadores. Como resultado de esto, en el mundo real, todas las implementaciones de COFF necesariamente fueron violaciones de los estándares. Esto condujo a numerosas extensiones COFF.IBM usó el formatoXCOFF en su sistema operativoAIX.DEC,SGI y otros usaronECOFF. Numerosas adaptaciones deSysV y herramientas de desarrollo para sistemas empotrados utilizaron sus propias variaciones, normalmente incompatibles entre ellas.
Con el lanzamiento deSVR4, AT&T remplaza COFF conELF.
Mientras que las versiones extendidas de COFF se siguen utilizando en algunasplataformas tipo Unix, principalmente en sistemas embebidos, quizás el uso más extendido del formato COFF hoy en día está en el formatoPortable Executable (PE) de Microsoft. Desarrollado paraWindows NT, el formato PE (a veces escrito como PE/COFF) usa una cabecera COFF para archivos objeto, y como un componente de la cabecera de PE para archivos ejecutables.[1]
La mejora más importante que trajo COFF sobrea.out fue la introducción de múltiples secciones con nombre en elarchivo objeto. Diferentes archivos objeto pueden tener diferentes números y tipos de secciones.
La información de depuración simbólica en los archivos COFF consta de (cadenas de) nombres simbólicos para las funciones y variables del programa, así como la información del número de línea, utilizada para establecerpuntos de interrupción y rastreo de ejecución.
Los nombres simbólicos son almacenados en la tabla de símbolos de COFF. Cada elemento de la tabla incluye un nombre, clase de almacenamiento, tipo, valor y número de sección. Los nombres cortos (de 8 caracteres o menos) se almacenan directamente en la tabla de símbolos, y los nombres largos se almacenan como un desplazamiento dentro de la tabla de cadenas de caracteres, al final del objeto COFF.
Cuando se genera un archivo COFF, no se sabe con certeza adónde será cargado en memoria. La dirección virtual en la que se cargará el primerocteto del archivo se denomina dirección base de la imagen. El resto del archivo no será necesariamente cargado en bloques contiguos, pero sí en diferentes secciones.