ELF Dynamische Loader-Symbol-Suchreihenfolge

8

Was ist die Suchreihenfolge für die Symbolsuche beim Auflösen dynamischer Umlagerungen?

Beim Auflösen von Symbolen für eine gemeinsam genutzte Bibliothek sucht der Loader zuerst in der 'Haupt-ausführbaren Datei' (damit die ausführbare Datei die Definitionen überschreiben kann) oder was?

    
JohnTortugo 01.10.2012, 00:14
quelle

2 Antworten

9

Nach meinem Verständnis hat jedes ausführbare Objekt seinen eigenen "Lookup-Bereich":

  • Die ausführbare Hauptdatei ist normalerweise das erste Objekt im Suchbereich "global". Dies bedeutet, dass in der Hauptdatei definierte Symbole die in abhängigen gemeinsamen Bibliotheken überschreiben würden. Gemeinsame Objekte, die mit der Funktion LD_PRELOAD hinzugefügt werden, werden dem globalen Suchbereich direkt nach der Hauptdatei hinzugefügt.
  • Wenn jedoch das gemeinsam genutzte Objekt das Flag DF_SYMBOLIC verwendet, werden Symbolreferenzen, die aus diesem Objekt stammen, nach Definitionen im Objekt suchen, bevor im globalen Suchbereich gesucht wird.
  • Gemeinsame Objekte, die mit dlopen() geöffnet wurden, können eigene Abhängigkeiten haben. Wenn das Flag RTLD_GLOBAL beim Aufruf von dlopen() nicht gesetzt wurde, werden diese Abhängigkeiten zum Suchbereich für dieses Objekt hinzugefügt, beeinflussen jedoch nicht den globalen Suchbereich. Wenn das RTLD_GLOBAL -Flag an dlopen() übergeben wurde, wird das gemeinsame Objekt (und seine Abhängigkeiten) dem "globalen" Nachschlagebereich hinzugefügt, wodurch das Verhalten nachfolgender Symbolnachschlage geändert wird.

Ulrich Dreppers Leitfaden " Schreiben freigegebener Bibliotheken " wird empfohlen, zu diesem Thema zu lesen.

    
jkoshy 01.10.2012, 04:17
quelle
4
  

Beim Auflösen von Symbolen für eine gemeinsam genutzte Bibliothek sucht der Loader zuerst in der 'Haupt-ausführbaren Datei' (damit die ausführbare Datei die Definitionen überschreiben kann) oder was?

Ja genau. Der dynamische Lader hat eine verknüpfte Liste geladener ELF-Objekte (der Kopf der Liste ist _r_dynamic.r_map ) und durchsucht linear die dynamischen Symboltabellen von Objekten in dieser Liste, bis er die Symboldefinition findet, nach der er sucht.

Der Kopf der Liste zeigt immer auf die Hauptdatei. Wenn ein bestimmtes Symbol aus der Hauptdatei exportiert wird, dann "gewinnt" es (fast) immer (überschreibt andere Definitionen).

Beachten Sie jedoch, dass das Flag -Bsymbolic linker das Bild ein wenig verändert.

    
Employed Russian 01.10.2012 03:19
quelle

Tags und Links