Assembler, Linker and Loader
Assembler, Linker and Loader
Assembler, Linker and Loader
C program
Translation Hierarchy
Assembly language program
Compiler
Assembler
Linker
Loader
Memory
Translation Hierarchy
Compiler
Translates high-level language program into assembly language (CS 440)
Assembler
Converts assembly language programs into object files
Object files contain a combination of machine instructions, data, and information needed to place instructions properly in memory
Assemblers
Assemblers need to
translate assembly instructions and pseudo-instructions into machine instructions Convert decimal numbers, etc. specified by programmer into binary
Object file header describes the size and position of the other pieces of the file Text segment contains the machine instructions Data segment contains binary representation of data in assembly file Relocation info identifies instructions and data that depend on absolute addresses Symbol table associates addresses with external labels and lists unresolved references Debugging info
Source file
Assembler
Object file
Linker
Executable file
Source file
Assembler
Object file
Program library
Object file Instructions main: jal ??? jal ??? call, sub call, printf
Linker
Relocation records
C library print:
Linker
Tool that merges the object files produced by separate compilation or assembly and creates an executable file Three tasks
Searches the program to find library routines used by program, e.g. printf(), math routines, Determines the memory locations that code from each module will occupy and relocates its instructions by adjusting absolute references Resolves references among files
Loader
Part of the OS that brings an executable file residing on disk into memory and starts it running Steps
Read executable file s header to determine the size of text and data segments Create a new address space for the program Copies instructions and data into address space Copies arguments passed to the program on the stack Initializes the machine registers including the stack ptr Jumps to a startup routine that copies the program s arguments from the stack to registers and calls the program s main routine
$sp
7fff ffff
hex
Stack
Static data
Reserved 0