DLADDR(3C)              Standard C Library Functions              DLADDR(3C)
NAME
       dladdr, dladdr1 - translate address to symbolic information
SYNOPSIS
       #include <dlfcn.h>       
int dladdr(
void *address, 
Dl_info_t *dlip);       
int dladdr1(
void *address, 
Dl_info_t *dlip, 
void **info, 
int flags);
DESCRIPTION
       The 
dladdr() and 
dladdr1() functions determine if the specified       
address is located within one of the mapped objects that make up the
       current applications address space. An address is deemed to fall
       within a mapped object when it is between the base address, and the       
_end address of that object. See NOTES. If a mapped object fits this
       criteria, the symbol table made available to the runtime linker is
       searched to locate the nearest symbol to the specified address.  The
       nearest symbol is one that has a value less than or equal to the
       required address.
       The 
Dl_info_t structure must be preallocated by the user. The
       structure members are filled in by 
dladdr(), based on the specified       
address.  The 
Dl_info_t structure includes the following members:
             const char    *dli_fname;
             void          *dli_fbase;
             const char    *dli_sname;
             void          *dli_saddr;
       The 
Dl_info_t members provide the following information.       
dli_fname                    Contains a pointer to the filename of the containing
                    object.       
dli_fbase                    Contains the base address of the containing object.       
dli_sname                    Contains a pointer to the symbol name that is nearest to
                    the specified address.  This symbol either represents
                    the exact address that was specified, or is the nearest
                    symbol with a lower address.       
dli_saddr                    Contains the actual address of the symbol pointed to by                    
dli_sname.
       The 
dladdr1() function provides for addition information to be
       returned as specified by the 
flags argument:       
RTLD_DL_SYMENT                          Obtain the 
ELF symbol table entry for the matched
                          symbol. The 
info argument points to a symbol
                          pointer as defined in <
sys/elf.h> (
Elf32_Sym                          **info or 
Elf64_Sym **info). Most of the
                          information found in an ELF symbol can only be
                          properly interpreted by the runtime linker.
                          However, there are two fields that contain
                          information useful to the caller of 
dladdr1(): The                          
st_size field contains the size of the referenced
                          item. The 
st_info field provides symbol type and
                          binding attributes. See the 
Linker and Libraries                          Guide for more information.       
RTLD_DL_LINKMAP                          Obtain the 
Link_map for the matched file. The 
info                          argument points to a 
Link_map pointer as defined
                          in <
sys/link.h> (
Link_map **info).
RETURN VALUES
       If the specified 
address cannot be matched to a mapped object, a 
0 is
       returned. Otherwise, a non-zero return is made and the associated       
Dl_info_t elements are filled.
USAGE
       The 
dladdr() and 
dladdr1() functions are one of a family of functions
       that give the user direct access to the dynamic linking facilities.
       These facilities are available to dynamically-linked processes only.
       See 
Linker and Libraries Guide.
ATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +---------------+-----------------+
       |ATTRIBUTE TYPE | ATTRIBUTE VALUE |
       +---------------+-----------------+
       |MT-Level       | MT-Safe         |
       +---------------+-----------------+
SEE ALSO
       ld(1), 
dlclose(3C), 
dldump(3C), 
dlerror(3C), 
dlopen(3C), 
dlsym(3C),       
attributes(7)       Linker and Libraries GuideNOTES
       The 
Dl_info_t pointer elements point to addresses within the mapped
       objects. These pointers can become invalid if objects are removed
       prior to these elements use. See 
dlclose(3C).
       If no symbol is found to describe the specified address, both the       
dli_sname and 
dli_saddr members are set to 
0.
       If the address specified exists within a mapped object in the range
       between the base address and the address of the first global symbol
       in the object, the reserved local symbol 
_START_ is returned. This
       symbol acts as a label representing the start of the mapped object.
       As a label, this symbol has no size. The 
dli_saddr member is set to
       the base address of the associated object. The 
dli_sname member is
       set to the symbol name 
_START_. If the flag argument is set to       
RTLD_DL_SYMENT, symbol information for 
_START_ is returned.
       If an object is acting as a filter, care should be taken when
       interpreting the address of any symbol obtained using a handle to
       this object. For example, using 
dlsym(3C) to obtain the symbol 
_end       for this object, results in returning the address of the symbol 
_end       within the filtee, not the filter. For more information on filters
       see the 
Linker and Libraries Guide.
                              February 17, 2023                   DLADDR(3C)