Robert Pengelly <
roberta...@gmail.com> writes:
>I've been doing a little research into a.out and found two references that =
>I'm confused about.
>
>Looking at
https://gunkies.org/wiki/UNIX_a.out_file it has:
>
>Offset Contents
>0 A magic number (below)
>2 Program text size
>4 Initialized data size
>6 Uninitialized (BSS) data size
>010 Symbol table size
>012 Entry location
>014 Unused
>016 Flag indicating relocation information has been suppressed=20
>1 a =E2=80=9Cbr .+14=E2=80=9D instruction (205(8))
>2 The size of the program text
>3 The size of the symbol table
>4 The size of the relocation bits area
>5 The size of a data area
>6 A zero word (unused at present)
>
>What size is a word exactly? I know that a.out is from the original Unix t=
>hat ran on the PDP-7/PDP-11 but I don't know what a word size was (16-bits =
>vs 32-bits).
16 bits.
Here's /usr/include/a.out.h from unix v7. Int is 16 bits.
struct exec { /* a.out header */
int a_magic; /* magic number */
unsigned a_text; /* size of text segment */
unsigned a_data; /* size of initialized data */
unsigned a_bss; /* size of unitialized data */
unsigned a_syms; /* size of symbol table */
unsigned a_entry; /* entry point */
unsigned a_unused; /* not used */
unsigned a_flag; /* relocation info stripped */
};
#define A_MAGIC1 0407 /* normal */
#define A_MAGIC2 0410 /* read-only text */
#define A_MAGIC3 0411 /* separated I&D */
#define A_MAGIC4 0405 /* overlay */
struct nlist { /* symbol table entry */
char n_name[8]; /* symbol name */
int n_type; /* type flag */
unsigned n_value; /* value */
};
/* values for type flag */
#define N_UNDF 0 /* undefined */
#define N_ABS 01 /* absolute */
#define N_TEXT 02 /* text symbol */
#define N_DATA 03 /* data symbol */
#define N_BSS 04 /* bss symbol */
#define N_TYPE 037
#define N_REG 024 /* register name */
#define N_FN 037 /* file name symbol */
#define N_EXT 040 /* external bit, or'ed in */
#define FORMAT "%06o" /* to print a value */