svcadm(8)을 검색하려면 섹션에서 8 을 선택하고, 맨 페이지 이름에 svcadm을 입력하고 검색을 누른다.
gelf_checksum(3elf)
gelf(3ELF) ELF Library Functions gelf(3ELF)
NAME
gelf, gelf_checksum, gelf_fsize, gelf_getancillary, gelf_getcap,
gelf_getchdr, 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_sign_range, gelf_update_ancillary, 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-inde‐
pendent 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, uint_t ver);
GElf_Ancillary *gelf_getancillary(Elf_Data *src, int ndx,
GElf_Ancillary *dst);
int gelf_getcap(Elf_Data *src, int ndx, GElf_Cap *dst);
GElf_Chdr *gelf_getchdr(Elf_Scn *scn, GElf_Chdr * 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);
void * gelf_newehdr(Elf *elf, int class);
void * gelf_newphdr(Elf *elf, size_t phnum);
int gelf_sign_range(Elf *elf, elf_sign_range_cb_func cb,
Elf_Signrange type, void *udata);
int gelf_update_ancillary(Elf_Data *dst, int ndx,
GElf_Ancillary *src);
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,
uint_t encode);
Elf_Data *gelf_xlatetom(Elf *elf, Elf_Data *dst, const Elf_Data *src,
uint_t 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 applica‐
tion. 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 sym‐
bol 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 envi‐
ronment.
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_getancillary()
Retrieves the Elf32_Ancillary or Elf64_Ancillary information from
the ancillary table at the given index. dst points to the location
where the GElf_Ancillary dynamic entry is stored.
gelf_getcap()
Retrieves the Elf32_Cap or Elf64_Cap information from the capabil‐
ity table at the given index. dst points to the location where the
GElf_Cap capability entry is stored.
gelf_getchdr()
An analog to elf32_getchdr(3ELF) and elf64_getchdr(3ELF). dst
points to the location where the GElf_Chdr header is stored.
gelf_getclass()
Returns one of the constants ELFCLASS32, ELFCLASS64 or ELFCLASS‐
NONE.
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 reloca‐
tion 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 reloca‐
tion 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 ta‐
ble 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_sign_range()
An analog to elf32_sign_range(3ELF) and elf64_sign_range(3ELF).
gelf_update_ancillary()
Copies the GElf_Ancillary information back into the underlying
Elf32_Ancillary or Elf64_Ancillary structure at the given index.
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 Oracle Solaris 11.4 Link‐
ers 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:
tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE TYPEAT‐
TRIBUTE VALUE _ Interface StabilityCommitted _ MT LevelMT-Safe
SEE ALSO
elf(3ELF), elf32_checksum(3ELF), elf32_fsize(3ELF),
elf32_getchdr(3ELF), elf32_getehdr(3ELF), elf32_getphdr(3ELF),
elf32_getshdr(3ELF), elf32_newehdr(3ELF), elf32_newphdr(3ELF),
elf32_sign_range(3ELF), elf32_xlatetof(3ELF), elf32_xlatetom(3ELF),
elf_errno(3ELF), libelf(3LIB), attributes(7)
Oracle Solaris 11.4 Linkers and Libraries Guide
Oracle Solaris 11.4 5 February 2019 gelf(3ELF)