Maschinencode Dateiformat und Stackframes

Ähnliche Dokumente
Einführung in die Programmiersprache C

Einführung in die Programmiersprache C

Systemprogrammierung

2Binden 3. und Bibliotheken

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

Dynamisches Speichermanagement

Vorlesung Programmieren

Vorlesung Programmieren

Übungsblatt 10 (Block C 2) (16 Punkte)

Abstrakte C-Maschine und Stack

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

Hacking in C (Windows) Reinhard Oertel

Konzepte von Betriebssystemkomponenten

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

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

Betriebssysteme Teil 4: Übersetzung von C-Programmen

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

6 Speicherorganisation

Dynamisches Binden in Multics

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

Einführung in die Systemprogrammierung

C - Grundlagen und Konzepte Modulare Programmierung und Bibliotheken

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

Matthias Hanreich - TheGreyKnight

Vorlesung Programmieren

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

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

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

Speicherverwaltung (Swapping und Paging)

TA Hacke Dein bewaffnen Sie!

Simulink: Softwareentwurf für eingebettete Systeme ROS-Arduino-Interface. von Christian Schildwächter

PC/XT/AT ASSEMBLER-BUCH

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / Vorlesung 9, Dienstag 18.

Bibliotheks-basierte Virtualisierung

M I K R O P R O Z E SS O R P R A K T I K U M SS2018. Termin1. C-Programmierung für eingebettete Systeme

Grundlagen der Informatik 11. Zeiger

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

Technische Informatik 1 - HS 2015

DHBW Stuttgart Mikrocomputertechnik Labor KEIL Entwicklungsumgebung. Projektstruktur

Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Debugging

Hinweise C-Programmierung

Assembler Unterprogramme

ELF Executable and Linkable Format

Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher

Datenstrukturen, Alignment Stack Prozeduraufruf, Parameterübergabe und -rückgabe (Calling Conventions) Leaf procedures

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

Java Virtual Machine (JVM) Bytecode

Einführung in die C-Programmierung

Embedded-Linux-Seminare. Toolchains

Thomas Binzinger. Jetzt lerne ich. Delphi. Markt+Technik Verlag

Karlsruher Institut für Technologie

Beleg: API für Plugin und Treiberbasierte Softwareentwicklung

Zwei Möglichkeiten die TLB zu aktualisieren

Propädeutikum. Dipl.-Inf. Frank Güttler

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

Betriebssysteme KU - Einführungstutorium

DieÜbersetzung funktionaler Programmiersprachen

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.

U23 Assembler Workshop

Übersicht. Speichertypen. Speicherverwaltung und -nutzung. Programmieren in C

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

Übung 1 - Betriebssysteme I

C- Kurs 08 Zeiger. Dipl.- Inf. Jörn Hoffmann leipzig.de. Universität Leipzig Ins?tut für Informa?k Technische Informa?

Welche Register werden zur Parameterübergabe verwendet? In welcher Reihenfolge werden die Parameter auf dem Stack bzw. in den Registern abgelegt?

Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015

Institut für Informatik Prof. Dr. D. Hogrefe Dipl.-Inf. R. Soltwisch, Dipl.-Inform. M. Ebner, Prof. Dr. D. Hogrefe Informatik II - SS 04.

Speicherverwaltung in C

Systemstart und Programmausführung

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

Einleitung Funktionsaufrufe Berechnungen Verzweigungen Systemaufrufe Speicherzugriffe Fazit Quellen. Laufzeitkosten in C.

Totalview. Henrichs NEC Australia. Dieter an Mey

Grundbegriffe der Informatik

Modulare Programmierung und Bibliotheken

Betriebssysteme Teil 3: Laufzeitsystem für Programme

8. Referenzen und Zeiger

Zeiger in C und C++ Zeiger in Java und C/C++

Proseminar - Zeiger in C

Dynamische Speicherverwaltung

Funktionen in JavaScript

U23 Assembler Workshop

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Grundlagen der Stackorganisation und -adressierung

Beim Programmieren mit MMIX habt ihr vielleicht schon öfter eine der folgenden Fehlermeldungen von MMIXAL bekommen:

Speicher und Adressraum

Methoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR.

Transkript:

Maschinencode Dateiformat und Stackframes Proseminar C-Programmierung - Grundlagen und Konzepte Julian M. Kunkel julian.martin.kunkel@informatik.uni-hamburg.de Wissenschaftliches Rechnen Fachbereich Informatik Universität Hamburg 27-05-2011 1 / 28

Motivation Hintergründe verstehen für Fehleranalyse Hacking Code-Optimierung Code von verschiedenen Sprachen gemeinesam nutzen 2 / 28

1 Dateiformat 2 Stack 3 Backtrace 4 Hacking 3 / 28

1 Dateiformat 2 Stack 3 Backtrace 4 Hacking 4 / 28

Fragen Woher weiß der Linker wie Objektdateien zusammen gehören? Wie werden Programme in den Speicher geladen? 5 / 28

Executable and Linking Format (ELF) Dateiarten Executable: Ausführbare Datei Relocatable: Objekt Datei Shared object: Bibliothek ELF Beschreibt Inhalte der Binärdateien Zwei Sichten: Programmausführung vs. Compilierung Programmkopf-Tabelle zeigt auf Segmente Sektionen enthalten informationen für Linker und Relocation DWARF bettet Debugging Informationen in ELF ein... 6 / 28

