Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
a.out(4)		   Kernel Interfaces Manual		      a.out(4)

       a.out - Executable and Linking Format (ELF) files

       #include	<elf.h>

       The  file name a.out is the default output file name from the link edi-
       tor, ld(1).  The	link editor will make an  a.out	 executable  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(3E) de-
       scribes.	 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
		 Section 1		     Segment 1
		 . . .
		 Section n		     Segment 2
		 . . .
		 . . .			     . . .
		 Section header	table	     Section header table

       An  ELF	header	resides	 at the	beginning and holds a ``road map'' de-
       scribing	the file's organization.  Sections hold	 the  bulk  of	object
       file  information  for the linking view:	instructions, data, symbol ta-
       ble, 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; relocatable files do not need one.  A
       section	header	table  contains	information describing the file's sec-
       tions.  Every section has an entry in the table;	each entry  gives  in-
       formation  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 immediately after
       the ELF header, and the section header table  following	the  sections,
       actual files may	differ.	 Moreover, sections and	segments have no spec-
       ified 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 pro-
       gram; if	other processes	are executing the same a.out  file,  the  pro-
       cesses 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	begin-
       ning  of	 data may appear twice.	 The duplicated	chunk of text that ap-
       pears 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 du-
       plication  is  necessary.   The	stack is automatically extended	as re-
       quired.	The data segment is extended as	requested by the brk(2)	system

       as(1), cc(1B), ld(1), brk(2), elf(3E)

       ANSI C Programmer's Guide

				  3 Jul	1990			      a.out(4)


Want to link to this manual page? Use this URL:

home | help