a.out(4)
NAME
a.out - Executable and Linking Format (ELF) files
SYNOPSIS
#include <elf.h>
DESCRIPTION
The file name a.out is the default output file name from the
link editor, ld(1). The link editor will make an a.out exe-
cutable if there were no errors in linking. The output file
of the assembler, as(1), also follows the format of the
a.out file although its default file name is different.
Programs that manipulate ELF files may use the library that
elf(3ELF) describes. An overview of the file format follows.
For more complete information, see the references given
below.
____________________________________________________________
| Linking View | Execution View |
|____________________________|______________________________|
| ELF header | ELF header |
|____________________________|______________________________|
| Program header table | Program header table |
|____________________________|______________________________|
| optional | |
|____________________________|______________________________|
| Section 1 | Segment 1 |
|____________________________|______________________________|
| | |
|____________________________|______________________________|
| . . . | |
|____________________________|______________________________|
| Section n | Segment 2 |
|____________________________|______________________________|
| | |
|____________________________|______________________________|
| . . . | |
|____________________________|______________________________|
| . . . | . . . |
|____________________________|______________________________|
| Section header table | Section header table |
|____________________________|______________________________|
| | optional |
|____________________________|______________________________|
An ELF header resides at the beginning and holds a ``road
map'' describing the file's organization. Sections hold the
bulk of object file information for the linking view:
instructions, data, symbol table, relocation information,
and so on. Segments hold the object file information for the
program execution view. As shown, a segment may contain one
or more sections.
A program header table, if present, tells the system how to
create a process image. Files used to build a process image
(execute a program) must have a program header table; relo-
catable files do not need one. A section header table con-
tains information describing the file's sections. Every sec-
tion has an entry in the table; each entry gives information
such as the section name, the section size, etc. Files used
during linking must have a section header table; other
object files may or may not have one.
Although the figure shows the program header table immedi-
ately after the ELF header, and the section header table
following the sections, actual files may differ. Moreover,
sections and segments have no specified order. Only the ELF
header has a fixed position in the file.
When an a.out file is loaded into memory for execution,
three logical segments are set up: the text segment, the
data segment (initialized data followed by uninitialized,
the latter actually being initialized to all 0's), and a
stack. The text segment is not writable by the program; if
other processes are executing the same a.out file, the
processes will share a single text segment.
The data segment starts at the next maximal page boundary
past the last text address. If the system supports more than
one page size, the ``maximal page'' is the largest supported
size. When the process image is created, the part of the
file holding the end of text and the beginning of data may
appear twice. The duplicated chunk of text that appears at
the beginning of data is never executed; it is duplicated so
that the operating system may bring in pieces of the file in
multiples of the actual page size without having to realign
the beginning of the data section to a page boundary.
Therefore, the first data address is the sum of the next
maximal page boundary past the end of text plus the
remainder of the last text address divided by the maximal
page size. If the last text address is a multiple of the
maximal page size, no duplication is necessary. The stack is
automatically extended as required. The data segment is
extended as requested by the brk(2) system call.
SEE ALSO
as(1), cc(1B), ld(1), brk(2), elf(3ELF)
ANSI C Programmer's Guide
Man(1) output converted with
man2html