202 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			202 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.\" Copyright (c) 2006,2008 Joseph Koshy.  All rights reserved.
 | 
						|
.\"
 | 
						|
.\" Redistribution and use in source and binary forms, with or without
 | 
						|
.\" modification, are permitted provided that the following conditions
 | 
						|
.\" are met:
 | 
						|
.\" 1. Redistributions of source code must retain the above copyright
 | 
						|
.\"    notice, this list of conditions and the following disclaimer.
 | 
						|
.\" 2. Redistributions in binary form must reproduce the above copyright
 | 
						|
.\"    notice, this list of conditions and the following disclaimer in the
 | 
						|
.\"    documentation and/or other materials provided with the distribution.
 | 
						|
.\"
 | 
						|
.\" This software is provided by Joseph Koshy ``as is'' and
 | 
						|
.\" any express or implied warranties, including, but not limited to, the
 | 
						|
.\" implied warranties of merchantability and fitness for a particular purpose
 | 
						|
.\" are disclaimed.  in no event shall Joseph Koshy be liable
 | 
						|
.\" for any direct, indirect, incidental, special, exemplary, or consequential
 | 
						|
.\" damages (including, but not limited to, procurement of substitute goods
 | 
						|
.\" or services; loss of use, data, or profits; or business interruption)
 | 
						|
.\" however caused and on any theory of liability, whether in contract, strict
 | 
						|
.\" liability, or tort (including negligence or otherwise) arising in any way
 | 
						|
.\" out of the use of this software, even if advised of the possibility of
 | 
						|
.\" such damage.
 | 
						|
.\"
 | 
						|
.\" $Id$
 | 
						|
.\"
 | 
						|
.Dd September 1, 2006
 | 
						|
.Os
 | 
						|
.Dt GELF 3
 | 
						|
.Sh NAME
 | 
						|
.Nm GElf
 | 
						|
.Nd class-independent API for ELF manipulation
 | 
						|
.Sh LIBRARY
 | 
						|
.Lb libelf
 | 
						|
.Sh SYNOPSIS
 | 
						|
.In gelf.h
 | 
						|
.Sh DESCRIPTION
 | 
						|
This manual page describes a class independent API for manipulating
 | 
						|
ELF objects.
 | 
						|
This API allows an application to operate on ELF descriptors without
 | 
						|
needing to the know the ELF class of the descriptor.
 | 
						|
.Pp
 | 
						|
The GElf API may be used alongside the ELF API without restriction.
 | 
						|
.Ss GElf Data Structures
 | 
						|
The GElf API defines the following class-independent data structures:
 | 
						|
.Bl -tag -width GElf_Sxword
 | 
						|
.It Vt GElf_Addr
 | 
						|
A representation of ELF addresses.
 | 
						|
.It Vt GElf_Dyn
 | 
						|
A class-independent representation of ELF
 | 
						|
.Sy .dynamic
 | 
						|
section entries.
 | 
						|
.It Vt GElf_Ehdr
 | 
						|
A class-independent representation of an ELF Executable Header.
 | 
						|
.It Vt GElf_Half
 | 
						|
An unsigned 16 bit quantity.
 | 
						|
.It Vt GElf_Off
 | 
						|
A class-independent representation of a ELF offset.
 | 
						|
.It Vt GElf_Phdr
 | 
						|
A class-independent representation of an ELF Program Header Table
 | 
						|
entry.
 | 
						|
.It Vt GElf_Rel
 | 
						|
A class-independent representation of an ELF relocation entry.
 | 
						|
.It Vt GElf_Rela
 | 
						|
A class-independent representation of an ELF relocation entry with
 | 
						|
addend.
 | 
						|
.It Vt GElf_Shdr
 | 
						|
A class-independent representation of an ELF Section Header Table
 | 
						|
entry.
 | 
						|
.It Vt GElf_Sword
 | 
						|
A signed 32 bit quantity.
 | 
						|
.It Vt GElf_Sxword
 | 
						|
A signed 64 bit quantity.
 | 
						|
.It Vt GElf_Sym
 | 
						|
A class-independent representation of an ELF symbol table entry.
 | 
						|
.It Vt GElf_Word
 | 
						|
An unsigned 32 bit quantity.
 | 
						|
.It Vt GElf_Xword
 | 
						|
An unsigned 64 bit quantity.
 | 
						|
.El
 | 
						|
.Pp
 | 
						|
These data structures are sized to be compatible with the
 | 
						|
corresponding 64 bit ELF structures, and have the same internal
 | 
						|
structure as their 64 bit class-dependent counterparts.
 | 
						|
Class-dependent ELF structures are described in
 | 
						|
.Xr elf 5 .
 | 
						|
.Ss GElf Programming Model
 | 
						|
GElf functions always return a
 | 
						|
.Em copy
 | 
						|
of the underlying (class-dependent) ELF data structure.
 | 
						|
The programming model with GElf is as follows:
 | 
						|
.Bl -enum
 | 
						|
.It
 | 
						|
An application will retrieve data from an ELF descriptor using a
 | 
						|
.Fn gelf_get_*
 | 
						|
function.
 | 
						|
This will copy out data into a private
 | 
						|
