ELF Executable and Linkable Format

Ähnliche Dokumente
E Das ELF-Binärformat

Inhaltsverzeichnis. 9.1 Einführung 9.2 Die Objekt-Datei. 9.3 Der Linker. 9.4 Der Lader. Inhalt von Objekt-Dateien Beispiele:.COM, a.

Maschinencode Dateiformat und Stackframes

Konzepte von Betriebssystemkomponenten

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C

Systemprogrammierung

2Binden 3. und Bibliotheken

Facharbeit Informatik. Virale Infektionen. Eingereicht bei Herrn Durdel. Vorgelegt von. Victor Dorneanu

Sicheres C Programmieren in Embedded Systemen ARM I (ARM7TMDI [1] ) Wintersemester

Echtzeitbetriebssysteme

Linux Paging, Caching und Swapping

Konzepte von Betriebssystem-Komponenten. Programmstart & dynamische Bibliotheken SS 05. Wladislaw Eckhardt.

Konzepte von Betriebssystemkomponenten Referat am Thema: Adressräume, Page Faults, Demand Paging, Copy on Write Referent: Johannes Werner

Betriebssysteme Übung 2. Tutorium System Calls & Multiprogramming

Technische Informatik 1 - Übung 3 3. & 4. November Philipp Miedl

Betriebssysteme I: Speicherverwaltung (Teil A: Adress-Bindung)

Programm in Source-Files aufteilen Erhöht Lesbarkeit Aufteilung orientier t sich an logischer Struktur des Programms Getrenntes Übersetzen möglich:

Einführung in die Programmiersprache C

Linker: Adreßräume verknüpfen. Informationen über einen Prozeß. Prozeß-Erzeugung: Verwandtschaft

Zwei Möglichkeiten die TLB zu aktualisieren

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Buffer Overflow 1c) Angriffsstring: TTTTTTTTTTTTTTTT (16x) Beachte: Padding GCC-Compiler Zusatz: gcc O2 verhindert hier den Angriff (Code Optimierung)

C - Grundlagen und Konzepte Modulare Programmierung und Bibliotheken

Embedded-Linux-Seminare. Toolchains

Computeranwendung in der Chemie Informatik für Chemiker(innen) 3. Software

Hinweise C-Programmierung

Freispeicherverwaltung

Speicher- und Cacheverwaltung unter Linux. Ralf Petring & Guido Schaumann

Einführung in die C-Programmierung

Bibliotheks-basierte Virtualisierung

Rechnerarchitektur und Betriebssysteme (CS201): Virtual Memory

Betriebssysteme, Rechnernetze und verteilte Systeme 1. Crashkurs C (2)

TA Hacke Dein bewaffnen Sie!

Betriebssysteme KU - Einführungstutorium

Malware-Analyse und Reverse Engineering. 13: Rückblick über das Semester Prof. Dr. Michael Engel

1A05 64-bit Adressierung unter Alpha OpenVMS

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Sicheres C Programmieren in Embedded Systemen ARM II (ARM7TMDI [1] ) Wintersemester

Typ : void* aktuelle Parameter Pointer von beliebigem Typ

javascript Coding-Guidelines 2. Ausgabe Februar 2015 Der Guideline beschreibt den verwendeten Coding-Stil von javascript als eigene Richtline.

Übungen zu Systemprogrammierung 1 (SP1)

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Einführung in die Systemprogrammierung

Speicherverwaltung in Minix

Erlangen von Administrator-Privilegien unter Microsoft Windows NT 4.0 durch Ausnutzung einer Sicherheitslücke im Systemcache

FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren

5.4 Segmentierung. Einfachstes Beispiel: 1 Code-Segment + 1 Datensegment. 0 codelength 0 datalength. bs-5.4 1

Speicherverwaltung in C

Systemstart und Programmausführung

Speicherklassen (1) Lokale Variablen

Übungen zu Grundlagen der Rechnerarchitektur und -organisation: Bonusaufgaben Übung 9 und Präsenzaufgaben Übung 10

MMC/SD FAT 16 mit AVR und C

Eine Mini-Shell als Literate Program

Embedded-Linux-Seminare. Linux als Betriebssystem

Systemprogrammierung.: unter Linux :.

Übung 1 - Betriebssysteme I

Konzepte von Betriebssystem-Komponenten. Programmstart & dynamische Bibliotheken SS 05. Wladislaw Eckhardt.

Arrays (Felder/Vektoren)

Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher

Kapitel VI. Speicherverwaltung. Speicherverwaltung

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff

Threads. Netzwerk - Programmierung. Alexander Sczyrba Jan Krüger

Wie groß ist die Page Table?

6 Speicherorganisation

Linux Prinzipien und Programmierung

