elf_getscn(3E) elf_getscn(3E)
NAME
elfgetscn, elfndxscn, elfnewscn, elfnextscn - Abschnittsinforma-
tionen lesen
SYNTAX
cc [option ...] datei ... -lelf [bibliothek ...]
#include <libelf.h>
ElfScn *elfgetscn(Elf *elf, sizet index);
sizet elfndxscn(ElfScn *scn);
ElfScn *elfnewscn(Elf *elf);
ElfScn *elfnextscn(Elf *elf, ElfScn *scn);
BESCHREIBUNG
Diese Funktionen bieten einen indizierten und sequentiellen Zugriff
auf die Abschnitte, die zu dem ELF-Deskriptor elf gehören. Wenn ein
Programm eine neue Datei erstellt, liegt es in dessen Verantwortung,
zunächst einen ELF-Kopf für die Datei zu erzeugen, bevor Abschnitte
definiert werden; siehe dazu auch elfgetehdr(3E).
elfgetscn() erwartet in der Abschnittskopftabelle einer Datei einen
Index und liefert als Ergebnis eines Abschnittsdeskriptor. Bitte
beachten Sie, daß der erste "echte" Abschnitt den Index 1 hat. Ein
Programm kann zwar einen Abschnittsdeskriptor für einen Abschnitt mit
Index 0 (SHNUNDEF, der undefinierte Abschnitt) erhalten, jedoch ent-
hält dieser Abschnitt keine Daten, und der Abschnittskopf ist "leer"
(aber vorhanden). Wenn der angegebene Abschnitt nicht existiert, ein
Fehler auftritt, oder wenn elf gleich Null ist, liefert elfgetscn()
einen Nullzeiger als Ergebnis.
elfnewscn() erzeugt einen neuen Abschnitt und hängt ihn an das Ende
der Liste für elf. Da der SHNUNDEF-Abschnitt benötigt wird, ihn die
Anwendungen jedoch nicht "interessieren", erzeugt ihn die Bibliothek
automatisch. Der erste Aufruf von elfnewscn() für einen ELF-Deskrip-
tor ohne existierende Abschnitte liefert deshalb einen Deskriptor für
Abschnitt 1. Wenn ein Fehler auftritt, oder wenn elf gleich Null ist,
liefert elfnewscn() einen Nullzeiger als Ergebnis zurück.
Nachdem ein neuer Abschnittsdeskriptor erzeugt wurde, kann ein Pro-
gramm mit Hilfe von elfgetshdr() den neu erzeugten, "sauberen"
Abschnittskopf anfordern. Dem neuen Abschnittsdeskriptor sind keine
Daten zugeordnet [siehe auch elfgetdata(3E)]. Wenn ein neuer
Abschnitt auf diese Weise erzeugt wird, so aktualisiert die Bibliothek
die Komponente eshnum des ELF-Kopfes und setzt das ELFFDIRTY-Bit
für den Abschnitt [siehe elfflag(3E)]. Bei der Erstellung einer neuen
Datei liegt es im Verantwortungsbereich des Programms, daß zunächst
ein ELF-Kopf für die Datei angelegt wird [siehe elfgetehdr(3E)] und
erst danach neue Abschnitte erzeugt werden.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
elf_getscn(3E) elf_getscn(3E)
elfnextscn() erwartet einen Deskriptor für einen bereits existieren-
den Abschnitt scn und liefert als Ergebnis einen Abschnittsdeskriptor
für den nächsthöheren Abschnitt. Durch die Verwendung von Null für scn
erhält man einen Abschnittsdeskriptor für den Abschnitt mit Index 1
(der Abschnitt mit Index SHNUNDEF wird dabei übersprungen). Wenn
keine weiteren Abschnitte vorhanden sind, oder wenn ein Fehler auf-
tritt, liefert elfnextscn() als Ergebnis einen Nullzeiger.
elfndxscn() erwartet einen Deskriptor eines existierenden Abschnitts
scn und liefert als Ergebnis dessen Index in der Abschnittstabelle.
Wenn scn gleich Null ist, oder wenn ein Fehler auftritt, liefert
elfndxscn() den Wert SHNUNDEF als Ergebnis.
BEISPIELE
Im folgenden Beispiel wird sequentiell auf die Abschnitte einer Datei
zugegriffen. Mit jedem Durchlauf der Schleife wird ein Abschnitt der
Datei bearbeitet; die Schleife endet, wenn alle Abschnitte bearbeitet
wurden.
scn = 0;
while ((scn = elfnextscn(elf, scn)] != 0)
{
/* Abschnitt bearbeiten */
}
SIEHE AUCH
elf(3E), elfbegin(3E), elfflag(3E), elfgetdata(3E),
elfgetehdr(3E), elfgetshdr(3E).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98