Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

dlsym - Adresse eines Symbols aus einem dlopen()-Objekt ermitteln

&pagelevel(3)&pagelevel

Syntax


#include <dlfcn.h>
void *dlsym(void *handle, const char *name);


Für den Aufruf in einer ASCII-Umgebung müssen Sie die Funktion __dlsym_ascii() mit denselben Parametern verwenden.

Beschreibung

Mit Hilfe von dlsym() können Prozesse die Adresse eines Symbols ermitteln, das in einem per dlopen()-Aufruf verfügbar gemachten Objekt definiert wurde.

handle bestimmt die Suchstrategie. Für handle sind folgende Angaben möglich:

  • Der Wert, der von einem dlopen()-Aufruf zurückgegeben und seitdem nicht über einen dlclose()-Aufruf freigegeben wurde.
  • RTLD_DEFAULT
    Es werden alle Objekte werden in der zeitlichen Reihenfolge ihres Ladens durchsucht.
  • RTLD_NEXT
    Es werden nur die Objekte durchsucht, die zeitlich nach dem Objekt geladen wurden, aus dem der Aufruf dlsym() abgesetzt wurde.
  • RTLD_SELF
    Zuerst wird das Objekt durchsucht, aus dem de Aufruf dlsym() abgesetzt wurde.
    Anschließend werden alle danach geladenen Objekte durchsucht.

name ist der Name des Symbols als Zeichenfolge.

Returnwert

Wenn handle nicht auf ein gültiges Objekt verweist oder wenn das angegebene Symbol in keinem der handle zugeordneten Objekte gefunden werden kann, gibt dlsym() der Wert NULL zurück.

Bei den Namen ist zu beachten, dass Großschreibung und das Ersetzen von ’_’ durch ’$’ beim Übersetzen der Objekte festgelegt werden (durch entsprechende Optionen beim Kommando cc).

Die Variable errno wird nicht gesetzt. Ein Fehlertext (Diagnoseinfo) kann über dlerror() ermittelt werden.

Beispiel

Das folgende Beispiel veranschaulicht, wie dlopen() und dlsym() für den Zugriff auf Funktionen oder Datenobjekte verwendet werden können. Zur Vereinfachung wurde die Überprüfung auf Fehler weggelassen.

void    *handle; 
int     *iptr, (*fptr)(int);

/* Das benoetigte Objekt oeffnen*/ 
handle = dlopen("/usr/home/me/libfoo.so.1",RTLD_LAZY);

/* Die Adresse von Funktionen und Datenobjekten suchen*/ 
fptr = (int (*)(int))dlsym(handle, "my_function"); 
iptr = (int *)dlsym(handle, "my_object");

/* Die Funktion aufrufen und den Wert des Integer als Parameter uebergeben*/ 
(*fptr)(*iptr);

Siehe auch

dlclose(), dlerror(), dlopen()