U23 - Shellcode. Twix Chaos Computer Club Cologne. Motivation Einstieg Der erste Shellcode Nullbytes, NOP Slides

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Betriebssysteme Teil 4: Übersetzung von C-Programmen

Deklarationen in C. Prof. Dr. Margarita Esponda

Die Bibliothek SysLibFile.lib

1 RPC-Protokoll-Definitionssprache (Protocol Definition Language )

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Barcode Master. Barcode Generator für PC Windows und MAC OS. Bedienungsanleitung und Handbuch. Version 1.1. Dr.J.Willrodt /

C programmieren. Jürgen Wolf

GI Vektoren

V by WBR1/BFH-TI 2011 by MOU2/BFH-TI

Dynamisches Binden in Multics

Funktionen in JavaScript

Teil I Debuggen mit gdb

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15

Programmierkurs C/C++

Transkript:

ELF Executable and Linkable Format Hagen Paul Pfeifer www.jauu.net 18. April 2005 Typeset by FoilTEX

Prologue Binärformat ELF Executable and Linkable Format Entwickelt und veröffentlicht durch UNIX System Laboratories portabel (Plattformen, little big Endian... ) Ziel: Reduzierung des Aufwands bei Portierung (z.b. keine festen Addressen) -shared als Richter für ld (DSO oder statisch) Typeset by FoilTEX 1

Format. ELF Header Program Header Table optional Section 1... Section n... Section Header Table. ELF Header Program Header Table Segment 1... Segment n... Section Header Table optional Representation Linking Representation Execution Typeset by FoilTEX 2

Sichtweisen benötigt beim Programmbau komplexer Aufbau Linking View Betrachtung bei Linkvorgang Executation View Betrachtung bei Programmausführung Typeset by FoilTEX 3

Linking View unterteilt Datei in verschiedene Sektionen Name und Typ Rechte Typeset by FoilTEX 4

Executation View relativ einfacher Aufbau Unterteilung in Segmente Beschreibt, was in Speicher eingeblendet werden muss Lage von Daten Segmente Typ gewünschte Speicheraddresse Typeset by FoilTEX 5

Rechte Größe in Datei/Speicher Typeset by FoilTEX 6

Executable File bash$ vim Dynamisch gelinkt? Statisch? Programm Table (PT INTERP) Laden des dymanischen Linkers do mmap Userprogramm starten des Linkers Typeset by FoilTEX 7

Object File Format reloctable file verschiebbare Dateien, welche nach denm Linken ein auführbares Programm darstellen executable file ausführbares Datei, welche Informationen über die Erzeugung eines Images enthält shared object file kann von verschiedenen Programmen gleichzeitig genutzt werden (zwei mal linken) Typeset by FoilTEX 8

Konzept der geteilten Bibliotheken Entwickler sind Sammler (spart Entwicklungszeit, reduziert Fehler) lsof wc -l 2100 moderne OS können Code teilen => einmal physikalisch, mehrmals virtuell Kein neues Konzept (sk buff, fork(),... ) Jetzt kommt ELF ins Spiel Binärformat beschreibt Anwendungscode a.out und COFF als kränkelnde Vorväter Typeset by FoilTEX 9

a.out nicht für shared libraries konzipiert keine Programmverlagerung zur Ladezeit möglich feste Ladeaddressen Konflikt vermeidung bei Addressvergabe (größere Dimensionierung) Stubs als Platzhalter für Addressen schnell(e ste) Symbolauflösung Typeset by FoilTEX 10

Addressüberlappung nicht ausgeschlossen, Speicher stark fragmentiert Typeset by FoilTEX 11

Statisch gegen Dynamisch Round 1 Statisch selbstbeschreibend kein externer Code/Daten notwendig Dynamisch benutzt externe/n Code/Daten (shared libraries) kleinere Programme weniger Plattenspeicher gewöhnlich Typeset by FoilTEX 12

statisch gelinktes Programm Programmablauf bekannte statische Einsprungsadresse Einblenden in den Speicher (do mmap()) Kontrolle an Programm (%EIP) Typeset by FoilTEX 13

Programmausführung execve() kein simples mmap(vim); ELF ist Struktur pur Typeset by FoilTEX 14

ELF Konstrukt(abstrakt) Code (ausführbar, schreibgeschützt) Daten (nicht ausführbar, beschreibbar) Daten (nicht ausführbar, beschreibbar, nicht benötigt zum Programmstart) whereis code? Definiert in Programm Header Table! Typeset by FoilTEX 15

dynamisch gelinktes Programm Programmablauf Datei öffnen mappen der LOAD Segmente in den Speicher dynamischen Linker starten und fd übergeben Kontrolle den Programm übergeben d. Linker überprüft die benötigten Bibliotheken erhält Information in der DYNAMIC Segment Typeset by FoilTEX 16

mapped Bibliotheken in den Speicher (z.b. DT NEEDED) modifiziert Programm(für Zugriff auf Bibliotheksroutinen/Daten) Relocation Typeset by FoilTEX 17

ELF Header (/include/linux/elf.h) #define EI_NIDENT 16 typedef struct elf32_hdr{ unsigned char e_ident[ei_nident]; Elf32_Half e_type; Elf32_Half e_machine; Elf32_Word e_version; Elf32_Addr e_entry; /* Entry point */ Elf32_Off e_phoff; Elf32_Off e_shoff; Elf32_Word e_flags; Elf32_Half e_ehsize; Elf32_Half e_phentsize; Elf32_Half e_phnum; Elf32_Half e_shentsize; Elf32_Half e_shnum; Elf32_Half e_shstrndx; } Elf32_Ehdr; Typeset by FoilTEX 18

Program Header Table (/include/linux/elf.h) typedef struct elf32_phdr{ Elf32_Word p_type; Elf32_Off p_offset; Elf32_Addr p_vaddr; Elf32_Addr p_paddr; Elf32_Word p_filesz; Elf32_Word p_memsz; Elf32_Word p_flags; Elf32_Word p_align; } Elf32_Phdr; Typeset by FoilTEX 19

Beispiele für Headertable Typen LOAD Teil soll in Speicher gemappt werden INTERP enthält String welcher den dynamischen Linker bestimmt DYNAMIC Zeiger zu Information für Linkprozess (.dynamic Section) Typeset by FoilTEX 20

Program Header Table Interna Segmente mit PT LOAD in p type sind relevant p offset und p filesize bestimmen Standpunkt p vaddr und p memsize spezifizieren virtuelle Addresse p memsize > p filesize fülle mit Nullen (bss!) p flags bestimmen Modus für Speicherseite (1 = exec;2 = write;4 = read) Typeset by FoilTEX 21

PT LOAD werden in Speicher gemappt (vom Programm) dynamischer Linker wird auf die gleiche Weise vorbereitet PT INTERP; String unter p offset gemappt in den Speicher auxiliary vector wird auf Stack angelegt %eip wird nun auf e entry im dynamischen Linker gesetzt Typeset by FoilTEX 22

Start des Dynamischen Linkers Grundsätzliches Bestimmung und Laden der Abhängigkeiten Neuanordnung der Anwendung und ihrer Abhängigkeiten Initialisierung der Anwendung und Abhängigkeiten in der richtigen Reihenfolge Typeset by FoilTEX 23

Neuanordung (relocation) der Symbole Zeitaufwendigste Teil eines d. Linkers(vgl. OpenOffice) Neuanordung für alle Symbole, welche benötigt werden (Lazy Binding) Bestimmung des Hash Wertes für ein Symbol Vergleichen des Hash Buckets mit eben bestimmten Hashwert Offset für korrospondierenden Symbol-Namen bestimmen Vergleichen des Symbolnamens mit neuangeordneten Namen Stimmt Vergleich überein, Version überprüfen Typeset by FoilTEX 24

Bei Abweichungen im Vergleich neuen Hash Bucket aus Liste vergleichen Typeset by FoilTEX 25

GOT und PLT Global Offset Table; Procedure Linkage Table -fpic erzeugt positionsunabhängigen Code relative Variablen Adressen werden in GOT gespeichert relative Funktionsaddressen werden in PLT gespeichert Typeset by FoilTEX 26

PLT.plt section erlaubt Programm den Aufruf von Funktionen die während der Compilierzeit nicht vorhanden waren (z.b. printf()). Ist Sammlung von Functions Stubs bei relocation werden Stubs auf echte Addressen gesetzt Stichwort lazy bindig Typeset by FoilTEX 27

GLT ähnlich wie PLT, aber nicht für Funktionen, sondern Variablen (z.b. errno) Typeset by FoilTEX 28

Program Section Table (/include/linux/elf.h) typedef struct { Elf32_Word Elf32_Word Elf32_Word Elf32_Addr Elf32_Off Elf32_Word Elf32_Word Elf32_Word Elf32_Word Elf32_Word } Elf32_Shdr; sh_name; sh_type; sh_flags; sh_addr; sh_offset; sh_size; sh_link; sh_info; sh_addralign; sh_entsize; Typeset by FoilTEX 29

Reloctable file enthält.text und.data Segmente welche für weiteres Linking geeignet sind. executable oder shared object file Typeset by FoilTEX 30

Tools readelf gdb ht-editor objdump strace ltrace Typeset by FoilTEX 31

nm ldd lsof Papier und Bleistift ;-) Typeset by FoilTEX 32

Literatur Executable and Linkable Format (ELF) Manual ftp.intel.com (pub/tis/elf11g.zip) http://www.linuxjournal.com/article.php?sid=1060 Kernel Quellen (lxr Quelltextbrowser) Manual Pages Typeset by FoilTEX 33