char *filename; /* Name of this file. */
char *local_sym_name; /* Describe the layout of the contents of the file */ struct exec header; /* The file's a.out header. */
int symseg_offset; /* Offset in file of debug symbol segment or 0 if there is nonę*/ struct nlist *symbols; /* Symbol table of the file. */ int string_size; /* Size in bytes of string table. */ char *strings; /* Pointer to the string table. */
struct relocation_info *textrel; /* Text and data relocation info */
struct relocation_info *datarel; /* Relation of this file's segments to the output file */
int text_start_address; /* Start of this file's data seg in the output file core image. */
int data_start_address; /* Start of this file's text seg in the output file core image. */
int bss_start_address; /* Start of this file's bss seg in the output file core image. */
int local_syms_offset; /* Offset in bytes in the output file symbol table of the first local symbol for this file. */
Ponieważ większość istotnych informacji znajduje się w nagłówku pliku, to tablica trzyma po prostu kopię nagłówka plus wskaźniki do tablicy napisów i tablicy relokacji.
Wszystkie współczesne kompilatory wspierają debuggowanie. Oznacza to, że programista może debuggować kod wynikowy odwołując się do nazw zmiennych i funkcji z kodu źródłowego, może także dowolnie ustawiać punkty kontrolne. Jest to możliwe dzięki zmapowaniu do kodu wynikowego numerów linii z kodu źródłowego, a także trzymaniu informacji o nazwach wszystkich zmiennych, funkcji, typów oraz struktur użytych w programie.