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)