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…