Software Security. Andreas Kostecka Alexander Miller Patrick Rappensberger
|
|
|
- Arnim Cornelius Lange
- vor 10 Jahren
- Abrufe
Transkript
1 Software Security Andreas Kostecka Alexander Miller Patrick Rappensberger
2 Inhalt Buffer Overrruns Integer Overflows Heap-Overflow Attack Format String Attack SQL Injection
3 Buffer Overrruns Was ist 'Buffer Overrun'? Typisches Pattern Begriffserklärungen Demo (C/C++) Genauer erklärt 1-2/2 Reale Demo mit Disassembler Ausgaben von disas Gegenprogramm + Anwendung Weitere C/C++ Beispiele Vorbeugung
4 Was ist ein Buffer Overrun'? Smashing the Stack Stack Buffer Overrun Stack speichert die Kontrollstrukturen des Programms (return Adressen der Funktionen) Bei x86 Prozessoren kleine Anzahl von Register Register auf Stack auslagern Programm schreibt über Array Größe hinaus Angreifer erhält Zugriff auf diese Kontrollstrukturen
5 Typisches Pattern Irgendwelcher Input (Netzwerk, Datei, Befehlszeile) Transferieren dieses Inputs zu einer Programm - internen Struktur Unsicheres Behandeln von Strings Berechnung des zu allozierenden Speichers oder des Restbuffers
6 Begriffserklärungen EBP: Base Pointer EIP: Instruction Pointer (Rücksprungadresse) ESP: Stack Pointer Frame Pointer = Stack Pointer
7 Demo (C/C++) #include <stdio.h> #include <string.h> void DontDoThis(char* bar); void DontDoThis(char* bar) { char c[12]; strcpy(c,bar); printf("%s\n",c); } int main(int argc, char* argv[]){ DontDoThis(argv[1]); //Argument unüberprüft return 0; }
8 Genauer erklärt 1/2 Argument: hello Little Endian Prinzip (niederwertigstes Byte zuerst, hier 'h') Im EIP wird Return Adresse gespeichert (4 Byte) Stackpointer + Variable (8 Byte) 20 Byte zu schreiben + Returnadresse (4 Byte)
9 Genauer erklärt 2/2 Anstatt von Hello World wird hier 20*A und die Zieladresse geschrieben EIP wird überschrieben Anstatt A...A kann und würde etwas anderes stehen Argument: A... A \x08 \x35 \xc0 \x80
10 Datei main.c: #include <stdio.h> #include <stdlib.h> #include <string.h> Reale Demo mit Disassembler void Done(void); const char * const BrokenFunction(void); int main(){ printf("you wrote: `%s'\n", BrokenFunction()); return 0;} const char * const BrokenFunction(void){ char buf[128]; gets(buf); return strdup(buf);} void Done(void){ printf("got it!\n"); exit(0);} Gdb: Gnu Project Debugger gcc -o main main.c gdb main führt gdb auf main aus disas Done und disas BrokenFunction: gdb untersucht die beiden Funktionen
11 Datei main.c: #include <stdio.h> #include <stdlib.h> Ausgaben von disas #include <string.h> void Done(void); const char * const BrokenFunction(void); int main(){ printf("you wrote: `%s'\n", BrokenFunction()); return 0;} const char * const BrokenFunction( void ){ char buf[128]; gets(buf); return strdup(buf);} void Done( void ){ printf("got it!\n"); exit(0);} (gdb) disas Done Dump of assembler code for function Done: 0x <Done+0>: push %ebp 0x a <Done+1>: mov %esp,%ebp 0x c <Done+3>: sub $0x8,%esp 0x f <Done+6>: movl $0x80485b9,(%esp) 0x <Done+13>: call 0x804832c <puts@plt> 0x b <Done+18>: movl $0x0,(%esp) 0x <Done+25>: call 0x804835c <exit@plt> End of assembler dump. (gdb) disas BrokenFunction Dump of assembler code for function BrokenFunction: 0x <BrokenFunction+0>: push %ebp 0x <BrokenFunction+1>: mov %esp,%ebp 0x b <BrokenFunction+3>: sub $0x88,%esp 0x <BrokenFunction+9>: lea 0xffffff80(%ebp),%eax 0x <BrokenFunction+12>: mov %eax,(%esp) 0x <BrokenFunction+15>: call 0x804831c <gets@plt> 0x c <BrokenFunction+20>: lea 0xffffff80(%ebp),%eax 0x f <BrokenFunction+23>: mov %eax,(%esp) 0x <BrokenFunction+26>: call 0x804830c <strdup@plt> 0x <BrokenFunction+31>: leave 0x <BrokenFunction+32>: ret End of assembler dump.
12 Datei main.c: #include <stdio.h> #include <stdlib.h> #include <string.h> Gegenprogramm Datei exploit.c: void Done(void); const char * const BrokenFunction(void); int main(){ printf("you wrote: `%s'\n", BrokenFunction()); return 0;} const char * const BrokenFunction( void ){ char buf[128]; gets(buf); return strdup(buf);} void Done( void ){ #include <stdio.h> #include <stdlib.h> #include <string.h> //Unsere Adresse: 0x //Wir brauchen: 132 bytes: EBP int main(int args, char **argv) { int i = 0; for(i = 0; i < 22; i++) printf("hallo!"); //Bringt die Adresse auf 4 Byte, unsigned unsigned EIP = 0x ; fwrite(&eip, 1, 4, stdout); printf("got it!\n"); exit(0);} } return 0;
13 Anwendung gcc -o exploit exploit.c./exploit./main Ausgabe: Got it!
14 Weitere C/C++ Beispiele Beispiel 1: char buf[20]; gets(buf); Beispiel 2: char buf[32]; strncpy(buf, data, strlen(data)); Beispiel 3: #define MAX_BUF 256 void BadCode(char* input) { short len; char buf[max_buf]; len = strlen(input); //of course we can use strcpy safely if(len < MAX_BUF) strcpy(buf, input); } Beispiel 4: const size_t MAX_BUF = 256; void LessBadCode(char* input) { size_t len; char buf[max_buf]; len = strlen(input); //of course we can use strcpy safely if(len < MAX_BUF) strcpy(buf, input); }
15 Vorbeugung Unsichere String Operationen ersetzen (strcpy(), strcat(), sprintf() vermeiden) In C++ die STL (Standard Template Library) anstatt Arrays verwenden Bei Schleifen und Array Zugriffe aufpassen C String Buffer mit C++ Strings ersetzen
16 Integer Overflows Allgemeines Folgen in der realen Welt Wo enstehen 'Integer Overflows'? Casting Operations Type Conversions Arithmetische Operationen 1-3/3 Binäre Operationen Java und C# Vorbeugung
17 Allgemeines Betroffen sind alle Sprachen Effekt ist unterschiedlich C/C++ gefährlich (Buffer Overruns) Andere Folgen: Logische Errors, falsche Funktionalität Angreifer versucht, das Programm dazu zu bewegen, Speichergrößen falsch zu berechnen Heap Overflow
18 Folgen in der realen Welt Explosion der Ariane 5 Satelliten Rakete (4. Juni 1996) wegen Cast von 64 Bit Floating Point zu 16 Bit signed Integer Golf Krieg, 25. Februar 1991, Dharan: Eine irakische Scud Rakete wurde vom Patriot Raketenabwehrsystem übersehen Grund: Präzisionsverlust bei der Berechnung der Zeit (1/10 in 24Bit Register) )
19 Wo entstehen 'Integer Overflows'? Casting Operationen Type Conversions Arithmetische Operationen Binäre Operationen
20 Casting Operations const long MAX_LEN = 0x7fff; short len = strlen(input); if(len < MAX_LEN) //do something len = 0x0100; (long)len = 0x ; oder len = 0xfff; (long)len = 0xffffffff; Vergleich nur bei gleichem Typ möglich Upcast von 16 Bit Integer zu 32 Bit Integer Wert wird mit Zeichen bis zur gleichen Länge erweitert Wird der Wert von len > 32K Wert wird negativ
21 Type Conversions bool IsValidAddition(unsigned short x, unsigned short y) { if(x +y < x) return false; } return true; Vergleichsoperatoren befolgen die selben Conversion Regeln wie arithmetische Operatoren (short * short = int) Obiges Beispiel: Es soll untersucht werden, ob es einen Überlauf gegeben hat Jedoch wird das nie zutreffen (bzw. immer true werden): unsigned short + unsigned short wird upgecastet zu Integer, und dieser Integer Wert kann niemals überlaufen Richtig gestellt: if ((unsigned short) (x + y) < x)
22 Arithmetische Operationen 1/3 4 verschiedene Fälle: Unsigned und signed Operationen mit den selben Typen Gemischte Operationen mit gemischten Typen
23 Arithmetische Operationen 2/3 Addition und Subtraktion: Maximale Werte beachten (Überlauf) Bei signed Werte für Größen auf negative Werte aufpassen Beispiel: Buffergröße mind. 50 Byte 50Bytes- 30Bytes=20Bytes, 20 Bytes allozieren, dann die 50 Bytes in Buffer kopieren Buffer Overrun
24 Arithmetische Operationen 3/3 Multiplikation: Maximale Werte beachten (Überlauf), auf negativ Werte achten Division: Minimalwerte kritisch, unsigned Werte einfacher zu Validieren Modulus: Kann falschen Wert zurückgeben durch Casting
25 Binäre Operationen int flags = 0x7f; char LowByte = 0x80; if((char)flags ^ LowByte == 0xff) //^ ist logisches XOR return ItWorked; Erwartungswert: 0xff Compiler castet beide Werte zu Integer Werte Flags wird zu 0x f erweitert und LowByte zu 0xffffff80 Ergebnis = 0xffffffff Problem: flags ist vorzeichenbehaftet, LowByte aber nicht!
26 Java und C# Wie C/C++ bietet Java keine eigene 'Defence' gegen Integer Overflows Java besitzt nur signed Typen (außer char) Untersuchen auf Overflow ist schwieriger C# besitzt zwar keinen direkten Speicherzugriff, macht aber manchmal System API Calls Überwachen In C# genau auf Integer Exceptions achten
27 Vorbeugung Jede Berechnung der Speichergröße darauf überprüfen, dass die Arithmetik nicht überlaufen kann Alle Berechnungen für Array - Indizes auf möglichen Überlauf überprüfen Unsigned Werte verwenden für Array Offsets und Speichergrößen Auf signed Werte achten Nicht davon ausgehen, dass andere Sprachen als C/C++ immun gegen Integer Overflows sind
28 Heap-Overflow Attack ist ein Buffer-Overflow auf dem Heap Beliebiger Code kann ausgeführt werden Daten können verändert werden Vor allem C\C++ ist betroffen
29 Was ist der Heap? Speicherbereich bei dem zur Laufzeit Daten gespeichert werden Verwaltung des Heap ist sehr kompliziert Unterschied zum Stack: Datenstrukturen müssen explizit angefordert werden. i= malloc(256*sizeof(char));
30 Demo (Manipulation von Daten) #include <stdio.h> #include <stdlib.h> #include <string.h> #define BUFSIZE 16 #define OVERSIZE 8 int main(int argc, char * argv[]) { unsigned int diff; char *buf1 = (char *)malloc(bufsize); char *buf2 = (char *)malloc(bufsize); diff = (unsigned int)buf2 - (unsigned int)buf1; printf("buf1 = %p, buf2 = %p, diff = %d bytes\n",buf1,buf2,diff); memset(buf2,'a',bufsize-1); buf2[bufsize-1] = '\0'; printf("before overflow: buf2 = %s\n",buf2); memset(buf1,'b',(unsigned int)(diff + OVERSIZE)); printf("after overflow: buf2 = %s\n",buf2); } return 0;
31 Resultat buf1 = 0x900b008 buf2 = 0x900b020 diff = 24 bytes before overflow: buf2 = AAAAAAAAAAAAAAA after overflow: buf2 = BBBBBBBBAAAAAAA
32 Was ist passiert? buf1 buf2 A A A A A A A A buf1 Falsche Größe von buf1 buf2 B B B B B B B B B B B A A A A A
33 Gegenmaßnahmen User Input immer überprüfen Falls möglich Programmiersprachen mit Memory Saftey verwenden (Java ) Manche Betriebssysteme sind resistent Statt strcpy() strncpy() verwenden
34 Format String Attack Fehler liegt im Vertrauen in den Benutzer Vor allem C\C++ ist betroffen Kann als Vorbereitung für eine andere Attacke verwendet werden
35 Allgemein Betroffen ist der Program-Stack (oder Heap) Durch geeignete Format Specifier kann der Stack ausgelesen und manipuliert werden! Selbst Werte von Variablen können verändert werden!
36 Format String & Format Specifier Ist ein String der Text enthält Format Specifier werden verwendet um formatierte Ausgabe zu erzeugen F.Specifier Gutwillige Verwendung %x %c %d Gibt einen bestimmten Dateityp aus %s Gibt einen String aus Problem beim Parsen des Format String
37 Beispiel Format String (Stack) printf ( i: %d, j; %d j (address): %x", i, j, &j); &j Die Adresse der Variable j j i fs Der Wert der Variable j Der Wert der Variable i Die Adresse des Format String
38 Attack Daten manipulieren/ auslesen F.Specifier Böswillige Verwendung %x %c %d Ließt einen Teil des Stacks aus %s Gibt einen String vom Stack aus %n Gibt einen Integer aus der angibt wieviele Character geschrieben worden sind Programme zum Absturz bringen printf( %s%s%s%s%s%s%s%s%s%s%s );
39 Demo #include <stdlib.h> int main(int argc, char * argv[]) { int x = 1; int y = 2; printf(argv[1]); printf("\nx is %x",x,&x); } return 0;
40 Resultat "%s%s%s%s%s%s Segmentation fault (core dumped) "%x %x %x %x %x %x %x %x bfc7d724 bfc7d730 b756da85 b x is bfc7d678 misterp@amilo:~$./formatstringattackdemo "%x %x %x %x %x %x %x %x bfc26fa4 bfc26fb0 b75eaa85 b x is bfc26ef8
41 Gegenmaßnahmen Seitens des Betriebssystems: ASLR Falls C++ verwendet wird: cout verwenden Warnungen des Compilers ernst nehmen! printf( %s,output) statt printf(output)
42 SQL Injection Attacke auf Applikationen, die mit vielen Daten arbeiten Webseiten Login Firmen Schulen
43 Ziele Schaden Mehr Informationen über das System Nutzdaten
44 Szenario HTML Form mit Userinput Backend: SQL Query SELECT * FROM Zeug WHERE TYP='Socken'
45 Attacke SQL Statements im Input! Userinput wird nicht überprüft SELECT * FROM Zeug WHERE TYP='Socken'; DROP TABLE Zeug;
46 Escaping Unterstützt von allen guten DB Driver db.query( SELECT * FROM Zeug WHERE TYP=?, [userinput]); Durch Entwickler: db.query( SELECT * FROM Zeug WHERE TYP= + sql_escape(userinput));
47 Blind SQL Injection SQL Injection ohne Rückmeldung an Angreifer Andere Wege, um Erfolg und Misserfolg zu erkennen: Fehlermeldungen (zb Blank vs 404) Antwortzeiten
48 Berühmte Beispiele 2011: LulzSec und Sony 2011: mysql.com (Blind SQL Injection)
49 Gegenmaßnahmen Strikte Berechtigungen im DBS Escaping von Userinput Durch Applikationsentwickler Durch DB Driver Pattern check (Regular expressions)
50 Quellen Literatur: Michael Howard, 24 Deadly Sins of Software Security ( ) Tim Newsham,Guardent, Inc., Format String Problems scut / team teso,exploiting Format String Vulnerabilities / Stanford Webseiten: Wikipedia.org Matt Conover & w00w00 Security Development,
51 Quellen overflow-tutorial-teil-1-grundlagen/tutorials-t html Nachrichten-Quellen: z.security.hits.sony.again.in.security.message/
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
Ü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
Sicherheit in Software
Sicherheit in Software Fabian Cordt und Friedrich Eder 3. Juni 2011 Allgemeines Begriffserklärung Woher Die 19 Todsünden 1 - Teil 2 - Teil 3 - Teil Was kann passieren Probleme beim Porgramm Durch Lücken
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
Zählen von Objekten einer bestimmten Klasse
Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --
Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff
Programmieren in C Felder, Schleifen und Fließkommaarithmetik Prof. Dr. Nikolaus Wulff Addition von Zahlen 1 2 3 4 5 #include int main() { int x,y,z,sum; x = 1; y = 2; z = 4; sum = x + y + z;
Felder, Rückblick Mehrdimensionale Felder. Programmieren in C
Übersicht Felder, Rückblick Mehrdimensionale Felder Rückblick Vereinbarung von Feldern: typ name [anzahl]; typ name = {e1, e2, e3,..., en} Die Adressierung von Feldelementen beginnt bei 0 Die korrekte
Computerarithmetik ( )
Anhang A Computerarithmetik ( ) A.1 Zahlendarstellung im Rechner und Computerarithmetik Prinzipiell ist die Menge der im Computer darstellbaren Zahlen endlich. Wie groß diese Menge ist, hängt von der Rechnerarchitektur
Einführung in die C++ Programmierung für Ingenieure
Einführung in die C++ Programmierung für Ingenieure MATTHIAS WALTER / JENS KLUNKER Universität Rostock, Lehrstuhl für Modellierung und Simulation 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK FACULTY OF
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
Objektbasierte Entwicklung
Embedded Software Objektbasierte Entwicklung Objektorientierung in C? Prof. Dr. Nikolaus Wulff Objektbasiert entwickeln Ohne C++ wird meist C im alten Stil programmiert. => Ein endlose while-schleife mit
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.
Einführung in die technische Informatik
Einführung in die technische Informatik Christopher Kruegel [email protected] http://www.auto.tuwien.ac.at/~chris Betriebssysteme Aufgaben Management von Ressourcen Präsentation einer einheitlichen
Programmierung in C. Grundlagen. Stefan Kallerhoff
Programmierung in C Grundlagen Stefan Kallerhoff Vorstellungsrunde Name Hobby/Beruf Schon mal was programmiert? Erwartungen an den Kurs Lieblingstier Für zu Hause C-Buch online: http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/
Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen
Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders
Einführung in die Programmierung (EPR)
Goethe-Center for Scientific Computing (G-CSC) Goethe-Universität Frankfurt am Main Einführung in die Programmierung (EPR) (Übung, Wintersemester 2014/2015) Dr. S. Reiter, M. Rupp, Dr. A. Vogel, Dr. K.
Programmierkurs Java
Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen
1 Vom Problem zum Programm
Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren
Ü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
Einführung in die Programmierung
: Inhalt Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund - mit / ohne Parameter - mit / ohne Rückgabewerte
Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18
Kapitel 3 Datentypen und Variablen Seite 1 von 18 Datentypen - Einführung - Für jede Variable muss ein Datentyp festgelegt werden. - Hierdurch werden die Wertemenge und die verwendbaren Operatoren festgelegt.
Modul 122 VBA Scribt.docx
Modul 122 VBA-Scribt 1/5 1 Entwicklungsumgebung - ALT + F11 VBA-Entwicklungsumgebung öffnen 2 Prozeduren (Sub-Prozeduren) Eine Prozedur besteht aus folgenden Bestandteilen: [Private Public] Sub subname([byval
Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung
Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"
Numerische Datentypen. Simon Weidmann
Numerische Datentypen Simon Weidmann 08.05.2014 1 Ganzzahlige Typen 1.1 Generelles Bei Datentypen muss man immer zwei elementare Eigenschaften unterscheiden: Zuerst gibt es den Wertebereich, zweitens die
Klausur C++ #1 Jahr: 2001; Dozent: Dipl.Ing. Sorber
Klausur C++ #1 Jahr: 2001; Dozent: Dipl.Ing. Sorber 1) Welche Antworten zur Operatorüberladung sind richtig? (1) a) C++ - Operatoren können zusammen mit Objekten funktionieren b) C++ - Operatoren wird
Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:
Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Der Sourcecode wird an den entsprechenden Stellen im Programm wiederholt Programm wird lang
M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung
M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales
Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 16
Kapitel 5 Arithmetische Operatoren Seite 1 von 16 Arithmetische Operatoren - Man unterscheidet unäre und binäre Operatoren. - Je nachdem, ob sie auf einen Operanden wirken, oder eine Verknüpfung zweier
C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet
C++ Grundlagen ++ bedeutet Erweiterung zum Ansi C Standard Hier wird eine Funktion eingeleitet Aufbau: In dieser Datei stehen die Befehle, die gestartet werden, wenn das Programm gestartet wird Int main()
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
Tutorium Rechnerorganisation
Woche 2 Tutorien 3 und 4 zur Vorlesung Rechnerorganisation 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu
Dr. Monika Meiler. Inhalt
Inhalt 11 Dynamische Feldvereinbarung... 11-2 11.1 Dynamische Vereinbarung von Vektoren... 11-3 11.2 Dynamische Vereinbarung von Matrizen... 11-5 11.3 Die Kommandozeile... 11-8 Propädeutikum 11-1/8 11
C-Kurs 2011: Arrays, Strings, Pointer
C-Kurs 2011: Arrays, Strings, Pointer [email protected] 15. September 2011 v3.0.33 This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 License. Ohne Pointer geht nichts. 2 Pointer
Name: ES2 Klausur Thema: ARM 25.6.07. Name: Punkte: Note:
Name: Punkte: Note: Hinweise für das Lösen der Aufgaben: Zeit: 95 min. Name nicht vergessen! Geben Sie alle Blätter ab. Die Reihenfolge der Aufgaben ist unabhängig vom Schwierigkeitsgrad. Erlaubte Hilfsmittel
Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.
Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.
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.
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.
2 Einfache Rechnungen
2 Einfache Rechnungen 2.1 Zahlen Computer, auch bekannt als Rechner, sind sinnvoller eingesetzt, wenn sie nicht nur feste Texte ausgeben, sondern eben auch rechnen. Um das Rechnen mit Zahlen zu verstehen,
Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.
Einfache Ein- und Ausgabe mit Java 1. Hallo-Welt! Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. /** Die Klasse hello sendet einen
Die Programmiersprache C
Die Programmiersprache C höhere Programmiersprache (mit einigen Assembler-ähnlichen Konstrukten) gut verständliche Kommandos muss von Compiler in maschinenlesbaren Code (Binärdatei) übersetzt werden universell,
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.
Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff
Programmieren in C Macros, Funktionen und modulare Programmstruktur Prof. Dr. Nikolaus Wulff Der C Präprozessor Vor einem Compile Lauf werden alle Präprozessor Kommandos/Makros ausgewertet. Diese sind
Grundlagen. Die Komponenten eines C Programms. Das erste Programm
Grundlagen 1. Die Komponenten eines C Programms 2. Ein Programm erzeugen und übersetzen 3. Variablen Deklarieren und Werte zuweisen 4. Zahlen eingeben mit der Tastatur 5. Arithmetische Ausdrücke und Berechnungen
Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen
Programmieren 10. Tutorium 4./ 5. Übungsblatt Inhalt I. Übungsblatt 4 II. III. - Rückgabe und Besprechung - Vorbereitung auf Wiederholung/ Nachtrag - Operatorpräzedenzen IV. Übungsblatt 5 - Vorstellung
Einführung in die Programmiersprache C
Einführung in die Programmiersprache C Marcel Arndt [email protected] Institut für Numerische Simulation Universität Bonn Der Anfang Ein einfaches Programm, das Hello World! ausgibt: #include
Hochschule München, FK 03 FA SS 2012. Ingenieurinformatik
Hochschule München, FK 03 FA SS 2012 Ingenieurinformatik Zulassung geprüft vom Aufgabensteller: Teil 1/Aufgabe 1: 30 Minuten ohne Unterlagen, Teil 2/Aufgaben 2-4: 60 Minuten, beliebige eigene Unterlagen
Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe
Aufgabenstellung Für eine Hausverwaltung sollen für maximal 500 Wohnungen Informationen gespeichert werden, die alle nach der gleichen Weise wie folgt strukturiert sind: Art Baujahr Wohnung Whnginfo Nebenkosten
Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein ([email protected].
Java Crashkurs Kim-Manuel Klein ([email protected]) May 7, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)
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.).
Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag
Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:
BTD Antivirus Evasion: Von der Idee zum PoC. Daniel Sauder SySS GmbH
BTD Antivirus Evasion: Von der Idee zum PoC Daniel Sauder SySS GmbH WHOAMI IT Security Consultant bei der SySS GmbH Vier Jahre Windows Admin Interesse an Mobile Apps, Web Apps, Windows Hacking u.v.m. OSCP
Exploit-Entwicklung mit Python
Penetration Testing III Bachelor in Computer Science (BCS) 6. Semester Exploit-Entwicklung mit Python von Daniel Baier und Demian Rosenkranz 1 / 20 Gliederung Grundlagen Sicherheitslücken Prozess- und
Java Einführung Operatoren Kapitel 2 und 3
Java Einführung Operatoren Kapitel 2 und 3 Inhalt dieser Einheit Operatoren (unär, binär, ternär) Rangfolge der Operatoren Zuweisungsoperatoren Vergleichsoperatoren Logische Operatoren 2 Operatoren Abhängig
1.4.12 Sin-Funktion vgl. Cos-Funktion
.4. Sgn-Funktion Informatik. Semester 36 36.4.2 Sin-Funktion vgl. Cos-Funktion Informatik. Semester 37 37 .4.3 Sqr-Funktion Informatik. Semester 38 38.4.4 Tan-Funktion Informatik. Semester 39 39 .5 Konstanten
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).
Diana Lange. Generative Gestaltung Operatoren
Diana Lange Generative Gestaltung Operatoren Begriffserklärung Verknüpfungsvorschrift im Rahmen logischer Kalküle. Quelle: google Operatoren sind Zeichen, die mit einer bestimmten Bedeutung versehen sind.
Theoretische Informatik SS 04 Übung 1
Theoretische Informatik SS 04 Übung 1 Aufgabe 1 Es gibt verschiedene Möglichkeiten, eine natürliche Zahl n zu codieren. In der unären Codierung hat man nur ein Alphabet mit einem Zeichen - sagen wir die
Lineargleichungssysteme: Additions-/ Subtraktionsverfahren
Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als
Datentypen: Enum, Array, Struct, Union
Datentypen: Enum, Array, Struct, Union C-Kurs 2013, 2. Tutorium Freitagsrunde http://wiki.freitagsrunde.org 10. September 2013 This work is licensed under the Creative Commons Attribution-ShareAlike 3.0
Datenbanksysteme SS 2007
Datenbanksysteme SS 2007 Frank Köster (Oliver Vornberger) Institut für Informatik Universität Osnabrück Kapitel 9c: Datenbankapplikationen Architektur einer Web-Applikation mit Servlets, JSPs und JavaBeans
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
Informatik I (D-MAVT)
Informatik I (D-MAVT) Übungsstunde 1 [email protected] Distributed Systems Group, ETH Zürich kurze Stunden mit Stoffueberblick -> mehr Zeit fuer Fragen This semester s menu... Imperative Programmierung
Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:
VBA Programmierung mit Excel Schleifen 1/6 Erweiterung der Aufgabe Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: Es müssen also 11 (B L) x 35 = 385 Zellen berücksichtigt
Modellierung und Programmierung 1
Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 19. November 2015 Gültigkeitsbereich (Scope) von Variablen { int m; {
DLLs (dynamic loaded libraries) mit MingW erstellen
DLLs (dynamic loaded libraries) mit MingW erstellen Autor: Michel D. Schmid Datum: April 2, 2009 Contents 1 Einführung 1 1.1 Open-Source Tools.......................................... 1 2 Beispiel 1:
Tutorium Informatik 1. Aufgabe 2: Formatierte Ein- und Ausgabe
Tutorium Informatik 1 Aufgabe 2: Formatierte Ein- und Ausgabe Fachbereich: Elektrotechnik Inhaltsverzeichnis 1 Aufgabe 1 2 Benötigte Funktionen und Schlüsselwörter 2 Robert Halas / FH Regensburg - 2003
Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss
Systeme 1 Kapitel 6 Nebenläufigkeit und wechselseitiger Ausschluss Threads Die Adressräume verschiedener Prozesse sind getrennt und geschützt gegen den Zugriff anderer Prozesse. Threads sind leichtgewichtige
Zusammenfassung des Handzettels für Programmieren in C
Zusammenfassung des Handzettels für Programmieren in C In der handschriftlichen Kopie werden mehr Abkürzungen verwendet. Alles Grün markierte dient zum lernen und wird nicht auf den Handzettel übertragen.
Zeichen bei Zahlen entschlüsseln
Zeichen bei Zahlen entschlüsseln In diesem Kapitel... Verwendung des Zahlenstrahls Absolut richtige Bestimmung von absoluten Werten Operationen bei Zahlen mit Vorzeichen: Addieren, Subtrahieren, Multiplizieren
Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind
Templates und Containerklassen Ziel, Inhalt Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen 1 Ziel, Inhalt
Vorkurs C++ Programmierung
Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:
Datentypen. Agenda für heute, 4. März, 2010. Pascal ist eine streng typisierte Programmiersprache
Agenda für heute, 4. März, 2010 Zusammengesetzte if-then-else-anweisungen Datentypen Pascal ist eine streng typisierte Programmiersprache Für jeden Speicherplatz muss ein Datentyp t (Datenformat) t) definiert
2. Semester, 2. Prüfung, Lösung
2. Semester, 2. Prüfung, Lösung Name Die gesamte Prüfung bezieht sich auf die Programmierung in C++! Prüfungsdauer: 90 Minuten Mit Kugelschreiber oder Tinte schreiben Lösungen können direkt auf die Aufgabenblätter
2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)
Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>
Allgemeines Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C #include main() { printf( hello world\n ); } Peter Sobe 1 Die Großfamilie der C-Sprachen
MPI-Programmierung unter Windows mit MPICH2. Installieren von MPICH2, Übersetzen, Ausführen und Debuggen von MPI-Programmen. Christian Terboven
MPI-Programmierung unter Windows mit MPIH2 Installieren von MPIH2, Übersetzen, Ausführen und Debuggen von MPI-Programmen hristian Terboven Rechen- und Kommunikationszentrum RWTH Aachen 1 02/2007 luster-installationsworkshop
Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen
Übungen if / else / else if... 2... 2 Aufgabe 2:... 2 Aufgabe 3:... 2 Aufgabe 4:... 2 Aufgabe 5:... 2 Aufgabe 6:... 2 Aufgabe 7:... 3 Aufgabe 8:... 3 Aufgabe 9:... 3 Aufgabe 10:... 3 switch... 4... 4 Aufgabe
Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005
Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm
Übung 9 - Lösungsvorschlag
Universität Innsbruck - Institut für Informatik Datenbanken und Informationssysteme Prof. Günther Specht, Eva Zangerle Besprechung: 15.12.2008 Einführung in die Informatik Übung 9 - Lösungsvorschlag Aufgabe
Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny
Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.
Die Post hat eine Umfrage gemacht
Die Post hat eine Umfrage gemacht Bei der Umfrage ging es um das Thema: Inklusion Die Post hat Menschen mit Behinderung und Menschen ohne Behinderung gefragt: Wie zufrieden sie in dieser Gesellschaft sind.
Java Einführung Collections
Java Einführung Collections Inhalt dieser Einheit Behälterklassen, die in der Java API bereitgestellt werden Wiederholung Array Collections (Vector, List, Set) Map 2 Wiederholung Array a[0] a[1] a[2] a[3]...
Von Bits, Bytes und Raid
Von Bits, Bytes und Raid Eine Schnuppervorlesung zum Kennenlernen eines Datenspeichers um Bits und Bytes zu unterscheiden um Raid-Festplattensysteme zu verstehen Inhalt Speicherzellen sind elektronische
Exploits Wie kann das sein?
Exploits Durch eine Schwachstelle im Programm xyz kann ein Angreifer Schadcode einschleusen. Manchmal reicht es schon irgendwo im Internet auf ein präpariertes Jpg-Bildchen zu klicken und schon holt man
Algorithmen mit Python
Algorithmen mit Python Vorbesprechung zum Proseminar im Sommersemester 2009 http://www.python.org 1 Sie lernen in DAP Java und C/C++: 80% Syntax, 20% Algorithmen-Design Idee Schon ein einfaches Hello World
Wer in der Grundschule ein wenig aufgepasst hat, sollte in der Lage sein schriftlich eine Zahl durch eine zweite zu teilen.
Teilen binär Teil 1 - Vorzeichenlose Ganzzahlen ============ Irgendwann steht jeder Programmieren vor diesem Problem. Wie teile ich eine Binärzahl durch eine zweite? Wer in der Grundschule ein wenig aufgepasst
Erster Bug: eine Motte
SOFTWAREFEHLER Der erste Bug Erster Bug: eine Motte Der Begriff Bug (deutsch: Motte) stammt aus dem Jahre 1945, als Ingenieure in einem Schaltrelais eines Computers (Harvard Mark II-System) eine Motte
Sage 200 BI Häufige Fehler & Lösungen. Version 15.10.2014
Sage 200 BI Häufige Fehler & Lösungen Version 15.10.2014 Inhaltverzeichnis Sage 200 BI Häufige Fehler & Lösungen Inhaltverzeichnis 2 1.0 Häufige Probleme & Lösungen 3 1.1 Keine Grafiken in SSRS-Auswertungen
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)
Wintersemester 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät für Informatik Lehrstuhl
Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...
Erste Schritte Dieser Teil der Veranstaltung gibt einen ersten Eindruck der Programmierung mit C++. Es wird ein erstes Gefühl von Programmiersprachen vermittelt, ohne auf die gezeigten Bestandteile genau
The ToolChain.com. Grafisches Debugging mit der QtCreator Entwicklungsumgebung
The ToolChain Grafisches Debugging mit der QtCreator Entwicklungsumgebung geschrieben von Gregor Rebel 2014-2015 Hintergrund Neben dem textuellen Debuggen in der Textkonsole bieten moderene Entwicklungsumgebungen
Native Zeichenketten (C-Strings)
Native Zeichenketten (C-Strings)... sind in C/C++ char-arrays. D.h. die Deklaration char msg[80]; kann Zeichenketten bis zur Länge 79 enthalten. (Direkte Zuweisungen wie msg="hallo!" sind jedoch nicht
Version 0.3. Installation von MinGW und Eclipse CDT
Version 0.3 Installation von MinGW und Eclipse CDT 1. Stellen Sie fest, ob Sie Windows in der 32 Bit Version oder in der 64 Bit Version installiert haben. 2. Prüfen Sie, welche Java Runtime vorhanden ist.
Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe
Aufgabenstellung Für ein Baumkataster sollen für maximal 500 Bäume Informationen gespeichert werden, die alle nach der gleichen Weise wie folgt strukturiert sind: Nummer Bauminfo Baumart Hoehe Baum Umfang
GCC 3.x Stack Layout. Auswirkungen auf Stack-basierte Exploit-Techniken. Tobias Klein, 2003 [email protected] Version 1.0
1 GCC 3.x Stack Layout Auswirkungen auf Stack-basierte Exploit-Techniken Tobias Klein, 2003 [email protected] Version 1.0 2 Abstract Eine spezielle Eigenschaft des GNU C Compilers (GCC) der Version 3.x wirkt
5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu
Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten
