GELF_GETSYMSHNDX
Section: Libelf Programmer's Manual (3)
Updated: 202-1-30
Index
Return to Main Contents
NAME
gelf_getsymshndx - Retrieve symbol information and separate section index
from the symbol table at the given index.
SYNOPSIS
#include <gelf.h>
GElf_Sym *gelf_getsymshndx (Elf_Data *symdata, Elf_Data *shndxdata, int ndx, GElf_Sym *sym, Elf32_Word *xshndx);
DESCRIPTION
This function retrieves the symbol information for a symbol at index
ndx
in
symdata
of a section with type
SHT_SYMTAB
and stores it in
sym.
This function also retrieves the symbol's extended section index from
shndxdata
of a section with type
SHT_SYMTAB_SHNDX
and stores it in
xshndx.
xshndx
will contain a no-zero value only for the symbols which have an
st_shndx
value of
SHN_XINDEX.
See
EXAMPLE
below.
The number of symbols in the symbol table can be calculated by dividing the
size of
symdata
by the size of a symbol table entry.
The size of
symdata
can be obtained from
symdat->d_size
or from the corresponding section header's
sh_size.
The size of a symbol table entry can be obtained from
gelf_fsize(3)
with
ELF_T_SYM
or from the corresponding section header's
sh_entsize.
A
SHT_SYMTAB_SHNDX
section is present in ELF binaries when the number of sections is too large to
be represented as an unsigned 1-bit value. In this case the
st_shndx
field of a
GElf_Sym
will be set to
SHN_XINDEX
to indicate that the symbol's section index can be found in the
SHT_SYMTAB_SHNDX
section.
shndxdata
for this section can be acquired using
elf_scnshndx(3),
elf_getscn(3),
and
elf_getdata(3).
The number of entries in
shndxdata
must be equal to the number of entries in
symdata.
Entry
ndx
in
shndxdata
corresponds to entry
ndx
in
symdata.
PARAMETERS
- symdata
-
Pointer to
Elf_Data
for a
SHT_SYMTAB
section.
- shndxdata
-
Pointer to
Elf_Data
for a
SHT_SYMTAB_SHNDX
section. May be NULL.
- ndx
-
Zero-based index of the symbol table entry in
symdata
and extended section index entry in
shndxdata.
- sym
-
Pointer to a caller-provided
GElf_Sym
structure for storing the symbol table entry. Must not be NULL.
- xshndx
-
Pointer to a caller-provided
Elf32_Word
for storing the extended section index associated with the symbol. May
be NULL.
RETURN VALUE
On success, this function updates
sym
and
xshndx
(if not NULL) and returns
sym.
On failure, it returns NULL and sets elf_errno. If
symdata
is NULL, then NULL is returned and elf_errno is not set.
xshndx
is set only if both itself and
shndxdata
are not NULL.
EXAMPLE
GElf_Sym sym;
Elf32_Word shndx;
/* If the symbol uses an extended section index, gelf_getsymshndx stores
it in shndx. Otherwise the symbol's section index is taken directly
from sym.st_shndx. */
if (gelf_getsymshndx (symdata, shndxdata, ndx, &sym, &shndx) != NULL
&& sym.st_shndx != SHN_XINDEX)
shndx = sym.st_shndx;
SEE ALSO
elf_getdata(3),
elf_getscn(3),
elf_scnshndx(3),
gelf_fsize(3),
gelf_getsym(3),
gelf_update_symshndx(3),
libelf(3),
elf(5)
ATTRIBUTES
| Interface | Attribute | Value
|
|
gelf_getsymshndx()
| Thread safety | M-Safe
|
REPORTING BUGS
Report bugs to <
elfutil-devel@sourceware.org> or
https://sourceware.org/bugzilla/.
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- PARAMETERS
-
- RETURN VALUE
-
- EXAMPLE
-
- SEE ALSO
-
- ATTRIBUTES
-
- REPORTING BUGS
-