Tipus | Binari,executable,odi objecte,biblioteques compartides |
---|---|
Extensió | none, .o, .so, .out |
MIME | application/x-coff iapplication/x-coffexec ![]() |
Magic number | 4C 01 per i386 64 86 per AMD64 00 02 per Itanium[2] |
Desenvolupador | AT&T |
Més informació | |
Stack Exchange | Etiqueta![]() |
ElCommon Object File Format (COFF) és unformat pera fitxers d'ordinadorexecutables,codi d'objecte ibiblioteques compartides utilitzats en sistemesUnix. Va ser introduït aUnix System V, va substituir el formata.out utilitzat anteriorment i va formar la base per a especificacions ampliades comXCOFF iECOFF, abans de ser substituït en gran part perELF, introduït ambSVR4. COFF i les seves variants es continuen utilitzant en alguns sistemessemblants a Unix, aMicrosoft Windows (Portable Executable), en entornsUEFI i en alguns sistemes de desenvolupament integrats.[1]
El format original de fitxer d'objectes Unixa.out no és compatible ambles biblioteques compartides, la identificació de format estranger, o enllaç explícit d'adreces. A mesura que el desenvolupament de sistemessemblants a Unix va continuar tant dins com forad'AT&T, van sorgir diferents solucions a aquests i altres problemes.[2]
COFF es va introduir l'any 1983 alsistema UNIX V d'AT&T per a plataformesde 32 bits noVAX, com ara el3B20. Les millores respecte al format actual d'AT&Ta.out incloïen seccions arbitràries, declaracions explícites del processador i enllaços d'adreces explícits.No obstant això, el disseny COFF era massa limitat i incompletament especificat: hi havia un límit en el nombre màxim de seccions, un límit en la longitud dels noms de les seccions, els fitxers font inclosos i la informació dedepuració simbòlica era incapaç de suportar llenguatges del món real com ara comC, molt menys llenguatges més nous comC++, o processadors nous. Totes les implementacions del món real de COFF eren necessàriament violacions de l'estàndard com a resultat. Això va provocar nombroses extensions de COFF.IBM va utilitzar el formatXCOFF aAIX;DEC,SGI i altres utilitzavenECOFF; i nombrosos portsSysV i cadenes d'eines orientats al desenvolupament integrat, cadascun van crear les seves pròpies variacions incompatibles.[3]
La millora principal de COFF respectea a.out va ser la introducció de múltiples seccions amb nom al fitxer objecte. Els diferents fitxers d'objectes poden tenir diferents números i tipus de seccions.[4]
La informació de depuració simbòlica COFF consisteix en noms simbòlics (cadena) per a funcions i variables del programa, i informació sobre el número de línia, utilitzats per establir punts d'interrupció i execució detraça.
Els noms simbòlics s'emmagatzemen a la taula de símbols COFF. Cada entradade la taula de símbols inclou un nom, classe d'emmagatzematge, tipus, valor i número de secció. Els noms curts (8 caràcters o menys) s'emmagatzemen directament a la taula de símbols; els noms més llargs s'emmagatzemen com acompensació a la taula de cadenes al final de l'objecte COFF.
Quan es genera un fitxer COFF, normalment no se sap on es carregarà a la memòria. L'adreça virtual on es carregarà el primer byte del fitxer s'anomenaadreça base d'imatge. La resta del fitxer no es carrega necessàriament en un bloc contigu, sinó enseccions diferents.
Les adreces virtuals relatives (RVA) no s'han de confondre amb les adreces virtuals estàndard. Unaadreça virtual relativa és l'adreça virtual d'un objecte del fitxer un cop carregat a la memòria, menys l'adreça base de la imatge del fitxer. Si el fitxer s'hagués de mapejar literalment del disc a la memòria, el RVA seria el mateix que el desplaçament al fitxer, però això és força inusual.