Most of the library text is shared, yes. But if the library is loaded at different addresses, then the functions and variables will have different memory addresses. So pointers to the functions and variables will need to be fixed up to point at the correct place. This is the relocation process and results in portions of the library text being modified for the app and hence not being shared.
As the article explained, the prelink process tries to do this relocation ahead of time so different apps can use the same library text unmodified (and hence share it completely), but this means that the load addresses of libraries are not randomised between different processes.
Copyright © 2017, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds