COFF

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Acronimul COFF (din engleză C ommon O bject F ile F ormat ) indică specificațiile unor tipuri de fișiere utilizate în sistemele de operare Unix : fișiere executabile , fișiere cu coduri de obiect și fișiere de bibliotecă partajată . COFF a fost introdus în UNIX System IV și a stat la baza formatelor extinse XCOFF și ECOFF , înainte de a fi înlocuit cu formatul ELF , introdus cu UNIX System V. Cu toate acestea, COFF și variantele sale continuă să fie utilizate în unele sisteme de tip Unix și în Microsoft Windows .

Istorie

Formatul original Unix pentru fișierele de coduri de obiecte, numit a.out , avea o structură foarte simplă, inadecvată pentru tehnologii precum depanarea simbolică și bibliotecile partajate . Deoarece dezvoltarea sistemelor de tip Unix a avut loc în diferite locații (în interiorul și în afara AT&T ), au fost implementate diferite soluții pentru a depăși limitele a.out.

COFF a fost introdus în UNIX System V, fabricat de AT&T, pentru platforme non- VAX pe 32 de biți , cum ar fi 3B20 . [ necesită citare ] Îmbunătățirile aduse formatului a.out existent al AT&T au inclus suport nativ pentru:

  • informațiile necesare pentru depanarea simbolică
  • biblioteci partajate
  • mecanism de extensie

Cu toate acestea, deși COFF a fost o îmbunătățire față de a.out, arhitectura a fost încă prea limitată: a existat o limită a numărului maxim de secțiuni, o limită a lungimii numelor secțiunilor și suportul pentru inserarea informațiilor pentru depanarea simbolică nu a fost compatibil cu limbaje noi precum C ++ . Pentru a depăși aceste limitări, AT&T odată cu lansarea System V, versiunea 4 , a lansat și formatul ELF; IBM a folosit formatul XCOFF în AIX , DEC , SGI și alții au folosit formatul ECOFF; alte sisteme și-au îmbunătățit formatele executabile proprietare care nu sunt portabile pe alte platforme.

În timp ce versiunile extinse ale COFF continuă să fie utilizate pe multe platforme de tip Unix, în principal sisteme încorporate , poate cea mai masivă utilizare a formatului COFF în prezent este cea realizată în Windows, cu formatul său PE . Dezvoltat pentru Windows NT , formatul PE (uneori denumit PE / COFF) folosește o schemă de antet COFF pentru fișierele obiect, iar în fișierele executabile schema de antet COFF este încorporată în schema de antet PE mai mare. [ fără sursă ]

Caracteristici

Principala îmbunătățire a COFF față de a.out a fost introducerea unor secțiuni mai denumite în fișierul obiect. Fișierele obiect diferite pot avea cantități și tipuri diferite de secțiuni.

Informații pentru depanarea simbolică

Informațiile pentru depanarea simbolică a fișierelor COFF constau din nume simbolice ( șiruri ) asociate cu funcțiile și variabilele programului și informații despre numerele de linie, utilizate pentru setarea [punctului de întrerupere] și pentru urmărirea în timpul execuției . Formatul a.out nu a oferit suport nativ pentru depanarea simbolică, deși această limită ar putea fi parțial depășită folosind mecanisme precum stab (Symbol TAble entrieS).

Numele simbolice sunt stocate în tabelul de simboluri. Fiecare intrare a tabelului de simboluri include numele, clasa de stocare, tipul, valoarea și numărul secțiunii. Numele scurte (de cel puțin opt caractere) sunt salvate direct în tabelul de simboluri; numele lungi sunt salvate sub forma unei adrese care indică tabelul de șiruri prezent la sfârșitul obiectului COFF.

Clasa de stocare descrie tipul de entitate pe care îl reprezintă simbolul, care poate fi C_EXT ( variabilă externă), C_AUTO (variabilă automată a stivei ), C_REG (variabilă registru ), C_FCN ( funcție )) și multe altele. Tipul prescrie modul de interpretare a valorii asociate simbolului și este posibil să se recunoască fiecare dintre tipurile de C.

Când este compilat cu opțiunile corespunzătoare, un fișier obiect COFF conține informații despre numărul de linie pentru fiecare posibil punct de întrerupere din secțiunea text a fișierului obiect. Informațiile despre numărul de linie sunt prezentate în două forme: în prima, pentru fiecare posibil punct de întrerupere , intrarea din tabelul cu numărul de linie conține adresa punctului de întrerupere și numărul de linie corespunzător. În cea de-a doua formă, intrarea indică la rândul ei o intrare în tabelul de simboluri care reprezintă începutul unei funcții, făcând astfel posibilă setarea unui punct de întrerupere folosind numele funcției în sine.

Rețineți că formatul COFF nu a putut reprezenta numerele de linie sau simbolurile de depanare în funcție de sursa inclusă în fișierele antet, ceea ce face ca informațiile de depanare a fișierelor COFF să fie practic inutile fără utilizarea extensiilor incompatibile.

Adrese virtuale relative sau RVA

Când este generat un fișier COFF, de obicei nu se știe în ce parte a memoriei se va încărca. Virtual adresa în cazul în care primul octet va fi încărcat din fișierul se numește adresa de bază a fișierului de imagine. Restul fișierului nu va fi neapărat prezent într-un bloc adiacent de memorie, ci în diferite secțiuni ale memoriei.

Adresa virtuală relativă (RVA) nu trebuie confundată cu adresele virtuale comune. O adresă RVA este adresa virtuală a unui obiect fișier odată ce este încărcat în memorie, minus adresa de bază a fișierului imagine. Dacă fișierul trebuie mapat fidel de pe disc în memorie, RVA va fi identic cu offset-ul din fișier, dar acest lucru este de fapt destul de neobișnuit.

Rețineți că termenul RVA este utilizat numai pentru obiectele din fișierul imagine. Odată încărcat în memorie, se adaugă adresa de bază a fișierului imagine și se utilizează adrese virtuale obișnuite.

Bibliografie

  • ( EN ) Gintaras Gircys, Înțelegerea și utilizarea COFF , O Reilly și asociații, 1988, ISBN 0-937175-31-5 .

linkuri externe

Controlul autorității GND ( DE ) 4356762-9
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT