A SimplisHc Program TranslaHon Scheme. TranslaHng the Example Program. Example C Program. Why Linkers? - Modularity. Linking

Size: px
Start display at page:

Download "A SimplisHc Program TranslaHon Scheme. TranslaHng the Example Program. Example C Program. Why Linkers? - Modularity. Linking"

Transcription

1 A SimplisHc Program TranslaHon Scheme Linking ASCII (Text) source file The American Standard Code for InformaHon Interchange (ASCII) CSCI 221: Machine Architecture and OrganizaHon Pen- Chung Yew Department Computer Science and Engineering Translator p Binary executable object file (memory image on disk) University of Minnesota With Slides from Bryant, O Hallaron and Zhai Problems: Efficiency: small change requires complete recompilation Modularity: hard to share common functions (e.g. printf) Solution: Static linker (or linker) 3 Example C Program TranslaHng the Example Program int buf[2] = 1, 2; return ; int *bufp = &buf[]; temp = *bufp; *bufp = *bufp1; Compiler driver coordinates all steps in the translaon and linking process. Typically included with each compilaon system (e.g., gcc) Invokes preprocessor (cpp), compiler (cc1), assembler (as), and linker (ld). Passes command line arguments to appropriate phases Example: create executable p from and : Programs are translated and linked using a compiler driver: unix> gcc -O2 -g -o p unix>./p 4 5 StaHc (Compile- Time) Linking Why Linkers? - Modularity Programs are translated and linked using a compiler driver: unix> gcc -O2 -g -o p unix>./p Reason 1: Modularity Translators (cpp, cc1, as) main.o Linker (ld) Translators (cpp, cc1, as) swap.o Source files Separately compiled relocatable object files Program can be wriaen as a collecon of smaller source files, rather than one monolithic mass (needed for very large socware projects with millions lines of code). Can build libraries of common funcons (more on this later) e.g., Math library, standard C library p Fully linked executable object file (contains code and data for all func<ons defined in and ) 6 1 1

2 Why Linkers? Time & Space Efficiency Reason 2: Efficiency Time efficiency: Separate compilahon Change one source file, compile, and then relink. No need to recompile other source files. What Do Linkers Do? Symbol ResoluHon Step 1. Symbol resoluhon Programs define and reference symbols (variables and funchons): /* define symbol swap */ /* reference symbol swap */ int *xp = &x; /* define symbol xp, reference x */ Space efficiency: Libraries Common funcons can be aggregated into a single file. Yet executable files and running memory images contain only code for the funcons they actually use. 11 Symbol definihons are stored (by compiler) in symbol table. Symbol table is an array of structs Each entry includes name, size, and locahon of symbol. Linker associates each symbol reference with exactly one definihon. 12 What Do Linkers Do? - RelocaHon Step 2. RelocaHon Merges separate code and data secons into single secons Relocates symbols from their relahve locahons in.o files to their final absolute memory locahons in the executable. Updates all references to these symbols to reflect their new posions. Three Kinds of Object Files (Modules) Relocatable object file (.o file) Contains code and data in a form that can be combined with other relocatable object files to form executable object file. Each.o file is produced from exactly one source (.c) file Executable object file (a.out file) Contains code and data in a form that can be copied directly into memory and then executed. Shared object file (.so file) Special type of relocatable object file that can be loaded into memory and linked dynamically, at either load Hme or run- Hme. Called Dynamic Link Libraries (DLLs) by Windows Executable and Linkable Format (ELF) Standard binary format for object files Originally proposed by AT&T System V Unix Later adopted by BSD Unix variants and Linux One unified format for Relocatable object files (.o), Executable object files (a.out) Shared object files (.so) Generic name: ELF binaries 15 ELF Relocatable Object File Format Elf header Word size, byte ordering, file type (.o, a.out.so), machine type, etc. sechon Code Read only data: jump tables, print strings,... sechon Inialized global variables Uninialized global variables Block Started by Symbol or BeAer Save Space Has secon header but occupies no space Symbol table Procedure and stac variable names Secon names and locaons sechon sechon.rel sechon.rel sechon 16 2

3 ELF Relocatable Object File Format (cont.).rel sechon Relocaon info for secon Addresses of instrucons that will need to be modified in the executable Instrucons for modifying..rel sechon Relocaon info for secon Addresses of pointer data that will need to be modified in the merged executable Info for symbolic debugging (gcc g) Line number in C source code String table for symbol table section header table Offsets and sizes of each secon sechon sechon.rel sechon.rel sechon ELF Executable Object File Format Elf header Word size, byte ordering, file type (.o, a.out.so), machine type, etc. Segment header table Page size, virtual memory addresses of segments (secons), segment sizes..init section _init funcon called by inializaon sechon Code Read only data: jump tables, print strings,... sechon Inialized global variables Segment header table.init sechon sechon sechon ELF Executable Object File Format Uninialized global variables Block Started by Symbol or BeAer Save Space Has secon header but occupies no space Symbol table Procedure and stac variable names Secon names and locaons sechon Code Info for symbolic debugging (gcc g) Line number in C source code String table for symbol table section header table Offsets and sizes of each secon Segment header table.init sechon sechon sechon 19 Linker Symbols symbols Symbols defined by module m that can be referenced by other modules. E.g.: non- static C funcons and non- static global variables. External symbols symbols that are referenced by module m but defined by some other module. Local symbols Symbols that are defined and referenced exclusively by module m, i.e..c files. E.g.: C funcons and variables defined with static aaribute. Local linker symbols are NOT local program variables 2 Resolving Symbols int buf[2] = 1, 2; return ; External Linker knows nothing of temp int *bufp = &buf[]; External temp = *bufp; *bufp = *bufp1; Local 21 ELF Relocatable Object File Format Elf header Word size, byte ordering, file type (.o, a.out.so), machine type, etc. sechon Code Read only data: jump tables, print strings,... sechon Inialized global variables Uninialized global variables Block Started by Symbol or BeAer Save Space Has secon header but occupies no space Symbol table Procedure and stahc variable names SecHon names and locahons sechon sechon.rel sechon.rel sechon 22 3

4 ELF Symbol Table Entry Typedef struct int name; /* String table offset */ int value; /* Section offset, of VM address */ int size; /* Object size in bytes */ char type:4 /* Data, func, section, or src file name*/ binding: 4 /* or Local */ char reserved; /* Unused */ char section; /* Section header index, ABS, UNDEF, */ /* or COMMON (data not yet allocated) */ Elf_Symbol; /* each entry in.symtab section identifies */ 23 Resolving Symbols int buf[2] = 1, 2; return ; External Linker knows nothing of temp int *bufp = &buf[]; External temp = *bufp; *bufp = *bufp1; Local 24 ELF Symbol Table Entry RelocaHng Code and Data Through Linking Num: Value Size Type Bind Ndx Name 8: 8 Object 3 buf 9: 17 Func 1 main 1: Notype UND swap Symbol Table for main.o Num: Value Size Type Bind Ndx Name 8: 4 Object 3 bufp 9: Notype UND buf 1: 39 Func 1 swap 11: 4 4 Object COM bufp1 Symbol Table for swap.o Ndx: SecHon number Relocatable Object Files System code System data main.o main() int buf[2]=1,2 swap.o swap() int *bufp=&buf[] static int *bufp1.bss Executable Object File merging sechons in Relocatable object files Headers System code main() swap() More system code System data int buf[2]=1,2 int *bufp=&buf[] int *bufp1.symtab.debug.bss Even though private to swap, requires allocaon in.bss Virtual Memory of a Linux Process Three Kinds of Object Files (Modules) Different for each process IdenHcal for each process x848 (32) x4 (64) %esp brk Process- specific data structs (ptables, task and mm structs, kernel stack) Physical memory Kernel code and data User stack Memory mapped region for shared libraries RunHme heap (malloc) UniniHalized data (.bss) IniHalized data () Program text () Kernel virtual memory Process virtual memory 27 Relocatable object file (.o file) Contains code and data in a form that can be combined with other relocatable object files to form executable object file. Each.o file is produced from exactly one source (.c) file Executable object file (a.out file) Contains code and data in a form that can be copied directly into memory and then executed. Shared object file (.so file) Special type of relocatable object file that can be loaded into memory and linked dynamically, at either load Hme or run- Hme. Called Dynamic Link Libraries (DLLs) by Windows 32 4

5 RelocaHng Code and Data Through Linking Relocatable Object Files main.o swap.o System code System data main() int buf[2]=1,2 swap() int *bufp=&buf[] static int *bufp1.bss Executable Object File merging sechons in Relocatable object files Headers System code main() swap() More system code System data int buf[2]=1,2 int *bufp=&buf[] int *bufp1.symtab.debug Even though private to swap, requires allocaon in.bss.bss 33 Resolving Symbols int buf[2] = 1, 2; return ; External Linker knows nothing of temp int *bufp = &buf[]; External temp = *bufp; *bufp = *bufp1; Local 34 ELF Relocatable Object File Format Elf header Word size, byte ordering, file type (.o, a.out.so), machine type, etc. sechon Code Read only data: jump tables, print strings,... sechon Inialized global variables Uninialized global variables Block Started by Symbol or BeAer Save Space Has secon header but occupies no space Symbol table Procedure and stac variable names Secon names and locaons sechon sechon.rel sechon.rel sechon 35 ELF Relocatable Object File Format (cont.).rel sechon Relocaon info for secon Addresses of instrucons that will need to be modified in the executable Instrucons for modifying..rel sechon Relocaon info for secon Addresses of pointer data that will need to be modified in the merged executable Info for symbolic debugging (gcc g) Line number in C source code String table for symbol table section header table Offsets and sizes of each secon sechon sechon.rel sechon.rel sechon 36 ELF Symbol Table Entry ELF RelocaHon Entry Typedef struct int name; /* String table offset */ int value; /* Section offset, of VM address */ int size; /* Object size in bytes */ char type:4 /* Data, func, section, or src file name */ binding: 4 /* or Local */ char reserved; /* Unused */ char section; /* Section header index, ABS, UNDEF, */ /* or COMMON */ Elf_Symbol; /* each entry in.symtab section identifies */ Num: Value Size Type Bind Ndx Name 8: 8 Object 3 buf 9: 17 Func 1 main 1: Notype UND swap Typedef struct int offset; int symbol:24 /* Offset of the reference to relocate */ type: 8 /* Relocation type */ Elf32_Rel; /* each entry in.rel section identifies */ /* a reference that needs to be relocated */ q R_386_PC32: Relocate a reference that uses a 32-bit PC-relative address q R_386_32: Relocate a reference that uses a 32-bit absolute address Symbol Table for main.o Ndx: SecHon number

6 RelocaHon Info (main) int buf[2] = 1,2; return ; Source: objdump r d -r : display relocation entries -d : disassemble <main>: : 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 e4 f and $xfffffff,%esp 6: e8 fc ff ff ff call 7 <main+x7> 7: R_386_PC32 swap #relocation entry b: b8 mov $x,%eax 1: 89 ec mov %ebp,%esp 12: 5d pop %ebp 13: c3 ret <buf>: : 1 add %eax,(%eax) 2: add %al,(%eax) 4: 2 add (%eax),%al 6: add %al,(%eax) r.offset = x7 ; r.symbol = swap ; r.type = R_386_PC32 Ignore these 41 RelocaHon Info (swap, ) int *bufp = &buf[]; temp = *bufp; *bufp = *bufp1; swap.o Disassembly of section : <swap>: : 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 ec 1 sub $x1,%esp 6: c7 5 4 movl $x4,x d: 8: R_386_32.bss c: R_386_32 buf 1: a1 mov x,%eax 11: R_386_32 bufp 15: 8b mov (%eax),%eax 17: fc mov %eax,-x4(%ebp) 1a: a1 mov x,%eax 1b: R_386_32 bufp 1f: 8b 15 mov x,%edx 21: R_386_32.bss 25: 8b 12 mov (%edx),%edx 27: 89 1 mov %edx,(%eax) 29: a1 mov x,%eax 2a: R_386_32.bss 2e: 8b 55 fc mov -x4(%ebp),%edx 31: 89 1 mov %edx,(%eax) 33: c9 leave 34: c3 ret 42 RelocaHon Info (swap, ) Executable Before/Amer RelocaHon () int *bufp = &buf[]; temp = *bufp; *bufp = *bufp1; Disassembly of section : <bufp>: : add %al,(%eax)... Disassembly of section.bss: <bufp1>: : add %al,(%eax) int *bufp = &buf[]; temp = *bufp; *bufp = *bufp1; swap.o 8483a8: 55 push %ebp 8483a9: 89 e5 mov %esp,%ebp 8483ab: 83 ec 1 sub $x1,%esp 8483ae: c a movl $x84a14,x84a b5: a b8: a1 18 a 4 8 mov x84a18,%eax 8483bd: 8b mov (%eax),%eax 8483bf: fc mov %eax,-x4(%ebp) 8483c2: a1 18 a 4 8 mov x84a18,%eax 8483c7: 8b a 4 8 mov x84a24,%edx 8483cd: 8b 12 mov (%edx),%edx 8483cf: 89 1 mov %edx,(%eax) 8483d1: a1 24 a 4 8 mov x84a24,%eax 8483d6: 8b 55 fc mov -x4(%ebp),%edx 8483d9: 89 1 mov %edx,(%eax) 8483db: c9 leave Executable Before/Amer RelocaHon () Another Example main.o <main>: : 55 push %ebp : 89 e5 mov %esp,%ebp : 83 e4 f and $xfffffff,%esp 84839a: e8 9 call x8483a8 <swap> 84839f: b8 mov $x,%eax 8483a4: 89 ec mov %ebp,%esp 8483a6: 5d pop %ebp 8483a7: c3 ret int buf[2] = 1,2; return ; <main>: : 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 e4 f and $xfffffff,%esp 6: e8 fc ff ff ff call 7 <main+x7> 7: R_386_PC32 swap #relocation entry b: b8 mov $x,%eax 1: 89 ec mov %ebp,%esp 12: 5d pop %ebp 13: c3 ret 45 m.c int e=7; int r = a(); exit(); a.c extern int e; int *ep=&e; int x=15; int y; int a() return *ep+x+y; 46 6

7 Merging Relocatable Object Files m.o Relocatable Object Files system code system data main() int e = 7 a() a.o int *ep = &e int x = 15 int y.bss Executable Object File headers system code main() a() more system code system data int e = 7 int *ep = &e int x = 15 uninitialized data.symtab.debug.bss 47 m.o RelocaHon InformaHon m.c int e=7; int r = a(); exit(); objdump d objdump D objdump r objdump - R Disassembly of section : <e>: : 7 pop %es 1: add %al,(%eax) : 55 push %ebp 1: 89 e5 mov %esp,%ebp 1a: 29 c4 sub %eax,%esp 1c: e8 fc ff ff ff call 1d <main+x1d> 1d: R_386_PC32 a 21: fc mov %eax xfffffffc(%ebp) 24: c movl $x,(%esp) 2b: e8 fc ff ff ff call 2c <main+x2c> 2c: R_386_PC32 exit Relocation records for []: OFFSET TYPE VALUE 1d R_386_PC32 a 2c R_386_PC32 exit 48 a.o RelocaHon Info () a.c extern int e; int *ep=&e; int x=15; int y; int a() return *ep+x+y; Disassembly of section : <a>: : 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: a1 mov x,%eax 4: R_386_32 ep 8: 8b 1 mov (%eax),%edx a: a1 mov x,%eax b: R_386_32 x f: 1 c2 add %eax,%edx 11: a1 mov x,%eax 12: R_386_32 y 16: 8d 4 2 lea (%edx,%eax,1),%eax 19: 5d pop %ebp 1a: c3 ret a.o RelocaHon Info () a.c extern int e; int *ep=&e; int x=15; int y; int a() return *ep+x+y; <ep>: : add %al,(%eax) : R_386_32 e 4 <x>: 4: f sldtl (%eax)... Relocation records for []: OFFSET TYPE VALUE 4 R_386_32 ep b R_386_32 x 12 R_386_32 y Relocation records for []: OFFSET TYPE VALUE R_386_32 e 49 5 Executable Object File Executable Object File m.c int e=7; int r = a(); exit(); a.c extern int e; int *ep=&e; int x=15; int y; int a() return *ep+x+y; Disassembly of section : 8495a8 <e>: 8495a8: 7 pop %es 8495a9: add %al,(%eax) ac <ep>: 8495ac: a8 95 test $x95,%al 8495ae: 4 8 add $x8,%al 8495b <x>: 8495b: f sldtl (%eax) <main>: 84837: e8 f call <a> : fc mov %eax,xfffffffc(%ebp) : c movl $x,(%esp) 84837f: e8 1c ff ff ff call 8482a <exit@plt> gcc m.o a.o objdump - d <a>: : a1 ac mov x8495ac,%eax 84838c: 8b 1 mov (%eax),%edx 84838e: a1 b mov x8495b,%eax : 1 c2 add %eax,%edx : a1 b mov x8495b8,%eax 84839a: 8d 4 2 lea (%edx,%eax,1), %eax 52 7

8 Strong and Weak Symbols Linker s Symbol Rules Program symbols are either strong or weak Rule 1: A strong symbol can only appear once. strong: procedures and ini<alized global variables weak: unini<alized global variables strong strong p1.c int foo=5; p1() p2.c int foo; p2() weak strong Rule 2: A weak symbol can be overridden by a strong symbol of the same name. references to the weak symbol resolve to the strong symbol. Rule 3: If there are mul<ple weak symbols, pick an arbitrary one. Can override this with gcc fno-common Linker Puzzles int x; p1() p1() int x; p1() int x; int y; p1() int x=7; int y=5; p1() int x=7; p1() int x; p2() double x; p2() double x; p2() int x; p2() Link time error: two strong symbols (p1) References to x will refer to the same uninitialized int. Is this what you really want? Writes to x in p2 might overwrite y! Evil! Writes to x in p2 will overwrite y! Nasty! References to x will refer to the same initialized variable. Nightmare scenario: two identical weak structs, compiled by different compilers with different alignment rules. 59 Role of.h Files c1.c #include "global.h" int f() return g+1; c2.c #include <stdio.h> #include "global.h" global.h if (!init) g = 37; int t = f(); printf("calling f yields %d\n", t); return ; #ifdef INITIALIZE int g = 23; static int init = 1; #else int g; static int init = ; #endif 6 Running Preprocessor c1.c #include "global.h int f() return g+1; -DINITIALIZE global.h #ifdef INITIALIZE int g = 23; static int init = 1; #else int g; static int init = ; #endif no inihalizahon Variables Avoid if you can Otherwise Use static if you can IniHalize if you define a global variable Use extern if you use external global variable int g = 23; static int init = 1; int f() return g+1; int g; static int init = ; int f() return g+1; #include causes C preprocessor to insert file verbahm

9 Three Kinds of Object Files Relocatable object file (.o file) Contains code and data in a form that can be combined with other relocatable object files to form executable object file. Each.o file is produced from exactly one source (.c) file Executable object file (a.out file) Contains code and data in a form that can be copied directly into memory and then executed. Shared object file (.so file) Special type of relocatable object file that can be loaded into memory and linked dynamically, at either load Hme or run- Hme. Called Dynamic Link Libraries (DLLs) by Windows 7 Packaging Commonly Used FuncHons How to package funchons commonly used by programmers? Math, I/O, memory management, string manipulahon, etc. Awkward, given the linker framework so far: OpHon 1: Put all funchons in a single source file Programmers link big object file into their programs Space and me inefficient Any minor change needs to recompile the whole thing. OpHon 2: Put each funchon in a separate source file Programmers explicitly link appropriate binaries into their programs More efficient, but burdensome on the programmer Need to track each funcon used 71 Packaging Commonly Used FuncHons SoluHon: stahc libraries (.a archive files) Concatenate related relocatable object files Concatenate into a single file with an index, a.k.a. archive Enhance linker Linker tries to resolve unresolved external references Linker looks for the symbols in one or more archives. If an archive member file resolves reference, link into executable CreaHng StaHc Libraries atoi.c Translator atoi.o C standard library printf.c Translator printf.o Archiver (ar) libc.a random.c... Translator random.o ar rs libc.a atoi.o printf.o random.o r: replace the module, otherwise error s: create index for the archive 72 q Archiver allows incremental updates q Recompile function that changes and replace.o file in archive. 73 Commonly Used Libraries Linking with StaHc Libraries libc.a (the C standard library) I/O, memory allocaon, signal handling, string handling, data and me, random numbers, integer math libm.a (the C math library) floang point math (sin, cos, tan, log, exp, sqrt, ) ar t display a table lisng the content of archive % ar -t /usr/lib/libc.a sort fork.o fprintf.o fpu_control.o fputc.o freopen.o fscanf.o fseek.o fstab.o % ar -t /usr/lib/libm.a sort e_acos.o e_acosf.o e_acosh.o e_acoshf.o e_acoshl.o e_acosl.o e_asin.o e_asinf.o e_asinl.o 74 main2.c vector.h Translators (cpp, cc1, as) Relocatable object files main2.o multmat.o addmat.o Archiver (ar) libmat.a Linker (ld) p2 addvec.o libc.a Fully linked executable object file Sta<c libraries printf.o and any other modules called by printf.o 75 9

10 Using StaHc Libraries Loading Executable Binaries Linker s algorithm for resolving external references: Scan.o files and.a files in command line order. During the scan, keep a list of the current unresolved references. As each new.o or.a file obj is encountered, try to resolve each unresolved reference in the list against the symbols in obj. If any entries in the unresolved list at the end of scan, then error. Executable object file for example program p Program header table (required for executables) Problem: section segment x Command line order maoers! section (r/o) Moral: put libraries at the end of the command line..bss section.symtab segment x84a1 lind4-14:/tmp> gcc -m32 c #-c compile, no link (initialized r/w).rel lind4-14:/tmp> gcc -m32 c #-m32 x86-32 lind4-14:/tmp> ar -q libswap.a swap.o #-q quick append.rel x84a3b lind4-14:/tmp> gcc -L. -m32 main.o lswap #-l swap for linking lind4-14:/tmp> gcc -L. -m32 lswap main.o #-L. search directory.debug.bss segment (uninitialized r/w) main.o: In function `main': Section header table :(+x7): undefined reference to `swap' (required for relocatables) collect2: ld returned 1 exit status Process image init and shared lib segments Virtual addr x8483e Loading Executable Object Files Executable Object File Program header table (required for executables).init sechon sechon sechon.symtab.debug.line.strtab SecHon header table (required for relocatables) x1 xf7e9ddc x848 Kernel virtual memory User stack (created at runhme) Memory- mapped region for shared libraries Run- Hme heap (created by malloc) Read/write segment (,.bss) Read- only segment (.init,,.rodata) Unused Memory outside 32- bit address space %esp (stack pointer) brk Loaded from the executable file Shared Libraries StaHc libraries have the following disadvantages: Duplicaon in the stored executables (every funcon need std libc) Duplicaon in the running executables Minor bug fixes of system libraries require each applicaon to explicitly relink Modern soluhon: Shared Libraries Object files that contain code and data that are loaded and linked into an applicaon dynamically, at either load- -me or run- -me Also called: dynamic link libraries, DLLs,.so files Shared Libraries (cont.) Dynamic linking can occur when executable is first loaded and run (load- Hme linking). Common case for Linux, handled automacally by the dynamic linker (ld-linux.so). Standard C library (libc.so) usually dynamically linked. Dynamic linking can also occur amer program has begun (run- Hme linking). In Linux, this is done by calls to the dlopen() interface. Distribung socware. High- performance web servers. Runme library interposioning. Shared library rouhnes can be shared by mulhple processes. 8 Dynamic Linking at Load- Hme Relocatable object file Par<ally linked executable object file Fully linked executable in memory main2.c Translators (cpp, cc1, as) main2.o p2 vector.h Loader (execve) Linker (ld) libc.so libvector.so libc.so libvector.so Dynamic linker (ld-linux.so) unix> gcc -shared -o libvector.so \ addvec.c multvec.c Reloca<on and symbol table info Code and data 81 1

11 Dynamic Linking at Run- Hme Dynamic Linking at Run- Hme #include <stdio.h> #include <dlfcn.h> int x[2] = 1, 2; int y[2] = 3, 4; int z[2]; void *handle; void (*addvec)(int *, int *, int *, int); char *error; /* get a pointer to the addvec() function we just loaded */ addvec = dlsym(handle, "addvec"); if ((error = dlerror())!= NULL) fprintf(stderr, "%s\n", error); exit(1); /* Now we can call addvec() just like any other function */ addvec(x, y, z, 2); printf("z = [%d %d]\n", z[], z[1]); /* unload the shared library */ /* dynamically load the shared lib that contains addvec() */ if (dlclose(handle) < ) handle = dlopen("./libvector.so", RTLD_LAZY); fprintf(stderr, "%s\n", dlerror()); if (!handle) exit(1); fprintf(stderr, "%s\n", dlerror()); exit(1); return ; The Complete Picture m.c Translators (cc1, as) m.o Partially linked executable p (on disk) Fully linked executable p (in memory) a.c Translators (cc1,as) a.o Linker (ld) Shared library of dynamically p libwhatever.so relocatable object files Loader/Dynamic Linker P libwhatever.a libc.so functions called by m.c and a.c are loaded, linked, and shared among processes. 84 RelocaHon Info (main) int buf[2] = 1,2; return ; Source: objdump r -d main.o <main>: : 8d 4c 24 4 lea x4(%esp),%ecx 4: 83 e4 f and $xfffffff,%esp 7: ff 71 fc pushl xfffffffc(%ecx) a: 55 push %ebp b: 89 e5 mov %esp,%ebp d: 51 push %ecx e: 83 ec 4 sub $x4,%esp 11: e8 fc ff ff ff call 12 <main+x12> 12: R_386_PC32 swap 16: 83 c4 4 add $x4,%esp 19: 31 c xor %eax,%eax 1b: 59 pop %ecx 1c: 5d pop %ebp 1d: 8d 61 fc lea xfffffffc(%ecx),%esp 2: c3 ret Disassembly of section : <buf>: : RelocaHon Info (swap, ) int *bufp = &buf[]; temp = *bufp; *bufp = *bufp1; swap.o Disassembly of section : <swap>: : 8b 15 mov x,%edx 2: R_386_32 buf 6: a1 4 mov x4,%eax 7: R_386_32 buf b: 55 push %ebp c: 89 e5 mov %esp,%ebp e: c7 5 4 movl $x4,x 15: 1: R_386_32.bss 14: R_386_32 buf 18: 8b 8 mov (%eax),%ecx 1a: 89 1 mov %edx,(%eax) 1c: 5d pop %ebp 1d: 89 d 4 mov %ecx,x4 1f: R_386_32 buf 23: c3 ret 86 RelocaHon Info (swap, ) int *bufp = &buf[]; temp = *bufp; *bufp = *bufp1; Disassembly of section : <bufp>: : : R_386_32 buf 87 11

12 Executable Before/Amer RelocaHon () <main>: e: 83 ec 4 sub $x4,%esp 11: e8 fc ff ff ff call 12 <main+x12> 12: R_386_PC32 swap 16: 83 c4 4 add $x4,%esp x x1a = x8483b <main>: 84838: 8d 4c 24 4 lea x4(%esp),%ecx : 83 e4 f and $xfffffff,%esp : ff 71 fc pushl xfffffffc(%ecx) 84838a: 55 push %ebp 84838b: 89 e5 mov %esp,%ebp 84838d: 51 push %ecx 84838e: 83 ec 4 sub $x4,%esp : e8 1a call 8483b <swap> : 83 c4 4 add $x4,%esp : 31 c xor %eax,%eax 84839b: 59 pop %ecx 84839c: 5d pop %ebp 84839d: 8d 61 fc lea xfffffffc(%ecx),%esp 8483a: c3 ret 88 : 8b 15 mov x,%edx 2: R_386_32 buf 6: a1 4 mov x4,%eax 7: R_386_32 buf... e: c7 5 4 movl $x4,x 15: 1: R_386_32.bss 14: R_386_32 buf 1d: 89 d 4 mov %ecx,x4 1f: R_386_32 buf 23: c3 ret 8483b <swap>: 8483b: 8b mov x84962,%edx 8483b6: a mov x849624,%eax 8483bb: 55 push %ebp 8483bc: 89 e5 mov %esp,%ebp 8483be: c movl $x849624,x c5: c8: 8b 8 mov (%eax),%ecx 8483ca: 89 1 mov %edx,(%eax) 8483cc: 5d pop %ebp 8483cd: 89 d mov %ecx,x d3: c3 ret 89 Executable Amer RelocaHon () RelocaHng Symbols and Resolving References Disassembly of section : <buf>: 84962: <bufp>: : Def of global symbol e Symbols are lexical enes that name funcons and variables. Each symbol has a value (typically a memory address). Code consists of symbol defini-ons and references. References can be either local or external. Ref to external symbol exit (defined in libc.so) m.c int e=7; int r = a(); exit(); Ref to external symbol a Def of gloabl symbol ep a.c extern int e; int *ep=&e; int x=15; int y; int a() return *ep+x+y; Def of global symbol a Refs of global symbols ep,x,y Ref to external symbol e Defs of global symbols x and y 91 12

Systems I. Linking II

Systems I. Linking II Systems I Linking II Topics Relocation Static libraries Loading Dynamic linking of shared libraries Relocating Symbols and Resolving External References Symbols are lexical entities that name functions

More information

Example C program. 11: Linking. Why linkers? Modularity! Static linking. Why linkers? Efficiency! What do linkers do? 10/28/2013

Example C program. 11: Linking. Why linkers? Modularity! Static linking. Why linkers? Efficiency! What do linkers do? 10/28/2013 Example C program 11: Linking Computer Architecture and Systems Programming 252 61, Herbstsemester 213 Timothy Roscoe main.c int buf[2] = 1, 2; swap(); return ; swap.c static int *bufp = &buf[]; void swap()

More information

Example C Program. Linking CS Instructor: Sanjeev Se(a. int buf[2] = {1, 2}; extern int buf[]; int main() { swap(); return 0; }

Example C Program. Linking CS Instructor: Sanjeev Se(a. int buf[2] = {1, 2}; extern int buf[]; int main() { swap(); return 0; } Linking Instructor: Sanjeev Se(a 1 Example C Program main.c int buf[2] = {1, 2; int main() { swap(); return 0; swap.c extern int buf[]; static int *bufp0 = &buf[0]; static int *bufp1; void swap() { int

More information

A Simplistic Program Translation Scheme

A Simplistic Program Translation Scheme A Simplistic Program Translation Scheme m.c ASCII source file Translator p Binary executable object file (memory image on disk) Problems: Efficiency: small change requires complete recompilation Modularity:

More information

Example C Program The course that gives CMU its Zip! Linking March 2, Static Linking. Why Linkers? Page # Topics

Example C Program The course that gives CMU its Zip! Linking March 2, Static Linking. Why Linkers? Page # Topics 15-213 The course that gives CMU its Zip! Topics Linking March 2, 24 Static linking Dynamic linking Case study: Library interpositioning Example C Program main.c int buf[2] = 1, 2; int main() swap(); return

More information

Linking Oct. 15, 2002

Linking Oct. 15, 2002 15-213 The course that gives CMU its Zip! Topics Linking Oct. 15, 2002 Static linking Object files Static libraries Loading Dynamic linking of shared libraries class15.ppt Linker Puzzles int x; p1() {}

More information

LINKING. Jo, Heeseung

LINKING. Jo, Heeseung LINKING Jo, Heeseung PROGRAM TRANSLATION (1) A simplistic program translation scheme m.c ASCII source file Translator p Binary executable object file (memory image on disk) Problems: - Efficiency: small

More information

Linking February 24, 2005

Linking February 24, 2005 15-213 The course that gives CMU its Zip! Linking February 24, 2005 Topics Static linking Dynamic linking Case study: Library interpositioning 13-linking.ppt Example C Program main.c int buf[2] = {1, 2};

More information

Computer Organization: A Programmer's Perspective

Computer Organization: A Programmer's Perspective A Programmer's Perspective Linking Gal A. Kaminka galk@cs.biu.ac.il A Simplistic Program Translation Scheme m.c ASCII source file Translator p Binary executable object file (memory image on disk) Problems:

More information

Lecture 16: Linking Computer Architecture and Systems Programming ( )

Lecture 16: Linking Computer Architecture and Systems Programming ( ) Systems Group Department of Computer Science ETH Zürich Lecture 16: Linking Computer Architecture and Systems Programming (252-0061-00) Timothy Roscoe Herbstsemester 2012 Last time: memory hierarchy L1/L2

More information

Linking Oct. 26, 2009"

Linking Oct. 26, 2009 Linking Oct. 26, 2009" Linker Puzzles" int x; p1() {} p1() {} int x; p1() {} int x; p2() {} int x; int y; p1() {} int x=7; int y=5; p1() {} double x; p2() {} double x; p2() {} int x=7; p1() {} int x; p2()

More information

Systems Programming and Computer Architecture ( ) Timothy Roscoe

Systems Programming and Computer Architecture ( ) Timothy Roscoe Systems Group Department of Computer Science ETH Zürich Systems Programming and Computer Architecture (252-0061-00) Timothy Roscoe Herbstsemester 2016 AS 2016 Linking 1 12: Linking Computer Architecture

More information

CS429: Computer Organization and Architecture

CS429: Computer Organization and Architecture CS429: Computer Organization and Architecture Dr. Bill Young Department of Computer Sciences University of Texas at Austin Last updated: January 13, 2017 at 08:55 CS429 Slideset 25: 1 Relocating Symbols

More information

E = 2 e lines per set. S = 2 s sets tag. valid bit B = 2 b bytes per cache block (the data) CSE351 Inaugural EdiNon Spring

E = 2 e lines per set. S = 2 s sets tag. valid bit B = 2 b bytes per cache block (the data) CSE351 Inaugural EdiNon Spring Last Time Caches E = 2 e lines per set Address of word: t bits s bits b bits S = 2 s sets tag set index block offset data begins at this offset v tag 0 1 2 B 1 valid bit B = 2 b bytes per cache block (the

More information

Relocating Symbols and Resolving External References. CS429: Computer Organization and Architecture. m.o Relocation Info

Relocating Symbols and Resolving External References. CS429: Computer Organization and Architecture. m.o Relocation Info Relocating Symbols and Resolving External References CS429: Computer Organization and Architecture Dr. Bill Young Department of Computer Sciences University of Texas at Austin Last updated: January 13,

More information

Outline. 1 Background. 2 ELF Linking. 3 Static Linking. 4 Dynamic Linking. 5 Summary. Linker. Various Stages. 1 Linking can be done at compile.

Outline. 1 Background. 2 ELF Linking. 3 Static Linking. 4 Dynamic Linking. 5 Summary. Linker. Various Stages. 1 Linking can be done at compile. Outline CS 6V81-05: System Security and Malicious Code Analysis Revealing Internals of Linkers Zhiqiang Lin Department of Computer Science University of Texas at Dallas March 26 th, 2012 1 Background 2

More information

CSE 2421: Systems I Low-Level Programming and Computer Organization. Linking. Presentation N. Introduction to Linkers

CSE 2421: Systems I Low-Level Programming and Computer Organization. Linking. Presentation N. Introduction to Linkers CSE 2421: Systems I Low-Level Programming and Computer Organization Linking Read/Study: Bryant 7.1 7.10 Gojko Babić 11-15-2017 Introduction to Linkers Linking is the process of collecting and combining

More information

Computer Systems. Linking. Han, Hwansoo

Computer Systems. Linking. Han, Hwansoo Computer Systems Linking Han, Hwansoo Example C Program int sum(int *a, int n); int array[2] = {1, 2}; int sum(int *a, int n) { int i, s = 0; int main() { int val = sum(array, 2); return val; } main.c

More information

Revealing Internals of Linkers. Zhiqiang Lin

Revealing Internals of Linkers. Zhiqiang Lin CS 6V81-05: System Security and Malicious Code Analysis Revealing Internals of Linkers Zhiqiang Lin Department of Computer Science University of Texas at Dallas March 26 th, 2012 Outline 1 Background 2

More information

(Extract from the slides by Terrance E. Boult

(Extract from the slides by Terrance E. Boult What software engineers need to know about linking and a few things about execution (Extract from the slides by Terrance E. Boult http://vast.uccs.edu/~tboult/) A Simplistic Program Translation Scheme

More information

Sungkyunkwan University

Sungkyunkwan University Linking Case study: Library interpositioning main.c int buf[2] = {1, 2}; int main() { swap(); return 0; } swap.c extern int buf[]; int *bufp0 = &buf[0]; static int *bufp1; void swap() { int temp; } bufp1

More information

CS 201 Linking Gerson Robboy Portland State University

CS 201 Linking Gerson Robboy Portland State University CS 201 Linking Gerson Robboy Portland State University 1 15-213, F 02 A Simplistic Program Translation Scheme m.c ASCII source file Translator p Binary executable object file (memory image on disk) Problems:

More information

Linking. Computer Systems Organization (Spring 2017) CSCI-UA 201, Section 3. Instructor: Joanna Klukowska

Linking. Computer Systems Organization (Spring 2017) CSCI-UA 201, Section 3. Instructor: Joanna Klukowska Linking Computer Systems Organization (Spring 2017) CSCI-UA 201, Section 3 Instructor: Joanna Klukowska Slides adapted from Randal E. Bryant and David R. O Hallaron (CMU) Mohamed Zahran (NYU) Example C

More information

Today. Linking. Example C Program. Sta7c Linking. Linking Case study: Library interposi7oning

Today. Linking. Example C Program. Sta7c Linking. Linking Case study: Library interposi7oning Today Linking Linking Case study: Library interposi7oning 15-213 / 18-213: Introduc2on to Computer Systems 12 th Lecture, Feb. 23, 2012 Instructors: Todd C. Mowry & Anthony Rowe 1 2 Example C Program Sta7c

More information

Lecture 12-13: Linking

Lecture 12-13: Linking CSCI-UA.0201-003 Computer Systems Organization Lecture 12-13: Linking Mohamed Zahran (aka Z) mzahran@cs.nyu.edu http://www.mzahran.com Source Code to Execution C source Assembly Assembly Compiler Assembly

More information

Exercise Session 7 Computer Architecture and Systems Programming

Exercise Session 7 Computer Architecture and Systems Programming Systems Group Department of Computer Science ETH Zürich Exercise Session 7 Computer Architecture and Systems Programming Herbstsemester 2014 Review of last week s excersice structs / arrays in Assembler

More information

Linker Puzzles The course that gives CMU its Zip! Linking Mar 4, A Simplistic Program Translation Scheme. A Better Scheme Using a Linker

Linker Puzzles The course that gives CMU its Zip! Linking Mar 4, A Simplistic Program Translation Scheme. A Better Scheme Using a Linker 15-213 The course that gives CMU its Zi! Toics Static linking Object files Linking Mar 4, 2003 Static libraries Loading Dynamic linking of shared libraries Linker Puzzles 1() { 1() { 1() { 1() { int x=7;

More information

Linking. Today. Next time. Static linking Object files Static & dynamically linked libraries. Exceptional control flows

Linking. Today. Next time. Static linking Object files Static & dynamically linked libraries. Exceptional control flows Linking Today Static linking Object files Static & dynamically linked libraries Next time Exceptional control flows Fabián E. Bustamante, 2007 Example C program main.c void swap(); int buf[2] = {1, 2;

More information

Linking and Loading. CS61, Lecture 16. Prof. Stephen Chong October 25, 2011

Linking and Loading. CS61, Lecture 16. Prof. Stephen Chong October 25, 2011 Linking and Loading CS61, Lecture 16 Prof. Stephen Chong October 25, 2011 Announcements Midterm exam in class on Thursday 80 minute exam Open book, closed note. No electronic devices allowed Please be

More information

Linking. CS 485 Systems Programming Fall Instructor: James Griffioen

Linking. CS 485 Systems Programming Fall Instructor: James Griffioen Linking CS 485 Systems Programming Fall 2015 Instructor: James Griffioen Adapted from slides by R. Bryant and D. O Hallaron (hip://csapp.cs.cmu.edu/public/instructors.html) 1 Today Linking Case study:

More information

Systemprogrammering och operativsystem Laborationer. Linker Puzzles. Systemprogrammering 2007 Föreläsning 1 Compilation and Linking

Systemprogrammering och operativsystem Laborationer. Linker Puzzles. Systemprogrammering 2007 Föreläsning 1 Compilation and Linking Systemprogrammering och operativsystem 2007 Denna kurs behandlar programmering nära operativsystemet. Det operativsystem vi använder är Unix (Solaris på Sun-maskiner och Linux på PC), men principerna gäller

More information

CSE2421 Systems1 Introduction to Low-Level Programming and Computer Organization

CSE2421 Systems1 Introduction to Low-Level Programming and Computer Organization Spring 2013 CSE2421 Systems1 Introduction to Low-Level Programming and Computer Organization Kitty Reeves TWRF 8:00-8:55am 1 Compiler Drivers = GCC When you invoke GCC, it normally does preprocessing,

More information

Link 2. Object Files

Link 2. Object Files Link 2. Object Files Young W. Lim 2017-09-23 Sat Young W. Lim Link 2. Object Files 2017-09-23 Sat 1 / 40 Outline 1 Linking - 2. Object Files Based on Oject Files ELF Sections Example Program Source Codes

More information

COMPILING OBJECTS AND OTHER LANGUAGE IMPLEMENTATION ISSUES. Credit: Mostly Bryant & O Hallaron

COMPILING OBJECTS AND OTHER LANGUAGE IMPLEMENTATION ISSUES. Credit: Mostly Bryant & O Hallaron COMPILING OBJECTS AND OTHER LANGUAGE IMPLEMENTATION ISSUES Credit: Mostly Bryant & O Hallaron Word-Oriented Memory Organization Addresses Specify Byte Locations Address of first byte in word Addresses

More information

Link 4. Relocation. Young W. Lim Wed. Young W. Lim Link 4. Relocation Wed 1 / 22

Link 4. Relocation. Young W. Lim Wed. Young W. Lim Link 4. Relocation Wed 1 / 22 Link 4. Relocation Young W. Lim 2017-09-13 Wed Young W. Lim Link 4. Relocation 2017-09-13 Wed 1 / 22 Outline 1 Linking - 4. Relocation Based on Relocation Relocation Entries Relocating Symbol Reference

More information

CS241 Computer Organization Spring Buffer Overflow

CS241 Computer Organization Spring Buffer Overflow CS241 Computer Organization Spring 2015 Buffer Overflow 4-02 2015 Outline! Linking & Loading, continued! Buffer Overflow Read: CSAPP2: section 3.12: out-of-bounds memory references & buffer overflow K&R:

More information

Link 2. Object Files

Link 2. Object Files Link 2. Object Files Young W. Lim 2017-09-20 Wed Young W. Lim Link 2. Object Files 2017-09-20 Wed 1 / 33 Outline 1 Linking - 2. Object Files Based on Oject Files ELF Sections Example Program Source Codes

More information

Link 4. Relocation. Young W. Lim Thr. Young W. Lim Link 4. Relocation Thr 1 / 26

Link 4. Relocation. Young W. Lim Thr. Young W. Lim Link 4. Relocation Thr 1 / 26 Link 4. Relocation Young W. Lim 2017-09-14 Thr Young W. Lim Link 4. Relocation 2017-09-14 Thr 1 / 26 Outline 1 Linking - 4. Relocation Based on Relocation Relocation Entries Relocating Symbol Reference

More information

Link 7. Static Linking

Link 7. Static Linking Link 7. Static Linking Young W. Lim 2018-12-21 Fri Young W. Lim Link 7. Static Linking 2018-12-21 Fri 1 / 41 Outline 1 Linking - 7. Static Linking Based on Static Library Examples Linking with Static Libraries

More information

Link 3. Symbols. Young W. Lim Mon. Young W. Lim Link 3. Symbols Mon 1 / 42

Link 3. Symbols. Young W. Lim Mon. Young W. Lim Link 3. Symbols Mon 1 / 42 Link 3. Symbols Young W. Lim 2017-09-11 Mon Young W. Lim Link 3. Symbols 2017-09-11 Mon 1 / 42 Outline 1 Linking - 3. Symbols Based on Symbols Symbol Tables Symbol Table Examples main.o s symbol table

More information

u Linking u Case study: Library interpositioning

u Linking u Case study: Library interpositioning u Linking u Case study: Library interpositioning int sum(int *a, int n); int array[2] = {1, 2}; int sum(int *a, int n) { int i, s = 0; int main() { int val = sum(array, 2); return val; } main.c } for (i

More information

Link 7. Dynamic Linking

Link 7. Dynamic Linking Link 7. Dynamic Linking Young W. Lim 2018-10-05 Fri Young W. Lim Link 7. Dynamic Linking 2018-10-05 Fri 1 / 26 Outline 1 Linking - 7. Dynamic Linking Based on Dynamic Shared Library Examples Young W. Lim

More information

Link 8.A Dynamic Linking

Link 8.A Dynamic Linking Link 8.A Dynamic Linking Young W. Lim 2019-01-04 Fri Young W. Lim Link 8.A Dynamic Linking 2019-01-04 Fri 1 / 42 Outline 1 Linking - 8.A Dynamic Linking Based on Dynamic linking with a shared library example

More information

238P: Operating Systems. Lecture 7: Basic Architecture of a Program. Anton Burtsev January, 2018

238P: Operating Systems. Lecture 7: Basic Architecture of a Program. Anton Burtsev January, 2018 238P: Operating Systems Lecture 7: Basic Architecture of a Program Anton Burtsev January, 2018 What is a program? What parts do we need to run code? Parts needed to run a program Code itself By convention

More information

Link 7.A Static Linking

Link 7.A Static Linking Link 7.A Static Linking Young W. Lim 2019-01-04 Fri Young W. Lim Link 7.A Static Linking 2019-01-04 Fri 1 / 27 Outline 1 Linking - 7.A Static Linking Based on Static Library Examples Linking with Static

More information

Generating Programs and Linking. Professor Rick Han Department of Computer Science University of Colorado at Boulder

Generating Programs and Linking. Professor Rick Han Department of Computer Science University of Colorado at Boulder Generating Programs and Linking Professor Rick Han Department of Computer Science University of Colorado at Boulder CSCI 3753 Announcements Moodle - posted last Thursday s lecture Programming shell assignment

More information

Carnegie Mellon. Bryant and O Hallaron, Computer Systems: A Programmer s Perspective, Third Edition

Carnegie Mellon. Bryant and O Hallaron, Computer Systems: A Programmer s Perspective, Third Edition 1 Linking 15-213: Introduction to Computer Systems 13 th Lecture, October 10th, 2017 Instructor: Randy Bryant 2 Today Linking Motivation What it does How it works Dynamic linking Case study: Library interpositioning

More information

Compiler Drivers = GCC

Compiler Drivers = GCC Compiler Drivers = GCC When you invoke GCC, it normally does preprocessing, compilation, assembly and linking, as needed, on behalf of the user accepts options and file names as operands % gcc O1 -g -o

More information

Executables and Linking. CS449 Spring 2016

Executables and Linking. CS449 Spring 2016 Executables and Linking CS449 Spring 2016 Remember External Linkage Scope? #include int global = 0; void foo(); int main() { foo(); printf( global=%d\n, global); return 0; } extern int

More information

Executables and Linking. CS449 Fall 2017

Executables and Linking. CS449 Fall 2017 Executables and Linking CS449 Fall 2017 Remember External Linkage Scope? #include int global = 0; void foo(); int main() { } foo(); printf( global=%d\n, global); return 0; extern int

More information

Link 8. Dynamic Linking

Link 8. Dynamic Linking Link 8. Dynamic Linking Young W. Lim 2018-12-27 Thr Young W. Lim Link 8. Dynamic Linking 2018-12-27 Thr 1 / 66 Outline 1 Linking - 8. Dynamic Linking Based on Dynamic linking with a shared library example

More information

Computer Systems Organization

Computer Systems Organization Computer Systems Organization 1 Outline 2 A software view User Interface 3 How it works 4 The gcc compilation system 5 The gcc compilation system hello.c (source code) Pre-processor (cpp) hello.i (modified

More information

CS 550 Operating Systems Spring Process I

CS 550 Operating Systems Spring Process I CS 550 Operating Systems Spring 2018 Process I 1 Process Informal definition: A process is a program in execution. Process is not the same as a program. Program is a passive entity stored in the disk Process

More information

Link 4. Relocation. Young W. Lim Sat. Young W. Lim Link 4. Relocation Sat 1 / 33

Link 4. Relocation. Young W. Lim Sat. Young W. Lim Link 4. Relocation Sat 1 / 33 Link 4. Relocation Young W. Lim 2017-09-16 Sat Young W. Lim Link 4. Relocation 2017-09-16 Sat 1 / 33 Outline 1 Linking - 4. Relocation Based on Relocation Relocation Entries Relocating Symbol Reference

More information

Linking : Introduc on to Computer Systems 13 th Lecture, October 11th, Instructor: Randy Bryant. Carnegie Mellon

Linking : Introduc on to Computer Systems 13 th Lecture, October 11th, Instructor: Randy Bryant. Carnegie Mellon Linking 15-213: Introduc on to Computer Systems 13 th Lecture, October 11th, 2016 Instructor: Randy Bryant 1 Today Linking Mo va on How it works Dynamic linking Case study: Library interposi oning 2 Example

More information

CMSC 313 Lecture 12 [draft] How C functions pass parameters

CMSC 313 Lecture 12 [draft] How C functions pass parameters CMSC 313 Lecture 12 [draft] How C functions pass parameters UMBC, CMSC313, Richard Chang Last Time Stack Instructions: PUSH, POP PUSH adds an item to the top of the stack POP removes an

More information

Link 4. Relocation. Young W. Lim Tue. Young W. Lim Link 4. Relocation Tue 1 / 38

Link 4. Relocation. Young W. Lim Tue. Young W. Lim Link 4. Relocation Tue 1 / 38 Link 4. Relocation Young W. Lim 2017-09-26 Tue Young W. Lim Link 4. Relocation 2017-09-26 Tue 1 / 38 Outline 1 Linking - 4. Relocation Based on Relocation Relocation Entries Relocation Algorithm Reloation

More information

Link 4. Relocation. Young W. Lim Mon. Young W. Lim Link 4. Relocation Mon 1 / 35

Link 4. Relocation. Young W. Lim Mon. Young W. Lim Link 4. Relocation Mon 1 / 35 Link 4. Relocation Young W. Lim 2017-09-25 Mon Young W. Lim Link 4. Relocation 2017-09-25 Mon 1 / 35 Outline 1 Linking - 4. Relocation Based on Relocation Relocation Entries Relocating Symbol Reference

More information

Link Edits and Relocatable Code

Link Edits and Relocatable Code Link Edits and Relocatable Code Computer Systems Chapter 7.4-7.7 gcc g o ttt ttt.c ttt.c gcc ttt Pre-Processor Linker Compiler Assembler ttt.s ttt.o gcc g o ttt ttt.c main.c gcc cmd util.c Pre-Processor

More information

Linking. Explain what ELF format is. Explain what an executable is and how it got that way. With huge thanks to Steve Chong for his notes from CS61.

Linking. Explain what ELF format is. Explain what an executable is and how it got that way. With huge thanks to Steve Chong for his notes from CS61. Linking Topics How do you transform a collection of object files into an executable? How is an executable structured? Why is an executable structured as it is? Learning Objectives: Explain what ELF format

More information

Link 4. Relocation. Young W. Lim Thr. Young W. Lim Link 4. Relocation Thr 1 / 48

Link 4. Relocation. Young W. Lim Thr. Young W. Lim Link 4. Relocation Thr 1 / 48 Link 4. Relocation Young W. Lim 2017-09-28 Thr Young W. Lim Link 4. Relocation 2017-09-28 Thr 1 / 48 Outline 1 Linking - 4. Relocation Based on Relocation Relocation Entries Relocation Algorithm Reloation

More information

Binghamton University. CS-220 Spring Loading Code. Computer Systems Chapter 7.5, 7.8, 7.9

Binghamton University. CS-220 Spring Loading Code. Computer Systems Chapter 7.5, 7.8, 7.9 Loading Code Computer Systems Chapter 7.5, 7.8, 7.9 gcc g o ttt ttt.c ttt.c ttt gcc gcc g o ttt ttt.c ttt.c gcc ttt Pre-Processor Linker Compiler Assembler ttt.s ttt.o What is in a binary executable file?

More information

Introduction Presentation A

Introduction Presentation A CSE 2421/5042: Systems I Low-Level Programming and Computer Organization Introduction Presentation A Read carefully: Bryant Chapter 1 Study: Reek Chapter 2 Skim: Reek Chapter 1 08/22/2018 Gojko Babić Some

More information

Machine Language, Assemblers and Linkers"

Machine Language, Assemblers and Linkers Machine Language, Assemblers and Linkers 1 Goals for this Lecture Help you to learn about: IA-32 machine language The assembly and linking processes 2 1 Why Learn Machine Language Last stop on the language

More information

CMSC 313 COMPUTER ORGANIZATION & ASSEMBLY LANGUAGE PROGRAMMING PREVIEW SLIDES 16, SPRING 2013

CMSC 313 COMPUTER ORGANIZATION & ASSEMBLY LANGUAGE PROGRAMMING PREVIEW SLIDES 16, SPRING 2013 CMSC 313 COMPUTER ORGANIZATION & ASSEMBLY LANGUAGE PROGRAMMING PREVIEW SLIDES 16, SPRING 2013 CONST POINTERS CONST POINTERS 4 ways to declare pointers in combination with const:!! int *ptr! const int *ptr!

More information

Linkers and Loaders. CS 167 VI 1 Copyright 2008 Thomas W. Doeppner. All rights reserved.

Linkers and Loaders. CS 167 VI 1 Copyright 2008 Thomas W. Doeppner. All rights reserved. Linkers and Loaders CS 167 VI 1 Copyright 2008 Thomas W. Doeppner. All rights reserved. Does Location Matter? int main(int argc, char *[ ]) { return(argc); } main: pushl %ebp ; push frame pointer movl

More information

CSC 2400: Computing Systems. X86 Assembly: Function Calls

CSC 2400: Computing Systems. X86 Assembly: Function Calls CSC 24: Computing Systems X86 Assembly: Function Calls 1 Lecture Goals Challenges of supporting functions Providing information for the called function Function arguments and local variables Allowing the

More information

CIT 595 Spring System Software: Programming Tools. Assembly Process Example: First Pass. Assembly Process Example: Second Pass.

CIT 595 Spring System Software: Programming Tools. Assembly Process Example: First Pass. Assembly Process Example: Second Pass. System Software: Programming Tools Programming tools carry out the mechanics of software creation within the confines of the operating system and hardware environment Linkers & Loaders CIT 595 Spring 2010

More information

Linking and Loading. ICS312 - Spring 2010 Machine-Level and Systems Programming. Henri Casanova

Linking and Loading. ICS312 - Spring 2010 Machine-Level and Systems Programming. Henri Casanova Linking and Loading ICS312 - Spring 2010 Machine-Level and Systems Programming Henri Casanova (henric@hawaii.edu) The Big Picture High-level code char *tmpfilename; int num_schedulers=0; int num_request_submitters=0;

More information

Midterm. Median: 56, Mean: "midterm.data" using 1:2 1 / 37

Midterm. Median: 56, Mean: midterm.data using 1:2 1 / 37 30 Midterm "midterm.data" using 1:2 25 20 15 10 5 0 0 20 40 60 80 100 Median: 56, Mean: 53.13 1 / 37 Today s Big Adventure f.c gcc f.s as f.o c.c gcc c.s as c.o ld a.out How to name and refer to things

More information

CS , Fall 2001 Exam 1

CS , Fall 2001 Exam 1 Andrew login ID: Full Name: CS 15-213, Fall 2001 Exam 1 October 9, 2001 Instructions: Make sure that your exam is not missing any sheets, then write your full name and Andrew login ID on the front. Write

More information

CS 3214 Computer Systems. Do not start the test until instructed to do so! printed

CS 3214 Computer Systems. Do not start the test until instructed to do so! printed Instructions: Print your name in the space provided below. This examination is closed book and closed notes, aside from the permitted one-page formula sheet. No calculators or other computing devices may

More information

CS , Spring 2004 Exam 1

CS , Spring 2004 Exam 1 Andrew login ID: Full Name: CS 15-213, Spring 2004 Exam 1 February 26, 2004 Instructions: Make sure that your exam is not missing any sheets (there should be 15), then write your full name and Andrew login

More information

Turning C into Object Code Code in files p1.c p2.c Compile with command: gcc -O p1.c p2.c -o p Use optimizations (-O) Put resulting binary in file p

Turning C into Object Code Code in files p1.c p2.c Compile with command: gcc -O p1.c p2.c -o p Use optimizations (-O) Put resulting binary in file p Turning C into Object Code Code in files p1.c p2.c Compile with command: gcc -O p1.c p2.c -o p Use optimizations (-O) Put resulting binary in file p text C program (p1.c p2.c) Compiler (gcc -S) text Asm

More information

Assembly Programmer s View Lecture 4A Machine-Level Programming I: Introduction

Assembly Programmer s View Lecture 4A Machine-Level Programming I: Introduction Assembly Programmer s View Lecture 4A Machine-Level Programming I: Introduction E I P CPU isters Condition Codes Addresses Data Instructions Memory Object Code Program Data OS Data Topics Assembly Programmer

More information

CMSC 313 Lecture 12. Project 3 Questions. How C functions pass parameters. UMBC, CMSC313, Richard Chang

CMSC 313 Lecture 12. Project 3 Questions. How C functions pass parameters. UMBC, CMSC313, Richard Chang Project 3 Questions CMSC 313 Lecture 12 How C functions pass parameters UMBC, CMSC313, Richard Chang Last Time Stack Instructions: PUSH, POP PUSH adds an item to the top of the stack POP

More information

A software view. Computer Systems. The Compilation system. How it works. 1. Preprocesser. 1. Preprocessor (cpp)

A software view. Computer Systems. The Compilation system. How it works. 1. Preprocesser. 1. Preprocessor (cpp) A software view User Interface Computer Systems MTSU CSCI 3240 Spring 2016 Dr. Hyrum D. Carroll Materials from CMU and Dr. Butler How it works hello.c #include int main() { printf( hello, world\n

More information

238P: Operating Systems. Lecture 4: Linking and Loading (Basic architecture of a program) Anton Burtsev October, 2018

238P: Operating Systems. Lecture 4: Linking and Loading (Basic architecture of a program) Anton Burtsev October, 2018 238P: Operating Systems Lecture 4: Linking and Loading (Basic architecture of a program) Anton Burtsev October, 2018 What is a program? What parts do we need to run code? Parts needed to run a program

More information

CS 33. Linkers. CS33 Intro to Computer Systems XXV 1 Copyright 2017 Thomas W. Doeppner. All rights reserved.

CS 33. Linkers. CS33 Intro to Computer Systems XXV 1 Copyright 2017 Thomas W. Doeppner. All rights reserved. CS 33 Linkers CS33 Intro to Computer Systems XXV 1 Copyright 2017 Thomas W. Doeppner. All rights reserved. gcc Steps 1) Compile to start here, supply.c file to stop here: gcc -S (produces.s file) if not

More information

Machine Programming 1: Introduction

Machine Programming 1: Introduction Machine Programming 1: Introduction CS61, Lecture 3 Prof. Stephen Chong September 8, 2011 Announcements (1/2) Assignment 1 due Tuesday Please fill in survey by 5pm today! Assignment 2 will be released

More information

Introduction Selected details Live demos. HrwCC. A self-compiling C-compiler. Stefan Huber Christian Rathgeb Stefan Walkner

Introduction Selected details Live demos. HrwCC. A self-compiling C-compiler. Stefan Huber Christian Rathgeb Stefan Walkner HrwCC A self-compiling C-compiler. Stefan Huber Christian Rathgeb Stefan Walkner Universität Salzburg VP Compiler Construction June 26, 2007 Overview 1 Introduction Basic properties Features 2 Selected

More information

Advanced Buffer Overflow

Advanced Buffer Overflow Pattern Recognition and Applications Lab Advanced Buffer Overflow Ing. Davide Maiorca, Ph.D. davide.maiorca@diee.unica.it Computer Security A.Y. 2016/2017 Department of Electrical and Electronic Engineering

More information

High Performance Computing Lecture 1. Matthew Jacob Indian Institute of Science

High Performance Computing Lecture 1. Matthew Jacob Indian Institute of Science High Performance Computing Lecture 1 Matthew Jacob Indian Institute of Science Agenda 1. Program execution: Compilation, Object files, Function call and return, Address space, Data & its representation

More information

143A: Principles of Operating Systems. Lecture 4: Linking and Loading (Basic architecture of a program) Anton Burtsev October, 2018

143A: Principles of Operating Systems. Lecture 4: Linking and Loading (Basic architecture of a program) Anton Burtsev October, 2018 143A: Principles of Operating Systems Lecture 4: Linking and Loading (Basic architecture of a program) Anton Burtsev October, 2018 What is a program? What parts do we need to run code? Parts needed to

More information

Program Translation. text. text. binary. binary. C program (p1.c) Compiler (gcc -S) Asm code (p1.s) Assembler (gcc or as) Object code (p1.

Program Translation. text. text. binary. binary. C program (p1.c) Compiler (gcc -S) Asm code (p1.s) Assembler (gcc or as) Object code (p1. Program Translation Compilation & Linking 1 text C program (p1.c) Compiler (gcc -S) text Asm code (p1.s) binary binary Assembler (gcc or as) Object code (p1.o) Linker (gccor ld) Executable program (p)

More information

Compila(on, Disassembly, and Profiling

Compila(on, Disassembly, and Profiling Compila(on, Disassembly, and Profiling (in Linux) CS 485: Systems Programming Fall 2015 Instructor: James Griffioen 1 Recall the compila(on process/steps 2 Turning C into Object Code Code in files p1.c

More information

Region of memory managed with stack discipline Grows toward lower addresses. Register %esp contains lowest stack address = address of top element

Region of memory managed with stack discipline Grows toward lower addresses. Register %esp contains lowest stack address = address of top element Machine Representa/on of Programs: Procedures Instructors: Sanjeev Se(a 1 IA32 Stack Region of memory managed with stack discipline Grows toward lower addresses Stack BoGom Increasing Addresses Register

More information

Overview REWARDS TIE HOWARD Summary CS 6V Data Structure Reverse Engineering. Zhiqiang Lin

Overview REWARDS TIE HOWARD Summary CS 6V Data Structure Reverse Engineering. Zhiqiang Lin CS 6V81-05 Data Structure Reverse Engineering Zhiqiang Lin Department of Computer Science The University of Texas at Dallas September 2 nd, 2011 Outline 1 Overview 2 REWARDS 3 TIE 4 HOWARD 5 Summary Outline

More information

Systemprogrammering och operativsystem Linker Puzzles. Systemprogrammering 2009 Före lä s n in g 1 Compilation and Linking

Systemprogrammering och operativsystem Linker Puzzles. Systemprogrammering 2009 Före lä s n in g 1 Compilation and Linking Systemrogrammering och oerativsystem 2009 Denna kurs behandlar rogrammering nära oerativsystemet. Det oerativsystem vi använder är Unix (Solaris å Sun-maskiner och Linux å PC), m en rincierna gäller även

More information

Intro x86 Part 3: Linux Tools & Analysis

Intro x86 Part 3: Linux Tools & Analysis Intro x86 Part 3: Linux Tools & Analysis Xeno Kovah 2009/2010 xkovah at gmail Approved for Public Release: 10-3348. Distribution Unlimited All materials is licensed under a Creative Commons Share Alike

More information

Università Ca Foscari Venezia

Università Ca Foscari Venezia Stack Overflow Security 1 2018-19 Università Ca Foscari Venezia www.dais.unive.it/~focardi secgroup.dais.unive.it Introduction Buffer overflow is due to careless programming in unsafe languages like C

More information

CS165 Computer Security. Understanding low-level program execution Oct 1 st, 2015

CS165 Computer Security. Understanding low-level program execution Oct 1 st, 2015 CS165 Computer Security Understanding low-level program execution Oct 1 st, 2015 A computer lets you make more mistakes faster than any invention in human history - with the possible exceptions of handguns

More information

CS , Fall 2002 Exam 1

CS , Fall 2002 Exam 1 Andrew login ID: Full Name: CS 15-213, Fall 2002 Exam 1 October 8, 2002 Instructions: Make sure that your exam is not missing any sheets, then write your full name and Andrew login ID on the front. Write

More information

CS , Fall 2004 Exam 1

CS , Fall 2004 Exam 1 Andrew login ID: Full Name: CS 15-213, Fall 2004 Exam 1 Tuesday October 12, 2004 Instructions: Make sure that your exam is not missing any sheets, then write your full name and Andrew login ID on the front.

More information

CSC 591 Systems Attacks and Defenses Return-into-libc & ROP

CSC 591 Systems Attacks and Defenses Return-into-libc & ROP CSC 591 Systems Attacks and Defenses Return-into-libc & ROP Alexandros Kapravelos akaprav@ncsu.edu NOEXEC (W^X) 0xFFFFFF Stack Heap BSS Data 0x000000 Code RW RX Deployment Linux (via PaX patches) OpenBSD

More information

CSC 405 Computer Security Shellcode

CSC 405 Computer Security Shellcode CSC 405 Computer Security Shellcode Alexandros Kapravelos akaprav@ncsu.edu Attack plan Attack code Vulnerable code xor ebx, ebx xor eax, eax mov ebx,edi mov eax,edx sub eax,0x388 Vulnerable code xor ebx,

More information

Overview of Compiler. A. Introduction

Overview of Compiler. A. Introduction CMPSC 470 Lecture 01 Topics: Overview of compiler Compiling process Structure of compiler Programming language basics Overview of Compiler A. Introduction What is compiler? What is interpreter? A very

More information

Buffer Overflow Attack

Buffer Overflow Attack Buffer Overflow Attack What every applicant for the hacker should know about the foundation of buffer overflow attacks By (Dalgona@wowhacker.org) Email: zinwon@gmail.com 2005 9 5 Abstract Buffer overflow.

More information

Memory and C/C++ modules

Memory and C/C++ modules Memory and C/C++ modules From Reading #5 and mostly #6 More OOP topics (templates; libraries) as time permits later Program building l Have: source code human readable instructions l Need: machine language

More information

1 /* file cpuid2.s */ 4.asciz "The processor Vendor ID is %s \n" 5.section.bss. 6.lcomm buffer, section.text. 8.globl _start.

1 /* file cpuid2.s */ 4.asciz The processor Vendor ID is %s \n 5.section.bss. 6.lcomm buffer, section.text. 8.globl _start. 1 /* file cpuid2.s */ 2.section.data 3 output: 4.asciz "The processor Vendor ID is %s \n" 5.section.bss 6.lcomm buffer, 12 7.section.text 8.globl _start 9 _start: 10 movl $0, %eax 11 cpuid 12 movl $buffer,

More information