1 / 24

Linking and Loading

Linking and Loading. Fred Prussack CS 518. L&L: Overview. Wake-up Questions Terms and Definitions / General Information Loading Linking Static vs. Dynamic ELF Other Linking Information/Processing References. L&L: Topics Not Covered. Windows Alternate binary file formats

libba
Télécharger la présentation

Linking and Loading

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Linking and Loading Fred Prussack CS 518

  2. L&L: Overview • Wake-up Questions • Terms and Definitions / General Information • Loading • Linking • Static vs. Dynamic • ELF • Other Linking Information/Processing • References

  3. L&L: Topics Not Covered • Windows • Alternate binary file formats • Different versions of glibc • Different versions of the kernel (from 2.4)

  4. L&L: Questions for the Sleepy • What is the name of the compile time linker in Linux? • ld • What is the name of the run-time linker in Linux? • ld.so • Where is the loader located in Linux? • Part kernel / part ld.so

  5. L&L: Terms • Linking • Taking object files and creating loadable modules with correct references to required libraries, data, and procedures • Loading • Placing a program image into main memory for execution

  6. L&L: General Information • Static libraries generally named xxx.a (archives) • Dynamic libraries generally named xxx.so (shared objects) • Object files generally named xxx.o • ELF: Executable and Linking Format. Currently the most common object file format on Linux systems. Other formats: a.out, COFF, etc…

  7. L&L: Static vs. Dynamic • Fully statically compiled executables • Provide for faster load->execution time due to no run-time linking requirement • Generate larger executables requiring more disk space • Executables with dynamic dependencies • Require run-time linking and thus potential time implications • Allows for easier and better code re-use

  8. L&L: Loading do_execve() Searches all the registered binary handlers search_binary_handler Loads current binary and elf interpreter load_elf_binary sets up correct registers start_thread Question: What does the instruction pointer have in it now? Answer: Entry point of the ELF interpreter

  9. L&L: Loading/Linking • At this point ld.so now has control • Determine what libraries need to be loaded for this binary • Determine dependencies for these libraries • In what order are these loaded and what type of list is produced from this dependency list?

  10. L&L: Linking • Basic job to clean up unresolved symbols • At compile time this can be accomplished by executing ld with object files to produce an executable • At run-time this is accomplished by loading all required shared libraries (.so’s) and fixing unresolved symbols found in the libraries

  11. L&L: Dynamic Linking • Load Time Dynamic Linking Done By ld.so • Most likely on your system it is ld-linux.so which links to ld-2.3.2.so • All possibly resolved symbols are resolved during compilation/first link (run of ld). Remaining unresolved symbols are done at time of load • Lazy Binding (LD_BIND_NOW) • Run Time Dynamic (inline) Linking • Allows applications to, during run time, open shared object files and execute their functions • <dlfcn.h>

  12. L&L: [more] Questions for the Sleepy • In what package is ld.so distributed and built from? • Glibc • Can gcc be made to not link files automatically? • Yes, of course! Use the –c option.

  13. L&L: ELF File Format • Currently the standard binary format for Linux since the late 90’s. Created in late 80’s. • Three types of object files • Shared Object Files (.so; shared object file) • Relocatable Object Files (.o; object file) • Executable Object Files (executable binary file) • First 4 characters of this type of file is [backspace (ascii 127)]ELF

  14. L&L: ELF File Format • First the ELF Header – 52 bytes in length on a 32 bit system • Sections and Segments for libraries and binaries • Various ELF segments • text: program instructions • data: initialized data • plt: procedure linkage table • got: global offset table • Checking for NEEDED entries in the dynamic segment will let ld know what it needs to load

  15. L&L: ld.so & Library Location • ld.so must be able to correctly locate the identified libraries in the executable. It does this by looking for them in the following order: • DT_RPATH (-rpath-link option) • Section in ELF file • LD_LIBRARY_PATH • Environment Variable • /etc/ld.so.cache • Compiled list of files to load • /lib; /usr/lib • /etc/ld.so.conf

  16. L&L: ld.so processing • Loop all the program headers to find necessary info • PHDR (program header): where the program headers start; This must be found first. • DYNAMIC: indicates where to find the dynamic segment (what must be loaded) • NEEDED: Name of file needed • INTERP: used to find the interpreter – which generally turns out to be ld.so

  17. L&L: ld.so processing • Load all required libraries found in NEEDED portions of the DYNAMIC segment • Get all necessary information from library • Dynamic header; phdr; load header

  18. L&L: ld.so info Read-Only Read-Write

  19. L&L: ld.so processing • What about when we actually call a function that hasn’t been loaded? • First need to resolve addressing issues • Probably best to permanently fix them • Then we need to call the actual procedure

  20. L&L: ld.so processing Next Procedure Run PLT0: pushl GOT + 4 jmp *GOT + 8 PLTN: jmp *GOT+n push #reloc_offset jmp PLT0 library Routine to fix GOT then jump to procedure after locating correct symbol reloc_offset Stack Procedure Start Loc Question: What is the name of the fix routine? Answer: fixup

  21. L&L: ld.so misc. info • You can run ld.so from the command line with an executable • This provides a great ability to test out new ld.so’s if necessary • /lib/ld-linux.so [executable [args…]]

  22. L&L: linking helper tools • ldd – list the dynamic dependancies • readelf – displays information from ELF files • objdump – show information from object files • nm – show symbol information from object files • strip – removes symbols from object files • LD_DEBUG/LD_DEBUG_OUTPUT – shows debug output from ld.so

  23. L&L: References • Stallings, William. Operating Systems Internals and Design Principles, 4th Edition. Upper Saddle River, NJ: Prentice-Hall, 2001 • http://efrw01.frascati.enea.it/Software/Unix/IstrFTU/cern-cnl-2001-003-25-link.html • http://www.iecc.com/linker/linker10.html • http://www.ibiblio.org/oswg/oswg-nightly/oswg/en_GB.ISO_8859-1/books/linux-c-programming/GCC-HOWTO/x796.html • http://linux.about.com/library/cmd/blcmdl2_execve.htm • http://www.iecc.com/linker/ • http://www.suse.de/~bastian/Export/linking.txt • http://linux.about.com/library/cmd/blcmdl8_ld.so.htm • http://www.linuxjournal.com/node/6463 • http://www.ibiblio.org/oswg/oswg-nightly/oswg/en_GB.ISO_8859-1/books/linux-c-programming/GCC-HOWTO/x575.html

  24. L&L: References (cont.) • http://www.moses.uklinux.net/patches/lki-single.html • http://whatis.techtarget.com/definition/0,,sid9_gci212493,00.html • http://encyclopedia.thefreedictionary.com/position%20independent%20code • http://www.faqs.org/docs/Linux-HOWTO/Program-Library-HOWTO.html • http://sources.redhat.com/autobook/autobook/autobook_71.html • http://www.educ.umu.se/~bjorn/linux/howto/ELF-HOWTO-1.html • http://www.tcfs.it/docs/manpages/BSD/gcc-howto-6.html • http://www.cs.ucdavis.edu/~haungs/paper/ • http://www-106.ibm.com/developerworks/linux/library/l-dll.html?dwzone=linux

More Related