Month: August 2007

  • Linkers part 6

    So many things to talk about. Let’s go back and cover relocations in some more detail, with some examples. Relocations As I said back in part 2, a relocation is a computation to perform on the contents. And as I said yesterday, a relocation can also direct the linker to take other actions, like creating…

  • Linkers part 5

    Shared Libraries Redux Yesterday I talked about how shared libraries work. I realized that I should say something about how linkers implement shared libraries. This discussion will again be ELF specific. When the program linker puts position dependent code into a shared library, it has to copy more of the relocations from the object file…

  • Linkers part 4

    Shared Libraries We’ve talked a bit about what object files and executables look like, so what do shared libraries look like? I’m going to focus on ELF shared libraries as used in SVR4 (and GNU/Linux, etc.), as they are the most flexible shared library implementation and the one I know best. Windows shared libraries, known…

  • Linkers part 3

    Continuing notes on linkers. Address Spaces An address space is simply a view of memory, in which each byte has an address. The linker deals with three distinct types of address space. Every input object file is a small address space: the contents have addresses, and the symbols and relocations refer to the contents by…

  • Linkers part 2

    I’m back, and I’m still doing the linker technical introduction. Shared libraries were invented as an optimization for virtual memory systems running many processes simultaneously. People noticed that there is a set of basic functions which appear in almost every program. Before shared libraries, in a system which runs multiple processes simultaneously, that meant that…