Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ elf_update(3E) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

elf(3E)

elf_update(3E)                                               elf_update(3E)

NAME
     elfupdate - ELF-Deskriptor aktualisieren

SYNTAX
     cc [option ...] datei ... -lelf [bibliothek ...]

     #include <libelf.h>

     offt elfupdate(Elf *elf, ElfCmd cmd);

BESCHREIBUNG
     elfupdate() veranlaßt die Bibliothek zur Prüfung der Informationen,
     die mit dem ELF-Deskriptor elf verknüpft sind, und zur Neuberechnung
     der strukturellen Daten, die zur Generierung der Dateidarstellung not-
     wendig sind.

     cmd kann folgende Werte annehmen:

     ELFCNULL
          Dieser Wert teilt elfupdate() mit, die verschiedenen Werte neu
          zu berechnen und nur die Speicherstrukturen des ELF-Deskriptors
          zu aktualisieren. Alle modifizierten Strukturen werden mit dem
          ELFFDIRTY-Bit markiert. Ein Programm kann daher die strukturel-
          len Informationen aktualisieren und sie dann erneut überprüfen,
          ohne daß die Datei, die mit dem ELF- Deskriptor verknüpft ist,
          verändert wird. Da dies die Datei nicht ändert, kann der ELF-
          Deskriptor zum Lesen, Schreiben oder zu beidem geöffnet sein
          [siehe elfbegin(3E)].

     ELFCWRITE
          Enthält cmd diesen Wert, so geht elfupdate() genauso vor wie bei
          ELFCNULL und schreibt zusätzlich sämtliche markierten ("dirty")
          Informationen, die mit dem ELF-Deskriptor verknüpft sind, in die
          Datei. Wenn also ein Programm elfgetdata() oder elfflag()
          benutzt hat, um neue Informationen für den ELF-Deskriptor anzule-
          gen (oder alte Informationen zu aktualisieren), so werden diese
          Daten geprüft, abgestimmt, bei Bedarf umgesetzt [siehe
          elfxlate(3E)] und dann in die Datei geschrieben. Wenn Teile der
          Datei geschrieben werden, werden deren ELFFDIRTY-Bits gelöscht;
          dies bedeutet, daß diese Objekte nicht länger in die Datei
          geschrieben werden müssen [siehe elfflag(3E)]. Die Abschnittsda-
          ten werden in der Reihenfolge der Abschnittskopfeinträge
          geschrieben, und die Abschnittskopftabelle wird an das Dateiende
          geschrieben.

          Wurde der ELF-Deskriptor mit elfbegin() angelegt, muß er das
          Schreiben der Datei erlauben. Dies bedeutet, daß das entspre-
          chende Kommando für elfbegin() entweder ELFCRDWR oder
          ELFCWRITE sein muß.






Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

elf_update(3E)                                               elf_update(3E)

     Wenn elfupdate() erfolgreich ausgeführt wird, wird die Gesamtlänge
     der Dateidarstellung zurückgeliefert (nicht der Speicherdarstellung).
     Ansonsten ist ein Fehler aufgetreten, und die Funktion liefert -1.

     Beim Aktualisieren der internen Strukturen setzt elfupdate() selbst
     einige Komponenten. Die unten aufgelisteten Komponenten unterliegen
     der Verantwortung des Anwendungsprogramms und beinhalten diejenigen
     Werte, welche durch das Programm vorgegeben wurden.

                Komponente   |                    Hinweise
           __________________|______________________________________________
             eident[EIDATA]|  Bibliothek kontrolliert andere eident-Werte
             etype          |
             emachine       |
             eversion       |
  ELF-Kopf   eentry         |
             ephoff         |  nur bei Angabe von ELFFLAYOUT
             eshoff         |  nur bei Angabe von ELFFLAYOUT
             eflags         |
             eshstrndx      |
            _________________|______________________________________________

                    Komponente|               Hinweise
                   ___________|_____________________________________
                    pty      |  Das Anwendungsprogramm kontrolliert
                    poffset  |  alle Programmkopfeinträge
                    pvaddr   |
                    ppaddr   |
     Programmkopf   pfilesz  |
                    pmemsz   |
                    pflags   |
                    palign   |
                   ___________|_____________________________________

                       Komponente |             Hinweise
                    ______________|_________________________________
                      shname     |
                      shtype     |
                      shflags    |
                      shaddr     |
     Abschnittskopf   shoffset   |  nur bei Angabe von ELFFLAYOUT
                      shsize     |  nur bei Angabe von ELFFLAYOUT
                      shlink     |
                      shinfo     |
                      shaddralign|  nur bei Angabe von ELFFLAYOUT
                      shentsize  |
                     _____________|_________________________________







Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

