dlsym(3) Library Functions Manual dlsym(3) NUME dlsym, dlvsym - obine adresa unui simbol dintr-un obiect partajat sau executabil BIBLIOTECA Biblioteca de legaturi dinamice (libdl, -ldl) REZUMAT #include void *dlsym(void *restrict handle, const char *restrict symbol); #define _GNU_SOURCE #include void *dlvsym(void *restrict handle, const char *restrict symbol, const char *restrict version); DESCRIERE Funcia dlsym() primete un gestionar, ,,handle" al unui obiect partajat incarcat dinamic returnat de dlopen(3) impreuna cu un nume de simbol cu terminaie nula i returneaza adresa la care simbolul respectiv este incarcat in memorie. In cazul in care simbolul nu este gasit in obiectul specificat sau in oricare dintre obiectele partajate care au fost incarcate automat de dlopen(3) la incarcarea obiectului respectiv, dlsym() returneaza NULL; (cautarea efectuata de dlsym() se face in primul rand pe laime prin arborele de dependena al acestor obiecte partajate). In cazuri neobinuite (a se vedea NOTE), valoarea simbolului poate fi de fapt NULL. Prin urmare, o returnare NULL de la dlsym() nu trebuie neaparat sa indice o eroare. Modul corect de a distinge o eroare de un simbol a carui valoare este NULL este sa se apeleze dlerror(3) pentru a terge orice condiii de eroare vechi, apoi sa se apeleze dlsym() i apoi sa se apeleze din nou dlerror(3), salvand valoarea de intoarcere a acestuia intr-o variabila i sa se verifice daca aceasta valoare salvata nu este NULL. Exista doi pseudo-gestionari speciali care pot fi specificai in handle: RTLD_DEFAULT Gasete prima apariie a simbolului dorit utilizand ordinea implicita de cautare a obiectelor partajate. Cautarea va include simbolurile globale din executabil i din dependenele sale, precum i simbolurile din obiectele partajate care au fost incarcate dinamic cu fanionul RTLD_GLOBAL. RTLD_NEXT Gasete urmatoarea apariie a simbolului dorit in ordinea de cautare dupa obiectul curent. Acest lucru permite sa se furnizeze o invaluire in jurul unei funcii dintr-un alt obiect partajat, astfel incat, de exemplu, definiia unei funcii dintr-un obiect partajat preincarcat (a se vedea LD_PRELOAD in ld.so(8)) sa poata gasi i invoca funcia ,,reala" furnizata intr-un alt obiect partajat (sau, de asemenea, ,,urmatoarea" definiie a funciei in cazurile in care exista mai multe niveluri de preincarcare). Macroul de testare a caracteristicii _GNU_SOURCE trebuie sa fie definit pentru a obine definiiile RTLD_DEFAULT i RTLD_NEXT din . Funcia dlvsym() face acelai lucru ca dlsym(), dar primete un ir de versiuni ca argument suplimentar. VALOAREA RETURNATA In caz de succes, aceste funcii returneaza adresa asociata cu symbol. In caz de eec, acestea returneaza NULL; cauza erorii poate fi diagnosticata cu ajutorul dlerror(3). ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +--------------------------------------+---------------------+---------+ |Interfaa | Atribut | Valoare | +--------------------------------------+---------------------+---------+ |dlsym(), dlvsym() | Sigurana firelor | MT-Safe | +--------------------------------------+---------------------+---------+ STANDARDE dlsym() POSIX.1-2008. dlvsym() GNU. ISTORIC dlsym() glibc 2.0. POSIX.1-2001. dlvsym() glibc 2.1. NOTE Exista mai multe scenarii in care adresa unui simbol global este NULL. De exemplu, un simbol poate fi plasat la adresa zero de catre editorul de legaturi, prin intermediul unui script al editorului de legaturi sau cu ajutorul opiunii din linia de comanda --defsym. Simbolurile slabe ,,weak" nedefinite au, de asemenea, valoarea NULL. In cele din urma, valoarea simbolului poate fi rezultatul unei funcii de rezolvare a unei funcii indirecte GNU (IFUNC) care returneaza NULL ca valoare rezolvata. In acest din urma caz, dlsym() returneaza, de asemenea, NULL fara eroare. Cu toate acestea, in primele doua cazuri, comportamentul editorului de legaturi dinamice GNU este inconsecvent: procesarea realocarii reuete i se poate observa ca simbolul are valoarea NULL, dar dlsym() eueaza i dlerror() indica o eroare de cautare. Istoric Funcia dlsym() face parte din API dlopen, derivata din SunOS. Acest sistem nu dispune de dlvsym(). EXEMPLE A se vedea dlopen(3). CONSULTAI I dl_iterate_phdr(3), dladdr(3), dlerror(3), dlinfo(3), dlopen(3), ld.so(8) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 31 octombrie 2023 dlsym(3)