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
     returned 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()
     returns 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
	 defined 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	Ports 11.2	       February	5, 1998		    FreeBSD Ports 11.2


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

home | help