elf_update(3E)                                               elf_update(3E)

                       Komponente|             Hinweise
                     ____________|_________________________________
                       dbuf     |
                       dtype    |
     Datendeskriptor   dsize    |
                       doff     |  nur bei Angabe von ELFFLAYOUT
                       dalign   |
                       dversion |
                      ___________|_________________________________

     Zu beachten ist, daß das Programm für zwei besonders wichtige Komponen-
     ten (neben den anderen) im ELF-Kopf verantwortlich ist. Die Komponente
     eversion kontrolliert die Version der Datenstrukturen, die in die
     Datei geschrieben werden. Ist die Version EVNONE, so verwendet die
     Bibliothek die eigene interne Version. Der Eintrag eident[EIDATA]
     kontrolliert die Datencodierung der Datei. Als Spezialfall darf dieser
     Wert ELFDATANONE annehmen, um die herkömmliche Datencodierung der loka-
     len Maschine auszuwählen. Ein Fehler tritt dann auf, wenn die herkömm-
     liche Dateicodierung keiner Dateicodierung entspricht, die die Biblio-
     thek kennt.

     Weiterhin ist zu beachten, daß das Programm für die Komponente
     shentsize des Abschnittskopfs verantwortlich ist. Obwohl die Biblio-
     thek diese Komponente für Abschnitte bekannten Typs setzt, ist nicht
     garantiert, daß der korrekte Wert für alle Abschnitte bekannt ist.
     Daher verläßt sich die Bibliothek darauf, daß das Programm die ent-
     sprechenden Werte für unbekannte Abschnittstypen selbst einträgt. Wenn
     die Eintragsgröße unbekannt oder nicht anwendbar ist, sollte der Wert
     auf Null gesetzt werden.

     Bei der Entscheidung, wie die Ausgabedatei erzeugt werden soll, rich-
     tet sich elfupdate() bei der Erzeugung der Ausgabeabschnitte nach den
     Ausrichtungen der einzelnen Datenpuffer. Der Datenpuffer mit der
     strengsten Ausrichtungsbeschränkung kontrolliert die Ausrichtung des
     gesamten Abschnitts. Falls notwendig, fügt die Bibliothek auch Leer-
     räume zwischen Puffern ein, um somit die korrekte Ausrichtung jedes
     Puffers zu garantieren.

HINWEISE
     Wie bereits erwähnt, übersetzt das Kommando ELFCWRITE bei Bedarf die
     Daten, bevor sie in die Datei geschrieben werden. Diese Übersetzung
     ist für das Anwendungsprogramm nicht immer transparent. Wenn ein Pro-
     gramm Zeiger für den Zugriff auf Daten einer Datei unterhält [siehe
     beispielsweise elfgetehdr(3E) und elfgetdata(3E)], sollte das Pro-
     gramm die Zeiger nach dem Aufruf von elfupdate() neu aufbauen.

     Wie unter elfbegin(3E) beschrieben, kann ein Programm eine COFF-Datei
     "aktualisieren", um das Abbild konsistent mit dem ELF-Format darstel-
     len zu können. Das Kommando ELFCNULL aktualisiert nur die Speiche-
     rabbildung; man kann das Kommando ELFCWRITE dazu verwenden, die
     Datei zu modifizieren. Absolute, ausführbare Dateien (a.out-Dateien)
     erfordern eine spezielle Ausrichtung, welche zwischen dem COFF- und


Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

elf_update(3E)                                               elf_update(3E)

     dem ELF-Format nicht beibehalten werden kann. Daher kann eine ausführ-
     bare COFF-Datei mit dem Kommando ELFCWRITE nicht aktualisiert werden
     (ELFCNULL ist jedoch erlaubt).

SIEHE AUCH
     elf(3E), elfbegin(3E), elfflag(3E), elffsize(3E), elfgetdata(3E),
     elfgetehdr(3E), elfgetshdr(3E), elfxlate(3E).















































Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026