This is the mail archive of the glibc-linux@ricardo.ecn.wfu.edu mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Library mapping




Martin v. Loewis wrote:

>>I'm watching through /proc/<pid>/maps on my Linux 2.4.3 computers that 
>>the same program gets its libraries (and their data segments) mapped to 
>>different locations on virtual memory. The same OS configuration and 
>>libraries are installed on a (1) Pentium 225 and a (2) Pentium III.
>>
> 
> When you say "the same", do you mean "the very same", i.e. with no
> differences whatsoever in md5sums of all shared libraries? Including
> ld-linux.so.2?


Yes, as they come out of Mandrake 8.0 distribution.


> 
> 
>>I'm a compiling the program on (1) and executing on both of them. I'm 
>>expecting to see their /proc/<pid>/maps be the same for the same point 
>>in the program. But they are not. Might this be because of their 
>>hardware differences? 
>>
> 
> No, it is rather because differences in the environment (in a general
> sense). Things that may contribute:
> 
> - exact setting of the enviroment variables (in the strict sense of
>   execve)
> - size, contents, and layout of /etc/ld.so.cache
> - path name of each file that is being loaded
> - contents of each directory that is searched when loading shared libraries,
>   and exact order of entries returned by getdents(2)
> - value of cwd string
> 


I can see that there are many factors out of my control :(


> 
>>When a program compiled (non-statically), are the locations where
>>shared objects are mapped known at compile time or are they resolved
>>at load time by ld.so?
>>
> 
> They are resolved by ld.so, on a first-come-first-served basis.
> 
> 
>>Note: I'm doing some low level stuff to overwrite the data segments
>>for libraries after loading.
>>
> 
> Then you better use the source, Luke.


That's the best, however, this is required as I should be moving 
processes - hence no source code, only when they are running - to 
somewhere else and resume (PM stuff). I can actually save the contents 
of memory to disk and restart processes from there. Because, they get 
mapped to exact same locations, so I can mmap() over them.


Many problems arised when moved to another computer..


> 
> Regards,
> Martin
> 
> 


-- 
Muzaffer Ozakca
Researcher/Software Engineer  -  muzaffer.ozakca@bilten.metu.edu.tr
TUBITAK-Bilten-ODTU - Communication Systems and Comp. Networks Group
ODTU, Ankara, Turkey
http://www.bilten.metu.edu.tr/   tel: +90-312-210 1311


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]