Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
DLADDR(3)	       FreeBSD Library Functions Manual		     DLADDR(3)

     dladdr -- find the	shared object containing a given address

     Standard C	Library	(libc, -lc)

     #include <dlfcn.h>

     dladdr(const void *addr, Dl_info *info);

     The dladdr() function queries the dynamic linker for information about
     the shared	object containing the address addr.  The information is	re-
     turned in the structure specified by info.	 The structure contains	at
     least the following members:

     const char	*dli_fname     The pathname of the shared object containing
			       the address.

     void *dli_fbase	       The base	address	at which the shared object is
			       mapped into the address space of	the calling

     const char	*dli_sname     The name	of the nearest run-time	symbol with a
			       value less than or equal	to addr.  When possi-
			       ble, the	symbol name is returned	as it would
			       appear in C source code.

			       If no symbol with a suitable value is found,
			       both this field and dli_saddr are set to	NULL.

     void *dli_saddr	       The value of the	symbol returned	in dli_sname.

     The dladdr() function is available	only in	dynamically linked programs.

     If	a mapped shared	object containing addr cannot be found,	dladdr() re-
     turns 0.  In that case, a message detailing the failure can be retrieved
     by	calling	dlerror().

     On	success, a non-zero value is returned.

     rtld(1), dlopen(3)

     The dladdr() function first appeared in the Solaris operating system.

     This implementation is bug-compatible with	the Solaris implementation.
     In	particular, the	following bugs are present:

     o	 If addr lies in the main executable rather than in a shared library,
	 the pathname returned in dli_fname may	not be correct.	 The pathname
	 is taken directly from	argv[0]	of the calling process.	 When execut-
	 ing a program specified by its	full pathname, most shells set argv[0]
	 to the	pathname.  But this is not required of shells or guaranteed by
	 the operating system.

     o	 If addr is of the form	_func, where func is a global function,	its
	 value may be an unpleasant surprise.  In dynamically linked programs,
	 the address of	a global function is considered	to point to its	pro-
	 gram linkage table entry, rather than to the entry point of the func-
	 tion itself.  This causes most	global functions to appear to be de-
	 fined within the main executable, rather than in the shared libraries
	 where the actual code resides.

     o	 Returning 0 as	an indication of failure goes against long-standing
	 Unix tradition.

FreeBSD	13.0		       February	5, 1998			  FreeBSD 13.0


Want to link to this manual page? Use this URL:

home | help