How does a linker work?
Relocatable object file: contains binary code and data in a form that can be combined with other relocatable files at compile time to create an executable object file.text: the machine code of the compiled program.rodata: read-only data such as the format string in the printf statement.data: initialized global C variable.bss: uninitialized global C variable. It’s merely a placeholder..symtab: A symbol table with information about functions and global variables..rel.text: a list of locations in the .text section that will need to be modified when the linker combines this object file with others.rel.data: relocation information for any global variables that are referenced or defined by the module.debug: It’s only present if the compiler driver is invoked with-goption.line: A mapping between line numbers in the original C source program and machine code instructions in the.textsection.strtab: a string table for the symbol tables in the.symtaband.debugsections.- local procedure variables that are defined with C static attribute are not managed on stack.
Executable object file: contains binary code and data in a form that can be copied directly into memory and executedShared object file: a special type of relocatable object file that can be loaded into memory and linked dynamicallyShared library: an object module that can be loaded at an arbitrary memory address and linked with a program in memory.Position-Independent Code: A key purpose of shared libraries is to allow multiple running processes to share the same library code in memory. We can assign a priori a dedicated chunk of the address space to each shared library, and then require the loader to always load the shared library at that address. A better approach is to compile library code so that it can be loaded and executed at any address without being modified by the linker.- No matter where we load an object module in memory, the distance between any instruction in the code segment and any variable in the data segment is a run-time constant. Thus, the compiler creates a table called the
global offset tableat the beginning of the data segment.