NAME
gelf, gelf_checksum, gelf_fsize, gelf_getclass, gelf_getdyn,
gelf_getehdr, gelf_getphdr, gelf_getrel, gelf_getrela,
gelf_getshdr, gelf_getsym, gelf_getsyminfo, gelf_newehdr,
gelf_newphdr, gelf_update_dyn, gelf_update_ehdr,
gelf_update_phdr, gelf_update_rel, gelf_update_rela,
gelf_update_shdr, gelf_update_sym, gelf_update_syminfo,
gelf_xlatetof, gelf_xslatetom, - generic class-independent
ELF interface
SYNOPSIS
cc [flag ...] file ... -lelf [library ...]
#include <gelf.h>
long gelf_checksum(Elf *elf);
int gelf_getclass(Elf *elf);
size_t gelf_fsize(Elf *elf, Elf_Type type, size_t cnt,
unsigned ver);
GElf_Ehdr *gelf_getehdr(Elf *elf, GElf_Ehdr *dst);
int gelf_update_ehdr(Elf *elf, GElf_Ehdr *src);
unsigned long gelf_newehdr(Elf *elf, int class);
GElf_Phdr *gelf_getphdr(Elf *elf, int ndx, GElf_Phdr *src);
int gelf_update_phdr(Elf *elf, int ndx, GElf_Phdr *src);
unsigned long gelf_newphdr(Elf *elf, size_t phnum);
GElf_Shdr *gelf_getshdr(Elf_Scn *scn, Elf_Data *dst);
int gelf_update_shdr(Elf_Scn *scn, GElf_Shdr *src);
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);
GElf_Sym *gelf_getsym(Elf_Data *data, int ndx, GElf_Sym
*dst);
int gelf_update_sym(Elf_Data *dest, int ndx, GElf_Sym *src);
GElf_Dyn *gelf_getdyn(Elf_Data *src, int ndx, GElf_Dyn
*src);
int gelf_update_dyn(Elf_Data *src, int ndx, GElf_Dyn *src);
GElf_Rela *gelf_getrela(Elf_Data *src, int ndx, GElf_Rela
*dst);
int gelf_update_rela(Elf_Data *dst, int ndx, GElf_Rela
*src);
GElf_Rel *gelf_getrel(Elf_Data *src, int ndx, GElf_Rel
*dst);
int gelf_update_rel(Elf_Data *dst, int ndx, GElf_Rel *src);
GElf_Syminfo *gelf_getsyminfo(Elf_Data *src, int ndx,
GElf_Syminfo *dst);
int gelf_update_syminfo(Elf_Data *dst, int ndx, GElf_Syminfo
*src);
GElf_Move *gelf_getmove(Elf_Data *src, int ndx, GElf_Move
*dst);
int gelf_update_move(Elf_Data *dst, int ndx, GElf_Move
*src);
DESCRIPTION
GElf is a generic, ELF class-independent API, for manipulat-
ing ELF object files. GElf provides a single, common inter-
face 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 applica-
tion can use GElf, which in turn, will call the correspond-
ing 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 indirec-
tion over the class-dependent ELF32 and ELF64 APIs. 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 which 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 the
gelf_update_ interfaces. Use of elf_update or elf_flagelf
and the like remains the same.
The sizes of versioning structures remains the same between
ELF32 and ELF64. The GElf API only defines types for ver-
sioning, 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 environ-
ment.
List of Functions
gelf_checksum()
An analog to elf32_checksum(3ELF) and
elf64_checksum(3ELF).
gelf_getclass()
Returns one of the constants ELFCLASS32, ELFCLASS64 or
ELFCLASSNONE.
gelf_fsize()
An analog to elf32_fsize(3ELF) and elf64_fsize(3ELF).
gelf_getehdr()
An analog to elf32_getehdr(3ELF) and
elf64_getehdr(3ELF).
gelf_update_ehdr()
Copies the contents of the GElf_Ehdr ELF header to the
underlying Elf32_Ehdr or Elf64_Ehdr structure.
gelf_newehdr()
An analog to elf32_newehdr(3ELF) and
elf64_newehdr(3ELF).
gelf_getphdr()
An analog toelf32_getphdr(3ELF) and
elf64_getphdr(3ELF).
gelf_update_phdr()
Copies of the contents of GElf_Phdr program header to
underlying the Elf32_Phdr or Elf64_Phdr structure.
gelf_newphdr()
An analog to elf32_newphdr(3ELF) and
elf64_newphdr(3ELF).
gelf_getshdr()
An analog to elf32_getshdr(3ELF) and
elf64_getshdr(3ELF).
gelf_update_shdr()
Copies of the contents of GElf_Shdr section header to
underlying the Elf32_Shdr or Elf64_Shdr structure.
gelf_xlatetof()
An analog to elf32_xlatetof(3ELF) and
elf64_xlatetof(3ELF)
gelf_xlatetom()
An analog to elf32_xlatetom(3ELF) and
elf64_xlatetom(3ELF)
gelf_getsym()
Retrieves the Elf32_Sym or Elf64_Sym information from
the symbol table at the given index.
gelf_update_sym()
Copies the GElf_Sym information back into the underly-
ing Elf32_Sym or Elf64_Sym structure at the given
index.
gelf_getdyn()
Retrieves the Elf32_Dyn or Elf64_Dyn information from
the dynamic table at the given index.
gelf_update_dyn()
Copies the GElf_Dyn information back into the underly-
ing Elf32_Dyn or Elf64_Dyn structure at the given
index.
gelf_getrela()
Retrieves the Elf32_Rela or Elf64_Rela information
from the relocation table at the given index.
gelf_update_rela()
Copies the GElf_Rela information back into the under-
lying Elf32_Rela or Elf64_Rela structure at the given
index.
gelf_getrel()
Retrieves the Elf32_Rel or Elf64_Rel information from
the relocation table at the given index.
gelf_update_rel()
Copies the GElf_Rel information back into the underly-
ing Elf32_Rel or Elf64_Rel structure at the given
index.
gelf_getsyminfo()
Retrieves the Elf32_Syminfo or Elf64_Syminfo informa-
tion from the relocation table 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_getmove()
Retrieves the Elf32_Move or Elf64_Move information
from the move table at the given index.
gelf_update_move()
Copies the GElf_Move information back into the under-
lying Elf32_Move or Elf64_Move structure at the given
index.
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);
}
FILES
/usr/lib/libelf.so.1
Shared object.
/usr/lib/sparcv9/libelf.so.1
64-bit shared object.
/usr/lib//libelf.a
Archive library.
ATTRIBUTES
See attributes(5) for descriptions of the following attri-
butes:
____________________________________________________________
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
|_____________________________|_____________________________|
| MT Level | Safe |
|_____________________________|_____________________________|
SEE ALSO
elf(3ELF), elf32_checksum(3ELF), elf32_fsize(3ELF),
elf32_getehdr(3ELF), elf32_newehdr(3ELF),
elf32_getphdr(3ELF), elf32_newphdr(3ELF),
elf32_getshdr(3ELF), elf32_xlatetof(3ELF),
elf32_xlatetom(3ELF), elf_errno(3ELF), libelf(3LIB), attri-
butes(5)
|
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |