NAME
dladdr — get
information relating to an address
SYNOPSIS
#include
<dlfcn.h>
int dladdr(const void *restrict addr, Dl_info_t *restrict dlip);
DESCRIPTION
The dladdr () function shall determine
whether the address specified by addr is located within
the address range occupied by a mapped object. The mapped objects examined
shall include any executable object files that have previously been loaded
by a call to dlopen(3) and for which
dlclose(3) has not subsequently been called, and any
shared library files that were loaded as dependencies of the executable file
from which the current process image was loaded; they may also include any
executable object files that have previously been loaded by a call to
dlopen(3) and for which dlclose(3) has
subsequently been called, the executable file from which the current process
image was loaded, and implementation-defined additional mapped objects (for
example, all regular files mapped using mmap(3) might be
included). If the specified address is within the mapped address range of
one of these mapped objects and the object contains a symbol table, the
symbol table shall be searched for a symbol (a function identifier or a data
object identifier) that has the largest address less than or equal to the
specified address.
If the address specified by addr is within the mapped address range of one of the examined mapped objects, the structure pointed to by dlip shall be populated as follows:
- The value of the dli_fname member shall be set to point to the pathname of the mapped object. (This might no longer resolve to the file that was mapped, for example if it was a link that has subsequently been removed or renamed.)
- The value of the dli_fbase member shall be set to the base of the address range occupied by the mapped object.
- The value of the dli_sname member shall be set to point to the name of the symbol that has the largest address less than or equal to the specified address, or to a null pointer if no such symbol was found.
- If dli_sname is set to a null pointer, the value of the dli_saddr member shall also be set to a null pointer. Otherwise, if dli_sname names a function identifier, dli_saddr shall be set to the address of the function converted from type pointer to function to type pointer to void; otherwise, dli_saddr shall be set to the address of the data object named by dli_sname converted from a pointer to the type of the data object to a pointer to void.
RETURN VALUE
Upon successful completion, a non-zero value shall be returned. If the specified address is not located within the address range occupied by an examined mapped object, or if an error occurs, zero shall be returned. More detailed diagnostic information shall be available through dlerror(3).
ERRORS
No errors are defined.
EXAMPLES
None.
APPLICATION USAGE
The Dl_info_t members may point to addresses within the mapped object. These pointers can become invalid if the object is unmapped (for example, loaded executable objects may be unloaded by dlclose(3)).
If dli_sname names a function identifier, the value of dli_saddr can be converted back to type pointer to function using a cast in the manner shown in the dlsym(3) EXAMPLES section. Note that this conversion is not defined by the ISO C standard. This standard requires this conversion to work correctly on conforming implementations.
RATIONALE
None.
FUTURE DIRECTIONS
None.
SEE ALSO
dlclose(3), dlerror(3), dlopen(3), dlsym(3)
XBD <dlfcn.h>
CHANGE HISTORY
First released in Issue 8.