elf man page on NetBSD

Man page or keyword search:  
man Server   9087 pages
apropos Keyword Search (all sections)
Output format
NetBSD logo
[printable version]

ELF(5)			    BSD File Formats Manual			ELF(5)

NAME
     ELF — executable and linking format

SYNOPSIS
     #include <elf.h>

DESCRIPTION
     Because of the flexible nature of ELF, the structures describing it are
     available both as 32bit and 64bit versions. This document uses the 32bit
     versions, refer to <elf.h> for the corresponding 64bit versions.

     The four main types of an ELF object file are:

     executable	  A file suitable for execution. It contains the information
		  required for creating a new process image.

     relocatable  Contains the necessary information to be run through the
		  link editor ld(1) to create an executable or a shared
		  library.

     shared	  The shared object contains necessary information which can
		  be used by either the link editor ld(1) at link time or by
		  the dynamic loader ld.elf_so(1) at run time.

     core	  A file which describes the virtual address space and regis‐
		  ter state of a process.  Core files are typically used in
		  conjunction with debuggers such as gdb(1).

     ELF files have a dual nature. The toolchain, including tools such as the
     as(1) and linker ld(1), treats them as a set of sections described by
     their section headers. The system loader treats them as a set of segments
     described by the program headers.

     The general format of an ELF file is the following: The file starts with
     an ELF header. This is followed by a table of program headers (optional
     for relocatable and shared files). After this come the sections/segments.
     The file ends with a table of section headers (optional for executable
     files).

     A segment can be considered to consist of several sections. For example,
     all executable sections are typically packed into one loadable segment
     which is read-only and executable (see p_flags in the program header).
     This enables the system to map the entire file with just a few opera‐
     tions, one for each loadable segment, instead of doing numerous map oper‐
     ations for each section separately.

     Each file is described by the ELF header:

	   typedef struct {
		   unsigned char   e_ident[ELF_NIDENT];
		   Elf32_Half	   e_type;
		   Elf32_Half	   e_machine;
		   Elf32_Word	   e_version;
		   Elf32_Addr	   e_entry;
		   Elf32_Off	   e_phoff;
		   Elf32_Off	   e_shoff;
		   Elf32_Word	   e_flags;
		   Elf32_Half	   e_ehsize;
		   Elf32_Half	   e_phentsize;
		   Elf32_Half	   e_phnum;
		   Elf32_Half	   e_shentsize;
		   Elf32_Half	   e_shnum;
		   Elf32_Half	   e_shstrndx;
	   } Elf32_Ehdr;

     e_ident[]	  The array contains the following information in the indi‐
		  cated locations:

		  EI_MAG0	 The elements ranging from EI_MAG0 to EI_MAG3
				 contain the ELF magic number: \0177ELF

		  EI_CLASS	 Contains the address size of the binary,
				 either 32 or 64bit.

		  EI_DATA	 byte order

		  EI_VERSION	 Contains the ELF header version. This is cur‐
				 rently always set to 1.

		  EI_OSABI	 Contains the operating system ABI identifica‐
				 tion. Note that even though the definition
				 ELFOSABI_NETBSD exists, NetBSD uses
				 ELFOSABI_SYSV here, since the NetBSD ABI does
				 not deviate from the standard.

		  EI_ABIVERSION	 ABI version.

     e_type	  Contains the file type identification. It can be either
		  ET_REL, ET_EXEC, ET_DYN, or ET_CORE for relocatable, exe‐
		  cutable, shared, or core, respectively.

     e_machine	  Contains the machine type, e.g. SPARC, Alpha, MIPS, ...

     e_entry	  The program entry point if the file is executable.

     e_phoff	  The position of the program header table in the file or 0 if
		  it doesn't exist.

     e_shoff	  The position of the section header table in the file or 0 if
		  it doesn't exist.

     e_flags	  Contains processor-specific flags. For example, the SPARC
		  port uses this space to specify what kind of memory store
		  ordering is required.

     e_ehsize	  The size of the ELF header.

     e_phentsize  The size of an entry in the program header table. All
		  entries are the same size.

     e_phnum	  The number of entries in the program header table, or 0 if
		  none exists.

     e_shentsize  The size of an entry in the section header table. All
		  entries are the same size.

     e_shnum	  The number of entries in the section header table, or 0 if
		  none exists.

     e_shstrndx	  Contains the index number of the section which contains the
		  section name strings.

     Each ELF section in turn is described by the section header:

	   typedef struct {
		   Elf32_Word	   sh_name;
		   Elf32_Word	   sh_type;
		   Elf32_Word	   sh_flags;
		   Elf32_Addr	   sh_addr;
		   Elf32_Off	   sh_offset;
		   Elf32_Word	   sh_size;
		   Elf32_Word	   sh_link;
		   Elf32_Word	   sh_info;
		   Elf32_Word	   sh_addralign;
		   Elf32_Word	   sh_entsize;
	   } Elf32_Shdr;

     sh_name	   Contains an index to the position in the section header
		   string section where the name of the current section can be
		   found.

     sh_type	   Contains the section type indicator. The more important
		   possible values are:

		   SHT_NULL	 Section is inactive. The other fields contain
				 undefined values.

		   SHT_PROGBITS	 Section contains program information. It can
				 be for example code, data, or debugger infor‐
				 mation.

		   SHT_SYMTAB	 Section contains a symbol table. This section
				 usually contains all the symbols and is
				 intended for the regular link editor ld(1).

		   SHT_STRTAB	 Section contains a string table.

		   SHT_RELA	 Section contains relocation information with
				 an explicit addend.

		   SHT_HASH	 Section contains a symbol hash table.

		   SHT_DYNAMIC	 Section contains dynamic linking information.

		   SHT_NOTE	 Section contains some special information.
				 The format can be e.g.	 vendor-specific.

		   SHT_NOBITS	 Sections contains information similar to
				 SHT_PROGBITS, but takes up no space in the
				 file. This can be used for e.g. bss.

		   SHT_REL	 Section contains relocation information with‐
				 out an explicit addend.

		   SHT_SHLIB	 This section type is reserved but has unspec‐
				 ified semantics.

		   SHT_DYNSYM	 Section contains a symbol table. This symbol
				 table is intended for the dynamic linker, and
				 is kept as small as possible to conserve
				 space, since it must be loaded to memory at
				 run time.

     sh_flags	   Contains the section flags, which can have the following
		   values or any combination of them:

		   SHF_WRITE	  Section is writable after it has been
				  loaded.

		   SHF_ALLOC	  Section will occupy memory at run time.

		   SHF_EXECINSTR  Section contains executable machine instruc‐
				  tions.

     sh_addr	   Address to where the section will be loaded, or 0 if this
		   section does not reside in memory at run time.

     sh_offset	   The byte offset from the beginning of the file to the
		   beginning of this section. If the section is of type
		   SHT_NOBITS, this field specifies the conceptual placement
		   in the file.

     sh_size	   The size of the section in the file for all types except
		   SHT_NOBITS.	For that type the value may differ from zero,
		   but the section will still always take up no space from the
		   file.

     sh_link	   Contains an index to the section header table. The inter‐
		   pretation depends on the section type as follows:

		   SHT_REL
		   SHT_RELA	Section index of the associated symbol table.

		   SHT_SYMTAB
		   SHT_DYNSYM	Section index of the associated string table.

		   SHT_HASH	Section index of the symbol table to which the
				hash table applies.

		   SHT_DYNAMIC	Section index of of the string table by which
				entries in this section are used.

     sh_info	   Contains extra information. The interpretation depends on
		   the type as follows:

		   SHT_REL
		   SHT_RELA    Section index of the section to which the relo‐
			       cation information applies.

		   SHT_SYMTAB
		   SHT_DYNSYM  Contains a value one greater that the last
			       local symbol table index.

     sh_addralign  Marks the section alignment requirement. If, for example,
		   the section contains a doubleword, the entire section must
		   be doubleword aligned to ensure proper alignment. Only 0
		   and integral powers of two are allowed. Values 0 and 1
		   denote that the section has no alignment.

     sh_entsize	   Contains the entry size of an element for sections which
		   are constructed of a table of fixed-size entries. If the
		   section does not hold a table of fixed-size entries, this
		   value is 0.

     Every executable object must contain a program header. The program header
     contains information necessary in constructing a process image.

	   typedef struct {
		   Elf32_Word	   p_type;
		   Elf32_Off	   p_offset;
		   Elf32_Addr	   p_vaddr;
		   Elf32_Addr	   p_paddr;
		   Elf32_Word	   p_filesz;
		   Elf32_Word	   p_memsz;
		   Elf32_Word	   p_flags;
		   Elf32_Word	   p_align;
	   } Elf32_Phdr;

     p_type    Contains the segment type indicator. The possible values are:

	       PT_NULL	   Segment is inactive. The other fields contain unde‐
			   fined values.

	       PT_LOAD	   Segment is loadable. It is loaded to the address
			   described by p_vaddr.  If p_memsz is greater than
			   p_filesz, the memory range from (p_vaddr +
			   p_filesz) to (p_vaddr + p_memsz) is zero-filled
			   when the segment is loaded.	p_filesz can not be
			   greater than p_memsz.  Segments of this type are
			   sorted in the header table by p_vaddr in ascending
			   order.

	       PT_DYNAMIC  Segment contains dynamic linking information.

	       PT_INTERP   Segment contains a null-terminated path name to the
			   interpreter. This segment may be present only once
			   in a file, and it must appear before any loadable
			   segments. This field will most likely contain the
			   ELF dynamic loader: /libexec/ld.elf_so

	       PT_NOTE	   Segment contains some special information. Format
			   can be e.g. vendor-specific.

	       PT_SHLIB	   This segment type is reserved but has unspecified
			   semantics. Programs which contain a segment of this
			   type do not conform to the ABI, and must indicate
			   this by setting the appropriate ABI in the ELF
			   header EI_OSABI field.

	       PT_PHDR	   The values in a program header of this type specify
			   the characteristics of the program header table
			   itself. For example, the p_vaddr field specifies
			   the program header table location in memory once
			   the program is loaded. This field may not occur
			   more than once, may occur only if the program
			   header table is part of the file memory image, and
			   must come before any loadable segments.

     p_offset  Contains the byte offset from the beginning of the file to the
	       beginning of this segment.

     p_vaddr   Contains the virtual memory address to which this segment is
	       loaded.

     p_paddr   Contains the physical address to which this segment is loaded.
	       This value is usually ignored, but may be used while bootstrap‐
	       ping or in embedded systems.

     p_filesz  Contains the number of bytes this segment occupies in the file
	       image.

     p_memsz   Contains the number of bytes this segment occupies in the mem‐
	       ory image.

     p_flags   Contains the segment flags, which specify the permissions for
	       the segment after it has been loaded. The following values or
	       any combination of them is acceptable:

	       PF_R  Segment can be read.

	       PF_W  Segment can be written.

	       PF_X  Segment is executable.

     p_align   Contains the segment alignment. Acceptable values are 0 and 1
	       for no alignment, and integral powers of two.  p_vaddr should
	       equal p_offset modulo p_align.

SEE ALSO
     as(1), gdb(1), ld(1), ld.elf_so(1), execve(2), nlist(3), a.out(5),
     core(5), link(5), stab(5)

HISTORY
     The ELF object file format first appeared in AT&T System V UNIX.

BSD			       November 18, 2006			   BSD
[top]
                             _         _         _ 
                            | |       | |       | |     
                            | |       | |       | |     
                         __ | | __ __ | | __ __ | | __  
                         \ \| |/ / \ \| |/ / \ \| |/ /  
                          \ \ / /   \ \ / /   \ \ / /   
                           \   /     \   /     \   /    
                            \_/       \_/       \_/ 
More information is available in HTML format for server NetBSD

List of man pages available for NetBSD

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net