Re: Memory Lay out - shared library

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 08/04/06, shivaligupta <shivaligupta308@xxxxxxxxx> wrote:
> Hi Hareesh!
>
> Thanks a lot for the help. But my doubt is not what u explained me but
> that how two diff processes uses the same shared library?
>
> Regards
> Shivali
>
> Hareesh Nagarajan wrote:
>
> > On 4/7/06, *shivaligupta* <shivaligupta308@xxxxxxxxx
> > <mailto:shivaligupta308@xxxxxxxxx>> wrote:
> >
> >     Where in memory is shared library loaded?
> >     i guess it should be in the process virtual address space only but if
> >     that is the case how another process which wants to use the same
> >     library
> >     comes to know that the library has already been loaded and how is it
> >     able to use that?
> >
> >
> >
> > Read the following link:
> >  http://www.tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
> >
> > But, to help you out a little, check this out:
> >
> > $ cat x.c
> > #include <stdio.h>
> >
> > main()
> > {
> >         printf("hit any key...");
> >         getchar();
> > }
> >
> > $ gcc x.c -ox
> > $ ./x
> >
> > $ readelf -a x | grep getchar
> > 0804960c  00000107 R_386_JUMP_SLOT   00000000   getchar
> >      1: 00000000   221 FUNC    GLOBAL DEFAULT  UND getchar@xxxxxxxxx (2)
> >     82: 00000000   221 FUNC    GLOBAL DEFAULT  UND getchar@@GLIBC_2.0
> >
> > $ readelf -a x | grep printf
> > 08049614  00000307 R_386_JUMP_SLOT   00000000   printf
> >      3: 00000000    57 FUNC    GLOBAL DEFAULT  UND printf@xxxxxxxxx (2)
> >     97: 00000000    57 FUNC    GLOBAL DEFAULT  UND printf@@GLIBC_2.0
> >
> > The addresses of printf and getchar are undefined and will be resolved
> > at run time.
> >
> > $readelf -a ./x
> >
> > [snip]
> > 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
> > [snip]
> >
> > With this hint, ld figures out it needs to load the shared library.
> > Let us run program ./x in one terminal and check its process map from
> > another.
> >
> > hareesh@salty:~$ pmap `pgrep ./x`
> > 11680:   ./x
> > 08048000      4K r-x--  /x
> > 08049000      4K rw---  /x
> > 40000000     88K r-x--  /ld-2.3.2.so <http://2.3.2.so> <--- Loader
> > 40016000      4K rw---  /ld-2.3.2.so <http://2.3.2.so>
> > 40017000     12K rw---    [ anon ]
> > 40022000   1192K r-x--  /libc-2.3.2.so <http://2.3.2.so> <--- glibc
> > (code section; perhaps)
> > 4014c000     36K rw---  /libc-2.3.2.so <http://2.3.2.so> <--- glibc
> > (data section; perhaps)
> > 40155000     12K rw---    [ anon ]
> > bfffe000      8K rw---    [ stack ]
> > ffffe000      4K -----    [ anon ]
> >  total     1364K
> >
> > --
> > c u
> >
> > ./hareesh
>
>
>
> --
> Kernelnewbies: Help each other learn about the Linux kernel.
> Archive:       http://mail.nl.linux.org/kernelnewbies/
> FAQ:           http://kernelnewbies.org/faq/
>
>

--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux