elf_rand —
provide sequential access to the next archive
member
ELF Access Library (libelf, -lelf)
#include
<libelf.h>
off_t
elf_rand(
Elf
*archive,
off_t
offset);
The
elf_rand() function causes the ELF descriptor
archive to be adjusted so that the next call
to
elf_begin(3) will
provide access to the archive member at byte offset
offset in the archive. Argument
offset is the byte offset from the start of
the archive to the beginning of the archive header for the desired member.
Archive member offsets may be retrieved using the
elf_getarsym(3)
function.
Function
elf_rand() returns
offset if successful or zero in case of an
error.
To process all the members of an archive use:
off_t off;
Elf *archive, *e;
...
cmd = ELF_C_READ;
archive = elf_begin(fd, cmd, NULL);
while ((e = elf_begin(fd, cmd, archive)) != (Elf *) 0)
{
... process `e' here ...
elf_end(e);
off = ...new value...;
if (elf_rand(archive, off) != off) {
... process error ...
}
}
elf_end(archive);
To rewind an archive, use:
Elf *archive;
...
if (elf_rand(archive, SARMAG) != SARMAG) {
... error ...
}
Function
elf_rand() may fail with the following
errors:
-
-
- [
ELF_E_ARGUMENT
]
- Argument archive was
null.
-
-
- [
ELF_E_ARGUMENT
]
- Argument archive was not a
descriptor for an ar(1)
archive.
-
-
- [
ELF_E_ARCHIVE
]
- Argument offset did not
correspond to the start of an archive member header.
ar(1),
elf(3),
elf_begin(3),
elf_end(3),
elf_getarsym(3),
elf_next(3),
gelf(3)