GELF(3ELF) ELF Library Functions GELF(3ELF)

NAME


gelf, gelf_checksum, gelf_fsize, gelf_getcap, gelf_getclass,
gelf_getdyn, gelf_getehdr, gelf_getmove, gelf_getphdr, gelf_getrel,
gelf_getrela, gelf_getshdr, gelf_getsym, gelf_getsyminfo,
gelf_getsymshndx, gelf_newehdr, gelf_newphdr, gelf_update_cap,
gelf_update_dyn, gelf_update_ehdr, gelf_update_getmove,
gelf_update_move, gelf_update_phdr, gelf_update_rel,
gelf_update_rela, gelf_update_shdr, gelf_update_sym,
gelf_update_symshndx, gelf_update_syminfo, gelf_xlatetof,
gelf_xlatetom - generic class-independent ELF interface

SYNOPSIS


cc [ flag... ] file... -lelf [ library... ]
#include <gelf.h>

long gelf_checksum(Elf *elf);


size_t gelf_fsize(Elf *elf, Elf_Type type, size_t cnt, unsigned ver);


int gelf_getcap(Elf_Data *src, int ndx, GElf_Cap *dst);


int gelf_getclass(Elf *elf);


GElf_Dyn *gelf_getdyn(Elf_Data *src, int ndx, GElf_Dyn *dst);


GElf_Ehdr *gelf_getehdr(Elf *elf, GElf_Ehdr *dst);


GElf_Move *gelf_getmove(Elf_Data *src, int ndx, GElf_Move *dst);


GElf_Phdr *gelf_getphdr(Elf *elf, int ndx, GElf_Phdr *dst);


GElf_Rel *gelf_getrel(Elf_Data *src, int ndx, GElf_Rel *dst);


GElf_Rela *gelf_getrela(Elf_Data *src, int ndx, GElf_Rela *dst);


GElf_Shdr *gelf_getshdr(Elf_Scn *scn, GElf_Shdr *dst);


GElf_Sym *gelf_getsym(Elf_Data *src, int ndx, GElf_Sym *dst);


GElf_Syminfo *gelf_getsyminfo(Elf_Data *src, int ndx, GElf_Syminfo *dst);


GElf_Sym *gelf_getsymshndx(Elf_Data *symsrc, Elf_Data *shndxsrc,
int ndx, GElf_Sym *symdst, Elf32_Word *shndxdst);


unsigned long gelf_newehdr(Elf *elf, int class);


unsigned long gelf_newphdr(Elf *elf, size_t phnum);


int gelf_update_cap(Elf_Data *dst, int ndx, GElf_Cap *src);


int gelf_update_dyn(Elf_Data *dst, int ndx, GElf_Dyn *src);


int gelf_update_ehdr(Elf *elf, GElf_Ehdr *src);


int gelf_update_move(Elf_Data *dst, int ndx, GElf_Move *src);


int gelf_update_phdr(Elf *elf, int ndx, GElf_Phdr *src);


int gelf_update_rel(Elf_Data *dst, int ndx, GElf_Rel *src);


int gelf_update_rela(Elf_Data *dst, int ndx, GElf_Rela *src);


int gelf_update_shdr(Elf_Scn *dst, GElf_Shdr *src);


int gelf_update_sym(Elf_Data *dst, int ndx, GElf_Sym *src);


int gelf_update_syminfo(Elf_Data *dst, int ndx, GElf_Syminfo *src);


int gelf_update_symshndx(Elf_Data *symdst, Elf_Data *shndxdst, int ndx,
GElf_Sym *symsrc, Elf32_Word shndxsrc);


Elf_Data *gelf_xlatetof(Elf *elf, Elf_Data *dst, const Elf_Data *src,
unsigned encode);


Elf_Data *gelf_xlatetom(Elf *elf, Elf_Data *dst, const Elf_Data *src,
unsigned encode);


DESCRIPTION


GElf is a generic, ELF class-independent API for manipulating ELF
object files. GElf provides a single, common interface for handling
32-bit and 64-bit ELF format object files. GElf is a translation
layer between the application and the class-dependent parts of the
ELF library. Thus, the application can use GElf, which in turn, will
call the corresponding elf32_ or elf64_ functions on behalf of the
application. The data structures returned are all large enough to
hold 32-bit and 64-bit data.