.Vt GElf_*
 | 
						|
data structure.
 | 
						|
.It
 | 
						|
The application will work with its private copy of the GElf
 | 
						|
structure.
 | 
						|
.It
 | 
						|
Once done, the application copies the new values back to the
 | 
						|
underlying ELF data structure using the
 | 
						|
.Fn gelf_update_*
 | 
						|
functions.
 | 
						|
.It
 | 
						|
The application will then use the
 | 
						|
.Fn elf_flag*
 | 
						|
APIs to indicate to the ELF library that an ELF data structure is dirty.
 | 
						|
.El
 | 
						|
.Pp
 | 
						|
When updating an underlying 32 bit ELF data structure, the GElf
 | 
						|
routines will signal an error if a GElf value is out of range
 | 
						|
for the underlying ELF data type.
 | 
						|
.Ss Namespace use
 | 
						|
The GElf interface uses the following symbols:
 | 
						|
.Bl -tag
 | 
						|
.It GElf_*
 | 
						|
Class-independent data types.
 | 
						|
.It gelf_*
 | 
						|
For functions defined in the API set.
 | 
						|
.El
 | 
						|
.Ss GElf Programming APIs
 | 
						|
This section provides an overview of the GElf programming APIs.
 | 
						|
Further information is provided in the manual page of each function
 | 
						|
listed here.
 | 
						|
.Bl -tag
 | 
						|
.It "Allocating ELF Data Structures"
 | 
						|
.Bl -tag -compact
 | 
						|
.It Fn gelf_newehdr
 | 
						|
Allocate a new ELF Executable Header.
 | 
						|
.It Fn gelf_newphdr
 | 
						|
Allocate a new ELF Program Header Table.
 | 
						|
.El
 | 
						|
.It "Data Translation"
 | 
						|
.Bl -tag -compact
 | 
						|
.It Fn gelf_xlatetof
 | 
						|
Translate the native representation of an ELF data structure to its
 | 
						|
file representation.
 | 
						|
.It Fn gelf_xlatetom
 | 
						|
Translate from the file representation of an ELF data structure to a
 | 
						|
native representation.
 | 
						|
.El
 | 
						|
.It "Retrieving ELF Data"
 | 
						|
.Bl -tag -compact
 | 
						|
.It Fn gelf_getdyn
 | 
						|
Retrieve an ELF
 | 
						|
.Sy .dynamic
 | 
						|
table entry.
 | 
						|
.It Fn gelf_getehdr
 | 
						|
Retrieve an ELF Executable Header from the underlying ELF descriptor.
 | 
						|
.It Fn gelf_getphdr
 | 
						|
Retrieve an ELF Program Header Table entry from the underlying ELF descriptor.
 | 
						|
.It Fn gelf_getrel
 | 
						|
Retrieve an ELF relocation entry.
 | 
						|
.It Fn gelf_getrela
 | 
						|
Retrieve an ELF relocation entry with addend.
 | 
						|
.It Fn gelf_getshdr
 | 
						|
Retrieve an ELF Section Header Table entry from the underlying ELF descriptor.
 | 
						|
.It Fn gelf_getsym
 | 
						|
Retrieve an ELF symbol table entry.
 | 
						|
.El
 | 
						|
.It Queries
 | 
						|
.Bl -tag -compact
 | 
						|
.It Fn gelf_checksum
 | 
						|
Retrieves the ELF checksum for an ELF descriptor.
 | 
						|
.It Fn gelf_fsize
 | 
						|
Retrieves the size of the file representation of an ELF type.
 | 
						|
.It Fn gelf_getclass
 | 
						|
Retrieves the ELF class of an ELF descriptor.
 | 
						|
.El
 | 
						|
.It "Updating ELF Data"
 | 
						|
.Bl -tag -compact -width ".Fn gelf_update_shdr"
 | 
						|
.It Fn gelf_update_dyn
 | 
						|
Copy back an ELF
 | 
						|
.Sy .dynamic
 | 
						|
Table entry.
 | 
						|
.It Fn gelf_update_phdr
 | 
						|
Copy back an ELF Program Header Table entry.
 | 
						|
.It Fn gelf_update_rel
 | 
						|
Copy back an ELF relocation entry.
 | 
						|
.It Fn gelf_update_rela
 | 
						|
Copy back an ELF relocation with addend entry.
 | 
						|
.It Fn gelf_update_shdr
 | 
						|
Copy back an ELF Section Header Table entry.
 | 
						|
.It Fn gelf_update_sym
 | 
						|
Copy back an ELF symbol table entry.
 | 
						|
.El
 | 
						|
.El
 | 
						|
.Sh SEE ALSO
 | 
						|
.Xr elf 3 ,
 | 
						|
.Xr elf 5
 | 
						|
.Sh HISTORY
 | 
						|
The GELF(3) API first appeared in System V Release 4.
 | 
						|
This implementation of the API first appeared in
 | 
						|
.Fx 7.0 .
 | 
						|
.Sh AUTHORS
 | 
						|
The GElf API was implemented by
 | 
						|
.An "Joseph Koshy"
 | 
						|
.Aq jkoshy@FreeBSD.org .
 |