This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: A question about dynamic linking
- From: Daniel Jacobowitz <drow at false dot org>
- To: Albert Miranda <m dot b dot albert at gmail dot com>
- Cc: libc-alpha <libc-alpha at sourceware dot org>
- Date: Wed, 15 Mar 2006 14:57:38 -0500
- Subject: Re: A question about dynamic linking
- References: <e246418e0603151140y47acae2xecb6341031cb8f05@mail.gmail.com>
On Wed, Mar 15, 2006 at 08:40:14PM +0100, Albert Miranda wrote:
> I'm working on a project related with the dynamic linker and I need to
> know which libraries have been loaded and where (in which base
> addresses) from the same program that needs them to avoid mmapping a
> library that's already been loaded.
>
> Exploring through ld.so.1 code I've seen there's a list of link_map
> structures that contains the information I need and is maintained
> during the life of the loaded program (I assume this is done to
> provide lazy binding), but when trying to access it through
> dl_rtld_map I'm (logically) unable to do it (gcc doesn't complain but
> ld.so.1 can't resolve the symbol).
>
> Is there any way to do this?
Yes. Instead of looking for the rtld map directly, go through
_DYNAMIC; find the DT_DEBUG tag, which will point to a structure
of type "struct r_debug". And that'll point to the link map chain.
--
Daniel Jacobowitz
CodeSourcery