GElf provides a simple, class-independent layer of indirection over
the class-dependent ELF32 and ELF64 API's. GElf is stateless, and may
be used along side the ELF32 and ELF64 API's.


GElf always returns a copy of the underlying ELF32 or ELF64
structure, and therefore the programming practice of using the
address of an ELF header as the base offset for the ELF's mapping
into memory should be avoided. Also, data accessed by type-casting
the Elf_Data buffer to a class-dependent type and treating it like an
array, for example, a symbol table, will not work under GElf, and the
gelf_get functions must be used instead. See the EXAMPLE section.


Programs that create or modify ELF files using libelf(3LIB) need to
perform an extra step when using GElf. Modifications to GElf values
must be explicitly flushed to the underlying ELF32 or ELF64
structures by way of the gelf_update_ interfaces. Use of elf_update
or elf_flagelf and the like remains the same.


The sizes of versioning structures remain the same between ELF32 and
ELF64. The GElf API only defines types for versioning, rather than a
functional API. The processing of versioning information will stay
the same in the GElf environment as it was in the class-dependent ELF
environment.

List of Functions


gelf_checksum()
An analog to elf32_checksum(3ELF) and
elf64_checksum(3ELF).


gelf_fsize()
An analog to elf32_fsize(3ELF) and
elf64_fsize(3ELF).


gelf_getcap()
Retrieves the Elf32_Cap or Elf64_Cap
information from the capability table at
the given index. dst points to the location
where the GElf_Cap capability entry is
stored.


gelf_getclass()
Returns one of the constants ELFCLASS32,
ELFCLASS64 or ELFCLASSNONE.


gelf_getdyn()
Retrieves the Elf32_Dyn or Elf64_Dyn
information from the dynamic table at the
given index. dst points to the location
where the GElf_Dyn dynamic entry is stored.


gelf_getehdr()
An analog to elf32_getehdr(3ELF) and
elf64_getehdr(3ELF). dst points to the
location where the GElf_Ehdr header is
stored.


gelf_getmove()
Retrieves the Elf32_Move or Elf64_Move
information from the move table at the
given index. dst points to the location
where the GElf_Move move entry is stored.


gelf_getphdr()
An analog to elf32_getphdr(3ELF) and
elf64_getphdr(3ELF). dst points to the
location where the GElf_Phdr program header
is stored.


gelf_getrel()
Retrieves the Elf32_Rel or Elf64_Rel
information from the relocation table at
the given index. dst points to the location
where the GElf_Rel relocation entry is
stored.


gelf_getrela()
Retrieves the Elf32_Rela or Elf64_Rela
information from the relocation table at
the given index. dst points to the location
where the GElf_Rela relocation entry is
stored.


gelf_getshdr()
An analog to elf32_getshdr(3ELF) and
elf64_getshdr(3ELF). dst points to the
location where the GElf_Shdr section header
is stored.


gelf_getsym()
Retrieves the Elf32_Sym or Elf64_Sym
information from the symbol table at the
given index. dst points to the location
where the GElf_Sym symbol entry is stored.


gelf_getsyminfo()
Retrieves the Elf32_Syminfo or
Elf64_Syminfo information from the
relocation table at the given index. dst
points to the location where the
GElf_Syminfo symbol information entry is
stored.


gelf_getsymshndx()
Provides an extension to gelf_getsym() that
retrieves the Elf32_Sym or Elf64_Sym
information, and the section index from the
symbol table at the given index ndx.

The symbols section index is typically
recorded in the st_shndx field of the
symbols structure. However, a file that
requires ELF Extended Sections may record
an st_shndx of SHN_XINDEX indicating that
the section index must be obtained from an
associated SHT_SYMTAB_SHNDX section entry.
If xshndx and shndxdata are non-null, the
value recorded at index ndx of the
SHT_SYMTAB_SHNDX table pointed to by
shndxdata is returned in xshndx. See USAGE.


gelf_newehdr()
An analog to elf32_newehdr(3ELF) and
elf64_newehdr(3ELF).


gelf_newphdr()
An analog to elf32_newphdr(3ELF) and
elf64_newphdr(3ELF).


