Dlsym 3 c funksjon

Dlsym 3 c funksjon
“Linux har kommet med mange av sine unike funksjoner for å utføre rutinemessige oppgaver. Dlsym () -funksjonen er en av dem. DLSYM () -funksjonsmålet er å finne adressen til et definert symbol spesifisert i et DLL (Dynamic Link Library) som er blitt gjort tilgjengelig via en DLOpen () -funksjonsanrop. Etter å ha lastet inn den dynamiske delte objektet (Common Link Library) -filen indikert med det null-terminerte strengfilnavnet, sender funksjonen DLOpen () en anonym "tilkobling" for det lastede objektet. Det navngitte symbolet blir sett opp i Dynamic Link Library (DLL) som er hentet av DLOpen () -metoden. I denne artikkelen vil vi snakke om bruken av DLSym ().

Hvis det ønskede symbolet ikke er til stede i den DLL, vil de avhengige DLL-ene for den DLL bli søkt etter det, etter noen avhengigheter av disse, og så videre på en bredde-første måte til ønsket symbol er funnet eller alle DLL-ene har blitt søkt etter dette formålet. Selv om sekvensen der avhengige DLL -er på samme nivå søkes er ubestemt, bestemmer denne søkeordren hvordan dupliseringssymboler i distinkte DLL -er vil bli identifisert. Vær oppmerksom på at lossede avhengige dynamiske biblioteker ikke vil bli lastet som en konsekvens av et DLSym () -søk etter avhengige DLLS. Bare DLL -ene som ble lastet som en komponent i DLOpen () Calls avhengige DLL -er vil bli skannet.”

RTLD_NOW: Hvis hele samlingen av avhengige DLL -er må gjøres tilgjengelig for påfølgende anrop til DLSym () -funksjonen, brukes dette flagget til å påkalle dynamiske koblingsbiblioteker.

Rtld_lazy: Når vi bruker dette flagget, kan vi ikke finne hvilke avhengige dynamiske koblingsbiblioteker som er lastet er ikke kjent.

RTLD Global: Nybelastede biblioteker kan bruke symbolene som er spesifisert av denne pakken for symbolbestemmelse.

RTLD_LOCAL: Siden ingen av flaggene er nevnt, er dette motsatt av RTLD Global og standard.

Her er syntaksen til DLSym () -kommandoen:

#inkludere
# void *dlsym (void *__ begrens__ handler, const char *__ begrens__ symbol_navn);

Overskriftsfilen der dlsym () -funksjonen er definert er . “Symbol_name” er karakterstrengen som er en representasjon av symbolets navn, og “Handler” er verdien oppnådd av en samtale til DLOpen () (som ennå ikke er returnert på forespørsel til DLClose ()).

Nullverdien returneres, hvis håndtaket ikke peker på en passende DLL som ble åpnet av DLOpen (). Nullverdien returneres av DLSym () -funksjonen hvis ingen DLL koblet til behandleren samsvarer med det navngitte symbolet (symbolnavnet).

Lag DLSym.C -fil ved hjelp av VIM Editor eller hvilken som helst redaktør etter eget valg, som kan omfatte Nano osv.

Skriv koden gitt i skjermbildet nedenfor til C -filen som ble opprettet i forrige trinn. Hodefilene er inkludert i de fire første kodelinjene i eksempelkoden nedenfor. Etter det blir hovedfunksjonen lansert, og innen hovedfunksjonen opprettes en håndterpeker av tomromstypen. Den foregående kodelinjen erklærer en karakterkodet peker av tomromstype.

Ved å bruke det påkalte vi DLOPEN -metoden og leverte RTLD -lat flagg sammen med plasseringen av .Så fil (som er en dynamisk delt fil i Linux). Handlervariabelen vil beholde resultatene av dlopen. Ved å returnere 1, avgjør neste linje om DLOPen vellykket lastet Dynamic Link -biblioteket. I tilfelle feil, er feilen skrevet på skjermen, og hovedfunksjonen er avsluttet.

Etter det betingede uttrykket, kaller vi nå Dlerror () -metoden for å fikse den eksisterende feilen. Så snart vi legger til 1 heltall ASCII til det kodede symbolet på karaktertypen som vi har definert, vil det ha verdien “Sett.”Lengden på strengen ble beregnet i neste linje og lagret i den kodede lengdevariabelen, som deretter ble brukt i for -sløyfen som ble brukt til avkoding. Vi bruker sluttsymbolet “0” for å avslutte koden etter for loop. Etter det utførte vi DLSYM () -metoden, passerte behandleren og dekodede kodeparametere, og utgangsvariabelen inkluderte resultatene.

Når du påkaller DLSym () -funksjonen for å kompilere en C -fil, skiller samlingenes prosess i en C -kompilator seg fra en standard samlingen -kommando. Du vil opprette programmet ved hjelp av følgende kommando hvis det var i en fil som heter “DLSEM.C ”:

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

Etter en vellykket samling opprettes utgangsfilen og gitt navnet DLSym.ute. Bare skriv inn kommandoen./dlsym.ut og treff Enter -tasten for å kjøre utdatafilen. Filens utdata vises på terminalskjermen i et operativsystem som ligner UNIX eller Linux.

Ved hjelp av VIM -redigereren har vi gjort en liten justering av C -filens siste linjer med koder. Utskriftserklæringen på slutten av hovedfunksjonen må erstattes med utgangen, som er blitt transformert til PUTS -funksjonen. I skjermens doble sitatmerker er teksten lagt til.

Sett nå koden igjen og se utdataene på terminalskjermen; Uten å bruke utskriftserklæringen får vi utdataene på skjermen ved å bruke utgangsverdien som blir endret til PUTS -funksjonen. Her er utdataene fra denne spesielle kodefilen vist ovenfor.

Konklusjon

Innenfor innledende avsnitt i denne artikkelen har vi diskutert bruken av DLSym () 3 C -funksjonen for å finne ut adressen til et spesifisert definert symbol i DLL. Vi har diskutert og utdypet to klare eksempler på C i Kali Linux -operativsystemet for dette. Begge eksemplene er veldig enkle, men veldig effektive samtidig og demonstrerer bruken av DLSym () -funksjonen veldig tydelig for bedre forståelse.