COFF
Common Object File Format ( COFF ) este un format pentru fișiere executabile, fișiere de cod obiect și biblioteci dinamice. Formatul a apărut în Unix System V , înlocuind fostul a.out . A servit drept bază pentru specificații extinse, cum ar fi XCOFF și ECOFF și a fost ulterior înlocuit de formatul ELF . Continuă să fie utilizat pe unele sisteme de operare asemănătoare UNIX , pe Microsoft Windows și alte sisteme.
Format de fișier
Un fișier COFF include un antet de fișier, un antet opțional, un tabel de secțiuni și una sau mai multe secțiuni de cod și date.
Antetul fișierului COFF
Părtinire |
Lungime |
Camp |
Descriere
|
0 |
2 |
f_magic |
Identificatorul tipului de mașină pe care poate fi executat fișierul
|
2 |
2 |
f_nscns |
Numărul de secțiuni
|
patru |
patru |
f_timdat |
Scăderea cu 32 de biți a numărului de secunde de la 1 ianuarie 1970, ora 0:00 AM, când a fost creat fișierul
|
opt |
patru |
f_symptr |
Locație în fișierul tabelului de simboluri (utilizat pentru depanare)
|
12 |
patru |
f_nsyms |
Numărul de elemente din tabelul cu simboluri
|
16 |
2 |
f_opthdr |
Mărimea antetului suplimentară, pentru fișierele obiect este zero
|
optsprezece |
2 |
f_steaguri |
Indicatori care specifică atributele fișierului
|
Antetul fișierului opțional conține informațiile necesare încărctorului. Dimensiunea antetului poate varia în funcție de sistem și versiune.
Antet suplimentar (pentru MIPS)
Părtinire |
Lungime |
Camp |
Descriere
|
0 |
2 |
magie |
Tip fișier
|
2 |
2 |
vstamp |
Versiune
|
patru |
patru |
tsize |
Dimensiunea totală a tuturor secțiunilor care conțin cod executabil
|
opt |
patru |
dsize |
Dimensiunea totală a tuturor secțiunilor care conțin date inițializate
|
12 |
patru |
bsize |
Dimensiunea totală a tuturor secțiunilor care conțin date neinițializate
|
16 |
patru |
intrare |
Adresa punctului de intrare în program (0 - dacă nu este utilizată)
|
douăzeci |
patru |
text_start |
Adresa de descărcare a codului
|
24 |
patru |
data_start |
Adresă de încărcare a datelor inițializată
|
28 |
patru |
bss_start |
Adresa locației datelor neinițializate
|
32 |
patru |
gprmask |
|
36 |
patru |
cprmas |
|
40 |
patru |
gp_value |
|
Tabelul cu secțiuni este situat direct în spatele titlului suplimentar. Fiecare rând din tabel este titlul secțiunii corespunzătoare.
Rând tabel de secțiuni
Părtinire |
Lungime |
Camp |
Descriere
|
0 |
opt |
s_name |
Numele secțiunii
|
opt |
patru |
s_paddr |
Adresa fizică
|
12 |
patru |
s_vaddr |
Adresă virtuală
|
16 |
patru |
s_size |
Dimensiunea secțiunii
|
douăzeci |
patru |
s_scnpt |
Poziția secțiunii în dosar
|
28 |
patru |
s_relptr |
Poziția în fișierul tabelului de setare a adresei secțiunii
|
32 |
patru |
s_lnnoptr |
|
36 |
2 |
s_nreloc |
Numărul de articole din tabelul de setare a adresei
|
38 |
2 |
s_nlnno |
|
40 |
patru |
s_steaguri |
Steaguri
|
Link -uri