ELF Aufbau Figure: ELF file structure 1 1 Surueña, "Layout of an ELF file", http://en.wikipedia.org/wiki/executable_and_linkable_format, 23.05.2011 7 / 28

Wichtigste Bestandteile der Objektdateien (RO)Data : Datensegment, enthält initalisierte globale und statische Variablen BSS : Block Started by Symbol, 0-initalisierte statische Variablen Text : Enthält ausführbaren Maschinencode Symboltabelle: Symbolnamen für den Linker relevant Dynsym : Enthält globale Symbole ist zur Laufzeit bekannt 8 / 28

Frage an das Publikum Warum gibt es Dynsm und eine normale Symboltabelle? 9 / 28

Figure: Executing an ELF file 2 2 Jhawthorn, "Executable image and elf binary can being mapped onto each other", http://wiki.osdev.org/elf, 23.05.2011 10 / 28

Werkzeuge nm Symbole von Objektdateien anzeigen objdump Objekt-Dateien analysieren -d Code disassemblieren -s Inhalt der Sektionen -t Symboltabelle -T Dynamische Symboltabelle Symbole zur dynamischen Symboltabelle hinzufügen mit: gcc -rdynamic Symboltabelle und andere (überflüssigen) Bereiche entfernen: strip Assembler erzeugen: gcc -S <DATEI.c> 11 / 28

Dynamische Symbole Bibliotheken Shared-libraries stellen Dsym zur Verfügung Programm-Loader lädt Shared-Libaries Manuelle Verwendung Zur Laufzeit Code nachladen Module programmieren dlopen(), dlsym(), dlclose() 12 / 28

Demo: stackframe-simple.c 13 / 28

1 Dateiformat 2 Stack 3 Backtrace 4 Hacking 14 / 28

Stapelspeicher LIFO Speicherbereich Schnellere/Leichtere Verwaltung als Heap Jeder Thread bekommt einen Stack zugewiesen Stack wächst Richtung niedrigerer Adresse Funktionsaufrufe als Stack-Frame auf Stack speichern 15 / 28

Stack-Frame Adressierung von Variablen Addressierung relativ zu dem Start des Frames Base-Pointer zeigt auf Start des Frames Stack-Pointer zeigt auf Ende des Stacks Bei Funktionsaufruf Alten IP und BP merken Lokale Variablen auf Stack reservieren Registerzustand speichern BP, IP und SP umsetzen Zeitaufwand 16 / 28

Stack-Frame Figure: Stack-Frame 3 3 Steve Friedl, "", http://www.unixwiz.net/techtips/win32-callconv-asm.html, 23.05.2011 17 / 28

Aufrufkonventionen Varianten cdecl: Nutzung des Stacks für Parameter und Rückgabewerte Variablen Parameteranzahl Aufrufer bereinigt Stack stdcall: Feste Anzahl an Parametern für eine Funktion Funktion entfernt Parameter von Stack selbst Optimierungen Register: Parameter werden in Registern abgelegt Frame Pointer Omission: Verwende SP zur Adressierung 18 / 28

Verschiedenes Stackspeicher nutzen alloca reserviert Speicher auf Stack Vorsicht: Nach Stackabbau ungültig Vorsicht: Größe des Stacks ist limitiert Stackgröße Vom System oder zur Kompilezeit eingestellt Unter Linux mittels ulimit -a anzeigen oder verändern 19 / 28

1 Dateiformat 2 Stack 3 Backtrace 4 Hacking 20 / 28

Backtrace Ein Backtrace ermittelt die IP s der aufrufenden Funktionen Name der Funktion in welcher der IP gerade steht? GNU C Library (libc) stellt Backtraces zur Verfügung Funktionsnamen in dynamischer Symboltabelle benötigt 21 / 28

Demo: backtrace.c mit objdump und -rdynamic 22 / 28

1 Dateiformat 2 Stack 3 Backtrace 4 Hacking 23 / 28

Hacking der Stack-Frames Gespeicherten Rücksprungadresse auf Stack umsetzen Bei Verlassen der Funktion wird anderer Code ausgeführt Basis von Buffer-Overflow Angriffen Lokale Variable überschreibt gespeicherten IP 24 / 28

Stack-Frame hacken Figure: Stack-Frame 4 4 Steve Friedl, "", http://www.unixwiz.net/techtips/win32-callconv-asm.html, 23.05.2011 25 / 28

Demo: hacked.c 26 / 28

Zusammenfassung Compilezeit vs. Laufzeit ELF: Code, Datenbereiche, Symbolltabelle(n) ELF Dateien mit objdump analysieren Stack-Frames speichern Funktionsaufrufe Backtraces verstehen Symboltabelle und Stack-Frames! 27 / 28

Literatur AMD. Amd64 instruction-level debugging with sun studio dbx. A. Bahrami. Inside elf symbol tables. S. Friedl. Intel x86 function-call convetions assembly view. G. L. Manual. Backtraces. A. Müller. Der stack frame. OSDev. Elf. Phillip. Using assembly language in linux. Wikipedia. 28 / 28