gelf_update_cap()
Copies the GElf_Cap information back into
the underlying Elf32_Cap or Elf64_Cap
structure at the given index.


gelf_update_dyn()
Copies the GElf_Dyn information back into
the underlying Elf32_Dyn or Elf64_Dyn
structure at the given index.


gelf_update_ehdr()
Copies the contents of the GElf_Ehdr ELF
header to the underlying Elf32_Ehdr or
Elf64_Ehdr structure.


gelf_update_move()
Copies the GElf_Move information back into
the underlying Elf32_Move or Elf64_Move
structure at the given index.


gelf_update_phdr()
Copies of the contents of GElf_Phdr program
header to underlying the Elf32_Phdr or
Elf64_Phdr structure.


gelf_update_rel()
Copies the GElf_Rel information back into
the underlying Elf32_Rel or Elf64_Rel
structure at the given index.


gelf_update_rela()
Copies the GElf_Rela information back into
the underlying Elf32_Rela or Elf64_Rela
structure at the given index.


gelf_update_shdr()
Copies of the contents of GElf_Shdr section
header to underlying the Elf32_Shdr or
Elf64_Shdr structure.


gelf_update_sym()
Copies the GElf_Sym information back into
the underlying Elf32_Sym or Elf64_Sym
structure at the given index.


gelf_update_syminfo()
Copies the GElf_Syminfo information back
into the underlying Elf32_Syminfo or
Elf64_Syminfo structure at the given index.


gelf_update_symshndx()
Provides an extension to gelf_update_sym()
that copies the GElf_Sym information back
into the Elf32_Sym or Elf64_Sym structure
at the given index ndx, and copies the
extended xshndx section index into the
Elf32_Word at the given index ndx in the
buffer described by shndxdata. See USAGE.


gelf_xlatetof()
An analog to elf32_xlatetof(3ELF) and
elf64_xlatetof(3ELF)


gelf_xlatetom()
An analog to elf32_xlatetom(3ELF) and
elf64_xlatetom(3ELF)


RETURN VALUES


Upon failure, all GElf functions return 0 and set elf_errno. See
elf_errno(3ELF)

EXAMPLES


Example 1: Printing the ELF Symbol Table



#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <libelf.h>
#include <gelf.h>

void
main(int argc, char **argv)
{
Elf *elf;
Elf_Scn *scn = NULL;
GElf_Shdr shdr;
Elf_Data *data;
int fd, ii, count;

elf_version(EV_CURRENT);

fd = open(argv[1], O_RDONLY);
elf = elf_begin(fd, ELF_C_READ, NULL);

while ((scn = elf_nextscn(elf, scn)) != NULL) {
gelf_getshdr(scn, &shdr);
if (shdr.sh_type == SHT_SYMTAB) {
/* found a symbol table, go print it. */
break;
}
}

data = elf_getdata(scn, NULL);
count = shdr.sh_size / shdr.sh_entsize;

/* print the symbol names */
for (ii = 0; ii < count; ++ii) {
GElf_Sym sym;
gelf_getsym(data, ii, &sym);
printf("%s\n", elf_strptr(elf, shdr.sh_link, sym.st_name));
}
elf_end(elf);
close(fd);
}


USAGE


ELF Extended Sections are employed to allow an ELF file to contain
more than 0xff00 (SHN_LORESERVE) section. See the Linker and
Libraries Guide for more information.

FILES


/lib/libelf.so.1
shared object


/lib/64/libelf.so.1
64-bit shared object


ATTRIBUTES


See attributes(7) for descriptions of the following attributes:


+--------------------+-----------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-----------------+
|Interface Stability | Stable |
+--------------------+-----------------+
|MT Level | MT-Safe |
+--------------------+-----------------+

SEE ALSO


elf(3ELF), elf32_checksum(3ELF), elf32_fsize(3ELF),
elf32_getehdr(3ELF), elf32_getphdr(3ELF), elf32_getshdr(3ELF),
elf32_newehdr(3ELF), elf32_newphdr(3ELF), elf32_xlatetof(3ELF),
elf32_xlatetom(3ELF), elf_errno(3ELF), libelf(3LIB), attributes(7)


Linker and Libraries Guide

June 8, 2004 GELF(3ELF)

tribblix@gmail.com :: GitHub :: Privacy