DLSYM 3 C -Funktion

DLSYM 3 C -Funktion
„Linux hat viele seiner einzigartigen Funktionen für Routineaufgaben entwickelt. Die DLSYM () -Funktion ist eine von ihnen. Das Funktionsziel von DLSYM () besteht darin, die Adresse eines in einer DLL (Dynamic Link Library) angegebenen definierten Symbols zu finden, auf das über einen DLOPEN () -Funktionsaufruf zugänglich gemacht wurde. Nach dem Laden der Datei Dynamic Shared Object (Common Link Library), angegeben durch den Null-Terminat-String-Dateinamen, gibt die Funktion dlopen () eine anonyme „Verbindung“ für das geladene Objekt aus. Das benannte Symbol wird in der dynamischen Verbindungsbibliothek (DLL) nachgeschlagen, die von der DLOPEN () -Methode abgerufen wurde. In diesem Artikel werden wir über die Verwendung von DLSym () sprechen.

Wenn das gewünschte Symbol in dieser DLL nicht vorhanden ist wurde nach diesem Zweck gesucht. Obwohl die Sequenz, in der abhängige DLLs auf derselben Ebene gesucht werden. Beachten Sie, dass unbeladene abhängige dynamische Bibliotheken nicht als Folge einer DLSYM () -Suche nach abhängigen DLLs geladen werden. Nur die DLLs, die als Komponente der abhängigen DLLs des DLOPEN () CALL geladen wurden, werden gescannt.”

Rtld_now: Wenn die gesamte Sammlung abhängiger DLLs für nachfolgende Aufrufe der Funktion dlsym () zur Verfügung gestellt werden muss, wird dieses Flag zum Aufrufen dynamischer Verbindungsbibliotheken verwendet.

Rtld_lazy: Wenn wir dieses Flag verwenden, können wir nicht herausfinden, welche abhängigen dynamischen Verbindungsbibliotheken geladen sind.

RTLD Global: Neu geladene Bibliotheken können die von diesem Paket angegebenen Symbole zur Symbolbestimmung verwenden.

Rtld_local: Da keine Flagge erwähnt wird, ist dies das Gegenteil von RTLD Global und der Standard.

Hier ist die Syntax des Befehls dlsym ():

#enthalten
# void *dlsym (void *__ einschränkendem Handler, const char *__ einschränken __ symbol_name);

Die Header -Datei, in der die Funktion dlsym () definiert ist . "Symbol_name" ist die Zeichenzeichenfolge, die eine Darstellung des Namens des Symbols ist, und "Handler" ist der Wert, der durch einen Aufruf an dlopen () erhalten wurde (der noch nicht durch Anfrage an dlclose () zurückgegeben wurde).

Der Nullwert wird zurückgegeben, wenn der Griff nicht auf eine geeignete DLL hinweist, die von DLOPEN () geöffnet wurde, wird eröffnet (). Der Nullwert wird von der Funktion dlsym () zurückgegeben, wenn keine mit dem Handler verknüpfte DLL mit dem benannten Symbol (Symbolname) übereinstimmt.

Erstellen Sie das DLSym.c Datei mit VIM -Editor oder einem beliebigen Editor Ihrer Wahl, der Nano usw. umfassen kann.

Schreiben Sie den Code im folgenden Bildschirm auf die C -Datei im vorherigen Schritt. Die Header -Dateien sind in den ersten vier Codezeilen im folgenden Beispielcode enthalten. Anschließend wird die Hauptfunktion gestartet, und innerhalb der Hauptfunktion wird ein Handlerzeiger des Hohlraumtyps erstellt. Die vorhergehende Codezeile deklariert einen charaktercodierten Zeiger des Hohlraums.

Mit diesem Aufruf haben wir die DLOPEN -Methode aufgerufen und die RTLD Lazy Flag zusammen mit dem Ort des .Also Datei (eine dynamische gemeinsame Datei unter Linux). Die Handler -Variable hält die Ergebnisse von DLOPEN bei. Durch Rückkehr 1 bestimmt die nächste Zeile, ob der DLOPEN die dynamische Linkbibliothek erfolgreich geladen hat. Im Falle eines Fehlers wurde der Fehler auf dem Bildschirm geschrieben und die Hauptfunktion wurde beendet.

Nach dem bedingten Ausdruck nennen wir nun die Methode dlerror (), um den vorhandenen Fehler zu beheben. Sobald wir dem codierten Symbol des von uns definierten Zeichenstyps 1 Ganzzahl hinzufügen, wird es den Wert haben, den „Puts“ hat.”Die Länge der Saite wurde in der nächsten Zeile berechnet und in der codierten Längenvariable gespeichert, die dann in der für die Dekodierung verwendeten für Schleife verwendet wurde. Wir verwenden das Endsymbol "0", um den Code nach der For -Loop zu beenden. Anschließend haben wir die DLSYM () -Methode ausgeführt, die Parameter von Handler und dekodierten Code bestanden, und die Ausgangsvariable enthielt die Ergebnisse.

Beim Aufrufen der DLSYM () -Funktion zum Kompilieren einer C -Datei unterscheidet sich der Kompilierungsprozess in einem C -Compiler von einem Standard -Kompilierungsbefehl. Sie erstellen das Programm mit dem folgenden Befehl, wenn es in einer Datei mit dem Namen „DLSym.C":

$ gcc -rdynamic -o foo dlsym.c -ldl

Nach einer erfolgreichen Zusammenstellung wird die Ausgabedatei erstellt und den Namen DLSYM angegeben.aus. Geben Sie einfach den Befehl ein./dlsym.Aus und drücken Sie die Eingabetaste, um die Ausgabedatei auszuführen. Die Ausgabe der Datei wird auf dem Terminalbildschirm in einem Betriebssystem ähnlich wie UNIX oder Linux angezeigt.

Mit dem VIM -Editor haben wir eine kleine Anpassung an die letzten Codes -Zeilen der C -Datei vorgenommen. Die Druckanweisung am Ende der Hauptfunktion muss durch die Ausgabe ersetzt werden, die in die Puts -Funktion umgewandelt wurde. In den doppelten Zitatmarken des Bildschirms wurde der Text hinzugefügt.

Kompilieren Sie nun den Code erneut und sehen Sie die Ausgabe auf dem Terminalbildschirm. Ohne die Druckanweisung zu verwenden, erhalten wir die Ausgabe auf dem Bildschirm mit unserem Ausgabwert, der in die Puts -Funktion geändert wird. Hier ist die oben gezeigte Ausgabe dieser bestimmten Codedatei.

Abschluss

Innerhalb des Einführungsabsatzes dieses Artikels haben wir die Verwendung der DLSYM () 3 C -Funktion erörtert, um die Adresse eines angegebenen definierten Symbols in DLL herauszufinden. Wir haben zwei klare Beispiele von C im Kali -Linux -Betriebssystem dafür diskutiert und ausgearbeitet. Beide Beispiele sind sehr einfach und dennoch sehr effizient gleichzeitig und demonstrieren die Verwendung der DLSYM () -Funktion sehr deutlich, um ein besseres Verständnis zu erhalten.