dladdr(3) Library Functions Manual dladdr(3) dladdr, dladdr1 - LIBRARY Dynamic linking library (libdl, -ldl) #define _GNU_SOURCE #include int dladdr(const void *addr, Dl_info *info); int dladdr1(const void *addr, Dl_info *info, void **extra_info, int flags); dladdr() , , addr. , dladdr() , addr. Dl_info: typedef struct { const char *dli_fname; /* , */ void *dli_fbase; /* , */ const char *dli_sname; /* , addr */ void *dli_saddr; /* dli_sname */ } Dl_info; , addr, , dli_sname dli_saddr NULL. dladdr1() dladdr(), extra_info. , flags, : RTLD_DL_LINKMAP Obtain a pointer to the link map for the matched file. The extra_info argument points to a pointer to a link_map structure (i.e., struct link_map **), defined in as: struct link_map { ElfW(Addr) l_addr; /* Difference between the address in the ELF file and the address in memory */ char *l_name; /* Absolute pathname where object was found */ ElfW(Dyn) *l_ld; /* Dynamic section of the shared object */ struct link_map *l_next, *l_prev; /* Chain of loaded objects */ /* Plus additional fields private to the implementation */ }; RTLD_DL_SYMENT ELF . extra_info -- : const ElfW(Sym) **. ElfW() ELF, . , 64- ElfW(Sym) Elf64_Sym, : typedef struct { Elf64_Word st_name; /* */ unsigned char st_info; /* */ unsigned char st_other; /* */ Elf64_Section st_shndx; /* */ Elf64_Addr st_value; /* */ Elf64_Xword st_size; /* */ } Elf64_Sym; st_name -- . st_info . ELF64_ST_TYPE(st_info) ( ELF32_ST_TYPE(), 32- ), : STT_NOTYPE STT_OBJECT STT_FUNC STT_SECTION , STT_FILE Symbol's name is filename STT_COMMON STT_TLS STT_GNU_IFUNC st_info ELF64_ST_BIND(st_info) ( ELF32_ST_BIND(), 32- ), : STB_LOCAL STB_GLOBAL STB_WEAK STB_GNU_UNIQUE st_other , ELF64_ST_VISIBILITY(st_info) ( ELF32_ST_VISIBILITY(), 32- ), : STV_DEFAULT STV_INTERNAL , STV_HIDDEN STV_PROTECTED , . , addr, , , info->dli_sname info->dli_saddr NULL. , addr, , 0. dlerror(3). attributes(7). +----------------------------+----------------------------------------------------------+--------------------------+ | | | | +----------------------------+----------------------------------------------------------+--------------------------+ |dladdr(), dladdr1() | | MT-Safe | +----------------------------+----------------------------------------------------------+--------------------------+ GNU. dladdr() glibc 2.0. dladdr1() glibc 2.3.3. Solaris. , dladdr(), . ( , i386- x86-64), dli_fname dli_fbase , dladdr(), , , . , , plt ( ) ( ). , : gcc(1) , got ( ) dladdr(). . dl_iterate_phdr(3), dlinfo(3), dlopen(3), dlsym(3), ld.so(8) Yuri Kozlov ; GNU 3 , . . , , . Linux man-pages 6.06 31 2023 . dladdr(3)