| Unfortunately, I don't really have a satisfying answer for you. I've picked up most of what I know by haphazzardly putting together information in man files, Intel manuals, and probably bits acquired over time. That said, here's what comes to mind; first the man pages: - ld.so(8), ldconfig(8): details about interacting with the loader - syscall(2): gives some ABI details - elf(5): pretty much the ELF specification Links to books and documentation I've found helpful: - Linkers and Loaders, by John R. Levine: https://linker.iecc.com/, - The glibc wiki: https://sourceware.org/glibc/wiki/DynamicLoader - The Intel x86 manuals: https://software.intel.com/en-us/articles/intel-sdm - The OS Dev Wiki, in general, is a good resource on low-level details: https://wiki.osdev.org/Dynamic_Linker, and - x86 Opcode and Instruction reference: http://www.ref.x86asm.net/ The last reference above isn't directly about linking, but to make sense of things like symbol relocations, you need some familiarity with instruction encoding. Finally, Brain Raiter has a neat series of blog on his attempt at writing the smallest ELF files possible. This is what inspired me to write my own ELFs in the first place. The focus is on ELF, but there is by necessity a discussion about how linking and loading works in that context: http://www.muppetlabs.com/~breadbox/software/tiny/ Happy hacking! |