Übung zu Betriebssysteme

Größe: px
Ab Seite anzeigen:

Download "Übung zu Betriebssysteme"

Transkript

1 Übung zu Betriebssysteme Threadumschaltung 7. & 10. Dezember 2017 Andreas Ziegler Bernhard Heinloth Lehrstuhl für Informatik 4 Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl für Verteilte Systeme und Betriebssysteme

2 CPU Memory tatsächliche Hardware

3 vcpu0 Mem0 CPU Memory vcpu1 Mem1 vcpu2 Mem2 tatsächliche Hardware illusionierte Hardware

4 Speicher virtualisieren CPU virtualiseren

5 Speicher virtualisieren ist einfach: #define MEMSIZE 100 char Mem0[MEMSIZE]; char Mem1[MEMSIZE]; char Mem2[MEMSIZE]; Memory CPU virtualiseren Mem0 Mem1 Mem2

6 Speicher virtualisieren ist einfach: #define MEMSIZE 100 char Mem0[MEMSIZE]; char Mem1[MEMSIZE]; char Mem2[MEMSIZE]; Memory CPU virtualiseren - nicht teilbar im Ort Mem0 Mem1 Mem2

7 Speicher virtualisieren ist einfach: #define MEMSIZE 100 char Mem0[MEMSIZE]; char Mem1[MEMSIZE]; char Mem2[MEMSIZE]; Memory CPU virtualiseren Mem0 Mem1 Mem2 - nicht teilbar im Ort - aber teilbar in der Zeit

8 Koroutinen

9 Motivation: mehr Aktivitätsträger als CPUs void foo(){ int f = 42; } while (f--){ kout << "foo" << f << endl; } void bar(){ int b = 23; } while (b--){ kout << "bar" << b << endl; }

10 Einseitiger Aufruf

11 Einseitiger Aufruf void foo(){ int f = 42; while (f--){ kout << "foo" << f << endl; void bar(){ int b = 23; while (b--){ kout << "bar" << b << endl; } } bar(); } }

12 Einseitiger Aufruf foo41 foo40 foo1 foo0 bar22 bar0 foo() bar()

13 Einseitiger Aufruf foo41 foo40 foo1 foo0 bar22 bar0 foo() bar() nicht parallel

14 Gegenseitiger Aufruf

15 Gegenseitiger Aufruf void foo(){ static int f = 42; } while (f--){ kout << "foo" << f << endl; bar(); } void bar(){ static int b = 23; } while (b--){ kout << "bar" << b << endl; foo(); }

16 Gegenseitiger Aufruf foo() foo41 bar() bar22 foo() foo40 bar() bar21 foo() foo39 bar() bar20

17 Gegenseitiger Aufruf foo() foo41 bar() bar22 foo() foo40 bar() bar21 foo() foo39 bar() bar20 hoher Speicherverbrauch & Endlosrekursion

18 Umschaltung foo() vcpu0 Mem0 bar() vcpu1 Mem1

19 Umschaltung foo() vcpu0 Mem0 bar() vcpu1 Mem1 Kontrollflusszustand sichern & laden

20 Umschaltung foo() vcpu0 Mem0 bar() vcpu1 Mem1 Kontrollflusszustand sichern & laden Stack Register

21 Umschaltung foo() vcpu0 Mem0 bar() vcpu1 Mem1 Kontrollflusszustand sichern & laden } Stack toc (Thread of control) Register

22 Umschaltung foo() vcpu0 Mem0 bar() vcpu1 Mem1 Kontrollflusszustand sichern & laden } Stack toc (Thread of control) Register Umschaltefunktion

23 Umschaltung foo() vcpu0 Mem0 bar() vcpu1 Mem1 Kontrollflusszustand sichern & laden } Stack toc (Thread of control) Register Umschaltefunktion toc_switch(toc *now, toc *then); Wechselt vom aktuellen Kontext now nach then

24 Umschaltung void foo(){ int f = 42; } while (f--){ kout << "foo" << f << endl; toc_switch( &toc_foo, &toc_bar ); } void bar(){ int b = 23; } while (b--){ kout << "bar" << b << endl; toc_switch( &toc_bar, &toc_foo ); }

25 Umschaltung foo() bar() foo41 bar22 foo40 bar21 foo39 bar20

26 Kontextsicherung

27 Kontextsicherung durch den Übersetzer

28 Kontextsicherung durch den Übersetzer void foo(){ // flüchtige Register // sichern bar(); // flüchtige Register // wiederherstellen }

29 Kontextsicherung durch den Übersetzer void foo(){ // flüchtige Register // sichern bar(); // flüchtige Register // wiederherstellen void bar(){ // nicht-flüchtige // Register // sichern // nicht-flüchtige // Register // wiederherstellen } return; }

30 EAX EBX ECX EDX AX AH AL BX BH BL CX CH CL DX DH DL

31 EAX EBX ECX EDX AX AH BX BH CX CH DX DH AL BL CL DL ursprünglich Akkumulatorregister ursprünglich Basisregister ursprünglich Zählerregister Daten-/Allzweckregister

32 EAX EBX ECX EDX ESI EDI AX AH BX BH CX CH DX DH SI DI AL BL CL DL ursprünglich Zeichenkettenquellindex ursprünglich Zeichenkettenzielindex

33 EAX EBX ECX EDX ESI EDI EBP ESP AX AH BX BH CX CH DX DH SI DI BP SP AL BL CL DL Basiszeiger für Stapelrahmen Stapelzeiger

34 EAX EBX ECX EDX ESI EDI EBP ESP EIP AX AH BX BH CX CH DX DH SI DI BP SP IP AL BL CL DL Befehls-/Instruktionszeiger

35 EAX AX AH AL EBX BX BH BL EFLAGS FLAGS ECX CX CH CL EDX DX DH DL ESI SI EDI DI EBP BP ESP SP EIP IP

36 EAX AX AH AL EBX BX BH BL EFLAGS FLAGS ECX CX CH CL CS EDX DX DH DL DS ESI SI SS EDI DI ES EBP BP FS ESP SP GS EIP IP + FPU, MMX, SSE,

37 EAX AX AH AL EBX BX BH BL EFLAGS FLAGS ECX CX CH CL EDX DX DH DL ESI SI EDI DI EBP BP ESP SP EIP IP Flüchtige versus nicht-flüchtige Register

38 EAX AX AH AL EBX BX BH BL EFLAGS FLAGS ECX CX CH CL EDX DX DH DL ESI SI EDI DI EBP BP ESP SP EIP IP Flüchtige versus nicht-flüchtige Register

39 Struktur zur Kontextsicherung struct toc { void *ebx; void *esi; void *edi; void *ebp; void *esp; };

40 Struktur zur Kontextsicherung struct toc { void *ebx; void *esi; void *edi; void *ebp; void *esp; }; Kontext sichern nach struct toc * toc_obj;

41 Struktur zur Kontextsicherung struct toc { void *ebx; void *esi; void *edi; void *ebp; void *esp; }; Kontext sichern nach struct toc * toc_obj; in Assembler mov eax, toc_obj mov [eax + 0], ebx mov [eax + 4], esi mov [eax + 8], edi mov [eax + 12], ebp mov [eax + 16], esp

42 Struktur zur Kontextsicherung struct toc { void *ebx; void *esi; void *edi; void *ebp; void *esp; }; Kontext sichern nach struct toc * toc_obj; in Assembler mov eax, toc_obj mov [eax + ebx_offset], ebx mov [eax + esi_offset], esi mov [eax + edi_offset], edi mov [eax + ebp_offset], ebp mov [eax + esp_offset], esp Die Abstände sind auch in der vorgegebenen Datei toc.inc definiert

43 ! Syntaxunterschiede bei x86-assembler Intel: mov ebx, 0x17 (Ziel, Quelle) AT&T: mov $0x17, %ebx (Quelle, Ziel) objdump -M intel Standard bei objdump

44 Kontextwechsel

45 Ziel: Instruktionszeiger eip ändern

46 Ziel: Instruktionszeiger eip ändern Problem: Register eip kann nicht direkt beschrieben werden

47 Ziel: Instruktionszeiger eip ändern Problem: Register eip kann nicht direkt beschrieben werden Lösung: Änderung über ret und Adresse auf Stack (wie bei der Rückkehr nach einer Funktion)

48 Übersetung eines Funktionsaufrufs int i = func(23, 42);

49 Übersetung eines Funktionsaufrufs int i = func(23, 42); ; 2. Parameter auf Stack push 0x2a ; 1. Parameter auf Stack push 0x17 ; Funktionsaufruf call func ; pushed implizit die ; Rücksprungadresse L1:

50 Übersetung eines Funktionsaufrufs int i = func(23, 42); ; 2. Parameter auf Stack push 0x2a ; 1. Parameter auf Stack push 0x17 ; Funktionsaufruf call func ; pushed implizit die ; Rücksprungadresse L1: Stack beim Funktionsaufruf: ffff ffff ebp 0x2a esp + 8 0x17 esp + 4 esp L1 esp

51 Übersetung eines Funktionsaufrufs int i = func(23, 42); ; 2. Parameter auf Stack push 0x2a ; 1. Parameter auf Stack push 0x17 ; Funktionsaufruf call func ; pushed implizit die ; Rücksprungadresse L1: ; SP wiederherstellen add esp, 8 Stack beim Funktionsaufruf: ffff ffff ebp 0x2a esp + 8 0x17 esp + 4 esp L1 esp ; Rückgabe sichern mov ebx, eax

52 ! Zur Erinnerung für den Stack auf x86 gilt Der Stack wächst von oben (hohe Adresse) nach unten (niedrige Adresse). Der Stackzeiger (esp) zeigt auf das zuletzt hinzugefügte Datum push X verringert zuerst den Wert von esp um 4 Byte und legt dann X an die resultierende Adresse pop X liest den Inhalt des Speichers, auf das esp zeigt, in X und erhöht anschließend den Wert von ESP um 4 Byte. Adressen sollten an der 4 Byte-Grenze ausgerichtet sein (sonst droht Performanzverlust)

53 Kontextwechsel void foo(){ int f = 42; while (f--){ kout << "foo" << f << endl; toc_switch( &toc_foo, &toc_bar ); LFOO: } }

54 Kontextwechsel void foo(){ int f = 42; ffff ffff while (f--){ kout << "foo" << f << endl; toc_switch( &toc_foo, &toc_bar ); LFOO: } } &toc_bar esp + 8 &toc_foo esp + 4 esp LFOO esp

55 Kontextwechsel ; in Assembler toc_switch: ffff ffff &toc_bar esp + 8 &toc_foo esp + 4 esp LFOO esp

56 Kontextwechsel ; in Assembler toc_switch: ffff ffff &toc_bar esp + 8 &toc_foo esp + 4 esp LFOO esp

57 Kontextwechsel ; in Assembler toc_switch: ffff ffff toc_foo.esp toc_foo.ebx &toc_bar esp + 8 &toc_foo esp + 4 esp LFOO esp

58 Kontextwechsel ; in Assembler toc_switch: ; vorherige Register sichern mov eax, [esp + 4] mov [eax + ebx_offset], ebx mov [eax + esp_offset], esp ffff ffff toc_foo.esp toc_foo.ebx &toc_bar esp + 8 &toc_foo esp + 4 esp LFOO esp

59 Kontextwechsel ; in Assembler toc_switch: ffff ffff ; vorherige Register sichern mov eax, [esp + 4] mov [eax + ebx_offset], ebx mov [eax + esp_offset], esp &toc_bar esp + 8 &toc_foo esp + 4 esp LFOO esp

60 Kontextwechsel ; in Assembler toc_switch: ; vorherige Register sichern mov eax, [esp + 4] mov [eax + ebx_offset], ebx mov [eax + esp_offset], esp ffff ffff toc_bar.esp toc_bar.ebx &toc_bar esp + 8 &toc_foo esp + 4 esp LFOO esp

61 Kontextwechsel ; in Assembler toc_switch: ; vorherige Register sichern mov eax, [esp + 4] mov [eax + ebx_offset], ebx mov [eax + esp_offset], esp ; neue Register laden mov eax, [esp + 8] mov ebx, [eax + ebx_offset] mov esp, [eax + esp_offset] ffff ffff toc_bar.esp toc_bar.ebx &toc_bar esp + 8 &toc_foo esp + 4 esp LFOO esp

62 Kontextwechsel ; in Assembler toc_switch: ; vorherige Register sichern mov eax, [esp + 4] mov [eax + ebx_offset], ebx mov [eax + esp_offset], esp ; neue Register laden mov eax, [esp + 8] mov ebx, [eax + ebx_offset] mov esp, [eax + esp_offset] ffff ffff toc_bar.esp toc_bar.ebx &toc_bar esp + 8 &toc_foo esp + 4 esp LFOO esp

63 Kontextwechsel ; in Assembler toc_switch: ; vorherige Register sichern mov eax, [esp + 4] mov [eax + ebx_offset], ebx mov [eax + esp_offset], esp ; neue Register laden mov eax, [esp + 8] mov ebx, [eax + ebx_offset] mov esp, [eax + esp_offset] ffff ffff toc_bar.esp toc_bar.ebx esp + 8 esp + 4 esp + 0 &toc_bar &toc_foo LFOO

64 Kontextwechsel ; in Assembler toc_switch: ; vorherige Register sichern mov eax, [esp + 4] mov [eax + ebx_offset], ebx mov [eax + esp_offset], esp ; neue Register laden mov eax, [esp + 8] mov ebx, [eax + ebx_offset] mov esp, [eax + esp_offset] ffff ffff toc_bar.esp toc_bar.ebx &toc_foo esp + 8 &toc_bar esp + 4 LBAR esp + 0 &toc_bar &toc_foo LFOO

65 Kontextwechsel ; in Assembler toc_switch: ; vorherige Register sichern mov eax, [esp + 4] mov [eax + ebx_offset], ebx mov [eax + esp_offset], esp ; neue Register laden mov eax, [esp + 8] mov ebx, [eax + ebx_offset] mov esp, [eax + esp_offset] ; "Zurückkehren" ret ffff ffff &toc_foo esp + 8 &toc_bar esp + 4 esp LBAR esp

66 Koroutine (erstmalig) starten void coroutine(void *arg){ }

67 Koroutine (erstmalig) starten void coroutine(void *arg){ } Wie rufe ich die aller erste Koroutine auf?

68 Koroutine (erstmalig) starten void coroutine(void *arg){ } Wie rufe ich die aller erste Koroutine auf? - Kann ich mit leeren Registern starten?

69 Koroutine (erstmalig) starten void coroutine(void *arg){ } Wie rufe ich die aller erste Koroutine auf? - Kann ich mit leeren Registern starten? Nicht ganz. - Einsprungsfunktion toc_go(toc *regs); Lädt den Kontext regs (quasi 2. Hälfte von toc_switch, ohne Sichern des aktuellen Kontexts)

70 Koroutine (erstmalig) starten void coroutine(void *arg){ } Wie rufe ich die aller erste Koroutine auf? - Kann ich mit leeren Registern starten? Nicht ganz. - Einsprungsfunktion toc_go(toc *regs); Lädt den Kontext regs (quasi 2. Hälfte von toc_switch, ohne Sichern des aktuellen Kontexts) Was wird für jede Koroutine gebraucht?

71 Koroutine (erstmalig) starten void coroutine(void *arg){ } Wie rufe ich die aller erste Koroutine auf? - Kann ich mit leeren Registern starten? Nicht ganz. - Einsprungsfunktion toc_go(toc *regs); Lädt den Kontext regs (quasi 2. Hälfte von toc_switch, ohne Sichern des aktuellen Kontexts) Was wird für jede Koroutine gebraucht? - Kontextstruktur toc - eigenen, präparierter Stack

72 Stack aufsetzen Parameter esp + 4 esp Rücksprungadresse esp + 0

73 Stack aufsetzen void coroutine(void *arg){ } arg esp + 4 esp 0xBADF00D esp + 0

74 Stack aufsetzen void coroutine(void *arg){ } tos (top of stack) arg tos - 4 esp 0xBADF00D tos - 8

75 Stack aufsetzen void coroutine(void *arg){ } tos (top of stack) arg tos - 4 0xBADF00D tos - 8 esp coroutine tos - 12 was passiert nun bei toc_go/toc_switch?

76 Stack aufsetzen void coroutine(void *arg){ } tos (top of stack) arg tos - 4 0xBADF00D tos - 8 esp coroutine tos - 12 was passiert wenn coroutine abgearbeitet ist?

77 Stack aufsetzen void coroutine(void *arg){ } tos (top of stack) arg tos - 4 0xBADF00D tos - 8 esp coroutine tos - 12 void toc_settle(struct toc *regs, void *tos, void (*coroutine)(void*), void* arg); Präperiert den Stack für den ersten Einsprung

78 Stack aufsetzen void coroutine(void *arg){ } tos (top of stack) arg tos - 4 0xBADF00D tos - 8 esp coroutine tos - 12 void toc_settle(struct toc *regs, void *tos, void (*coroutine)(void*), void* arg); Präperiert den Stack für den ersten Einsprung - in C[++] (statt Assembler)

79 Stack aufsetzen void coroutine(void *arg){ } tos (top of stack) arg tos - 4 0xBADF00D tos - 8 esp coroutine tos - 12 void toc_settle(struct toc *regs, void *tos, void (*coroutine)(void*), void* arg); Präperiert den Stack für den ersten Einsprung - in C[++] (statt Assembler) - statisch übergebenen Speicher tos als Stack aufsetzen

80 Stack aufsetzen void coroutine(void *arg){ } tos (top of stack) arg tos - 4 0xBADF00D tos - 8 esp coroutine tos - 12 void toc_settle(struct toc *regs, void *tos, void (*coroutine)(void*), void* arg); Präperiert den Stack für den ersten Einsprung - in C[++] (statt Assembler) - statisch übergebenen Speicher tos als Stack aufsetzen - Pointerarithmetik ist hilfreich

81 Stack aufsetzen void coroutine(void *arg){ } tos (top of stack) arg tos - 4 0xBADF00D tos - 8 esp coroutine tos - 12 void toc_settle(struct toc *regs, void *tos, void (*coroutine)(void*), void* arg); Präperiert den Stack für den ersten Einsprung - in C[++] (statt Assembler) - statisch übergebenen Speicher tos als Stack aufsetzen - Pointerarithmetik ist hilfreich - esp in Kontextstruktur regs entsprechend setzen

82 Umsetzung in OOStuBS/MPStuBS

83 Threads class Thread { struct toc regs; public: Thread(void* tos); virtual void action() = 0; }

84 Threads class Thread { struct toc regs; public: Thread(void* tos); virtual void action() = 0; } Adresse einer virtuellen Member-Funktion nicht (ohne weiteres) ermittelbar

85 Threads class Thread { struct toc regs; public: Thread(void* tos); virtual void action() = 0; } Adresse einer virtuellen Member-Funktion nicht (ohne weiteres) ermittelbar void kickoff (Thread* t){ t->action(); }

86 Scheduler Scheduler verwaltet Koroutinen zentral class Scheduler { Queue<Thread> routines; public: void ready(thread *); void schedule(); void resume(); };

87 Scheduler (Beispiel) // Thread AppFoo void AppFoo::action(){ while (1){ kout << "foo" << endl; scheduler.resume(); } } // Thread AppBar void AppBar::action(){ while (1){ kout << "bar" << endl; scheduler.resume(); } }

88 Scheduler (Beispiel) // Thread AppFoo void AppFoo::action(){ while (1){ kout << "foo" << endl; scheduler.resume(); } } // Thread AppBar void AppBar::action(){ while (1){ kout << "bar" << endl; scheduler.resume(); } } // main.cc AppFoo appfoo; AppBar appbar; int main (){ // scheduler.ready(&appfoo); scheduler.ready(&appbar); scheduler.schedule(); }

89 Scheduler (Beispiel) main() // scheduler.ready(&appfoo) scheduler.ready(&appbar) scheduler.schedule() toc_go(appfoo.toc) AppFoo kickoff() appfoo->action() kout << "foo" scheduler.resume() toc_switch() toc_switch() kout << "foo" scheduler.resume() AppBar kickoff() appbar->action() kout << "bar" scheduler.resume() foo bar foo toc_switch() toc_switch() kout << "bar" scheduler.resume() bar

90 Scheduler Scheduler verwaltet Koroutinen zentral class Scheduler { Queue<Thread> routines; public: void ready(thread *); void schedule(); void resume(); }; OOStuBS immer synchrone Aufrufe Konsistenz gesichert

91 Scheduler Scheduler verwaltet Koroutinen zentral class Scheduler { Queue<Thread> routines; public: void ready(thread *); void schedule(); void resume(); }; OOStuBS immer synchrone Aufrufe Konsistenz gesichert MPStuBS Synchronisation notwendig

92 Scheduler (synchronisiert) main() // guard.enter() scheduler.schedule() toc_go(appfoo.toc) AppFoo kickoff() guard.leave() appfoo->action() kout << "foo" guard.enter() scheduler.resume() toc_switch() toc_switch() AppBar kickoff() guard.leave() appbar->action() kout << "bar" guard.enter() scheduler.resume() foo bar guard.leave() kout << "foo" guard.enter() scheduler.resume() foo toc_switch() guard.leave() kout << "bar" bar

93 Fragen? Nächste Woche (14. & 17. Dezember) Abgabe von Aufgabe 3 im Huber-CIP

94 #define STACKSIZE 4096 int something=0x ; char stackfoo[stacksize]; char stackbar[stacksize];

95 #define STACKSIZE 4096 ffff ffff int something=0x ; char stackfoo[stacksize]; char stackbar[stacksize]; stackbar[3] stackbar[2] stackbar[1] stackbar[0] stackfoo[4095] stackfoo[4094] stackfoo[4093] stackfoo[4092] stackfoo[4091] stackfoo[4090] stackfoo[4089] stackfoo[4088] 010c e32f 010c e32e 010c e32d 010c e32c 010c e32b 010c e32a 010c e c e c e c e c e c e324 stackfoo[4087] stackfoo[2] stackfoo[1] stackfoo[0] 010c e c d32e 010c d32d 010c d32c c d32b c d32a c d329 something c d

96 #define STACKSIZE 4096 ffff ffff int something=0x ; char stackfoo[stacksize]; char stackbar[stacksize]; void* tos = &(stackfoo[4092]); void** esp = (void**) tos; stackbar[3] stackbar[2] stackbar[1] stackbar[0] stackfoo[4095] stackfoo[4094] stackfoo[4093] stackfoo[4092] stackfoo[4091] stackfoo[4090] stackfoo[4089] stackfoo[4088] 010c e32f 010c e32e 010c e32d 010c e32c 010c e32b 010c e32a 010c e c e c e c e c e c e324 stackfoo[4087] stackfoo[2] stackfoo[1] stackfoo[0] 010c e c d32e 010c d32d 010c d32c c d32b c d32a c d329 something c d

97 #define STACKSIZE 4096 ffff ffff int something=0x ; char stackfoo[stacksize]; char stackbar[stacksize]; void* tos = &(stackfoo[4092]); void** esp = (void**) tos; stackbar[3] 010c e32f stackbar[2] 010c e32e stackbar[1] 010c e32d stackbar[0] 010c e32c stackfoo[4095] AA 010c e32b stackfoo[4094] BB 010c e32a stackfoo[4093] CC 010c e329 stackfoo[4092] DD 010c e328 stackfoo[4091] 010c e327 *esp = 0xAABBCCDD; stackfoo[4090] stackfoo[4089] stackfoo[4088] 010c e c e c e324 stackfoo[4087] stackfoo[2] stackfoo[1] stackfoo[0] 010c e c d32e 010c d32d 010c d32c c d32b c d32a c d329 something c d

98 #define STACKSIZE 4096 ffff ffff int something=0x ; char stackfoo[stacksize]; char stackbar[stacksize]; void* tos = &(stackfoo[4092]); void** esp = (void**) tos; *esp = 0xAABBCCDD; esp--; *esp = 0xBADF00D; stackbar[3] 010c e32f stackbar[2] 010c e32e stackbar[1] 010c e32d stackbar[0] 010c e32c stackfoo[4095] AA 010c e32b stackfoo[4094] BB 010c e32a stackfoo[4093] CC 010c e329 stackfoo[4092] DD 010c e328 stackfoo[4091] 0B 010c e327 stackfoo[4090] AD 010c e326 stackfoo[4089] F0 010c e325 stackfoo[4088] 0D 010c e324 stackfoo[4087] 010c e323 stackfoo[2] 010c d32e stackfoo[1] stackfoo[0] 010c d32d 010c d32c c d32b c d32a c d329 something c d

99 #define STACKSIZE 4096 ffff ffff int something=0x ; char stackfoo[stacksize]; char stackbar[stacksize]; void* tos = &(stackfoo[4092]); void** esp = (void**) tos; *esp = 0xAABBCCDD; esp--; *esp = 0xBADF00D; stackbar[3] 010c e32f stackbar[2] 010c e32e stackbar[1] 010c e32d stackbar[0] 010c e32c stackfoo[4095] AA 010c e32b stackfoo[4094] BB 010c e32a stackfoo[4093] CC 010c e329 stackfoo[4092] DD 010c e328 stackfoo[4091] 0B 010c e327 stackfoo[4090] AD 010c e326 stackfoo[4089] F0 010c e325 stackfoo[4088] 0D 010c e324 stackfoo[4087] 010c e323 stackfoo[2] 010c d32e // stackfoo[1] stackfoo[0] 010c d32d 010c d32c // Anschliessend: // esp in toc schreiben c d32b c d32a c d329 something c d

Übung zu Betriebssysteme

Übung zu Betriebssysteme Übung zu Betriebssysteme Threadumschaltung 6. & 8. Dezember 2017 Andreas Ziegler Bernhard Heinloth Lehrstuhl für Informatik 4 Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl für Verteilte Systeme

Mehr

Assembler. Dr.-Ing. Volkmar Sieh. Department Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg

Assembler. Dr.-Ing. Volkmar Sieh. Department Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg Assembler Dr.-Ing. Volkmar Sieh Department Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2017/2018 V. Sieh Assembler (WS16/17) 1 15 Einleitung

Mehr

Einführung. Übungen zur Vorlesung Virtuelle Maschinen. Stefan Potyra. SoSe 2009

Einführung. Übungen zur Vorlesung Virtuelle Maschinen. Stefan Potyra. SoSe 2009 Einführung Übungen zur Vorlesung Virtuelle Maschinen Stefan Potyra Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg SoSe 2009 Übungsaufgaben 1 Entwickeln

Mehr

U23 Assembler Workshop

U23 Assembler Workshop Ike e.v. http://koeln.ccc.de 2016-11-05 Überblick 1 CPU, Assembler Überblick x86 x86 Assembler 2 RAM, Stack, Calling Conventions Stack Calling Conventions Stackframes 3 Branches Jumps 4 Speicher, C-Interface

Mehr

Betriebssystembau. 7. Übung. Michael Engel Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund

Betriebssystembau. 7. Übung. Michael Engel Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund Betriebssystembau 7. Übung Michael Engel Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund michael.engel@tu-dortmund.de http://ess.cs.uni-dortmund.de/~me/ 1 Agenda Coroutinen

Mehr

Assembler - Variablen

Assembler - Variablen Assembler - Variablen Dr.-Ing. Volkmar Sieh Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2008 Assembler - Variablen 1/30 2008-04-21 Variablen Variablen

Mehr

Betriebssystembau (BSB)

Betriebssystembau (BSB) Betriebssystembau (BSB) 4. Übung http://ess.cs.tu-.de/de/teaching/ws2013/bsb/ Olaf Spinczyk olaf.spinczyk@tu-.de http://ess.cs.tu-.de/~os AG Eingebettete System Informatik 12, TU Dortmund Agenda Aufgabe

Mehr

U23 Assembler Workshop

U23 Assembler Workshop Ike e.v. http://koeln.ccc.de 2016-11-05 Überblick 1 CPU, Assembler Überblick x86 x86 Assembler 2 RAM, Stack, Calling Conventions Stack Calling Conventions Stackframes 3 Branches Jumps 4 Speicher, C-Interface

Mehr

Betriebssystembau (BSB)

Betriebssystembau (BSB) Betriebssystembau (BSB) 4. Übung http://ess.cs.tu-dortmund.de/de/teaching/ws2015/bsb/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware Informatik

Mehr

H. Intel x86 CPU. Höhere Informatik. Systemprogrammierung: - Betriebssystemkonzepte, Ein- & Ausgabe

H. Intel x86 CPU. Höhere Informatik. Systemprogrammierung: - Betriebssystemkonzepte, Ein- & Ausgabe H. Intel x86 CPU Historische Entwicklung des x86 Registersatzes. Complex Instruction Set Computer (CISC), Deskriptoren & Adressierung, Cacheausstattung. Höhere Informatik Systemprogrammierung: - Betriebssystemkonzepte,

Mehr

ERA-Zentralübung Maschinenprogrammierung

ERA-Zentralübung Maschinenprogrammierung ERA-Zentralübung Maschinenprogrammierung M. Meyer LRR TU München 27.10.2017 Arithmetik mit 80386 Inhalt Rechenmodell Register Befehle Beispiele 80386-Rechenmodell Typisches Zwei-Address-Format Ziel :=

Mehr

Systemaufrufe. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2010/2011

Systemaufrufe. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2010/2011 Systemaufrufe Dr.-Ing. Matthias Sand Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2010/2011 Systemaufrufe 1/17 2010-09-13 Motivation Am Beispiel

Mehr

Assembler - Adressierungsarten

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

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

Betriebssystembau (BSB)

Betriebssystembau (BSB) Betriebssystembau (BSB) 4. Übung http://ess.cs.tu-dortmund.de/de/teaching/ws2012/bsb/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware Informatik

Mehr

Hinweise C-Programmierung

Hinweise C-Programmierung Hinweise C-Programmierung Dr.-Ing. Volkmar Sieh Department Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2016/2017 V. Sieh Hinweise C-Programmierung

Mehr

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

Der Intel 8086 Reto Gurtner 2005

Der Intel 8086 Reto Gurtner 2005 Der Intel 8086 Reto Gurtner 2005 1 1. DIE INTERNEN REGISTER... 3 1.1 ALLGEMEINE REGISTER AX, BX, CX UND DX... 3 DAS AX-REGISTER... 4 DAS BX-REGISTER... 4 DAS CX-REGISTER... 5 DAS DX-REGISTER... 5 1.2 DIE

Mehr

Übung zu Betriebssysteme

Übung zu Betriebssysteme Übung zu Betriebssysteme Interruptbehandlung 08. & 10. November 2017 Andreas Ziegler Bernhard Heinloth Lehrstuhl für Informatik 4 Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl für Verteilte

Mehr

Vorlesung: Rechnerstrukturen, Teil 2 (Modul IP7)

Vorlesung: Rechnerstrukturen, Teil 2 (Modul IP7) Vorlesung: Rechnerstrukturen, Teil 2 (Modul IP7) Vorlesung: Rechnerstrukturen, Teil 2 (Modul IP7) J. Zhang zhang@informatik.uni-hamburg.de Universität Hamburg AB Technische Aspekte Multimodaler Systeme

Mehr

Assembler Unterprogramme

Assembler Unterprogramme Assembler Unterprogramme Dr.-Ing. Volkmar Sieh Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2008 Assembler Unterprogramme 1/43 2008-06-03 Unterprogramme

Mehr

Übung zu Betriebssystembau (Ü BS)

Übung zu Betriebssystembau (Ü BS) Übung zu Betriebssystembau (Ü BS) Interruptbehandlung in OOStuBS Wanja Hofer Lehrstuhl für Informatik IV WS 07/08 1 Agenda: IRQ-Behandlung in OOStuBS Interrupts und Traps beim x86 Die Interrupt-Deskriptor-Tabelle

Mehr

Rechnerne etze und -O Organisatio on

Rechnerne etze und -O Organisatio on Rechnernetze und -Organisation Rechnerne etze und -O Organisatio on Teil B (30. März 2011) 2011 Michael Hutter Karl C. Posch www.iaik.tugraz.at/content/teaching/bachelor_courses/rechnernetze_und_organisation/

Mehr

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

U23 - Shellcode. Twix Chaos Computer Club Cologne.  Motivation Einstieg Der erste Shellcode Nullbytes, NOP Slides Twix e.v. http://koeln.ccc.de 2016-11-28 Überblick 1 Motivation Was ist Shellcode? Beispiel 2 Einstieg Erzeugen, Testen von Shellcode 3 Der erste Shellcode Strings in Shellcode 4 Nullbytes, NOP Slides

Mehr

6. Intel IA-32 Prozessoren Aufbau und Adressierungsarten

6. Intel IA-32 Prozessoren Aufbau und Adressierungsarten 6. Intel IA-32 Prozessoren Aufbau und Adressierungsarten 6.1 Gegenstand der Vorlesung Interne Organisation - Architektur - Register - Statusbits - Speicherstruktur Basis-Adressierungsarten - direct - absolute

Mehr

Rechnernetze und -Organisation. Teil B 2012 Tomislav Nad Karl C. Posch

Rechnernetze und -Organisation. Teil B 2012 Tomislav Nad Karl C. Posch Rechnernetze und -Organisation Teil B 2012 Tomislav Nad Karl C. Posch www.iaik.tugraz.at/content/teaching/bachelor_courses/rechnernetze_und_organisation/ 1 Two different assemblers GNU Assembler as : Uses

Mehr

Rechnernetze und -Organisation. Teil B (30. März 2011) 2011 Michael Hutter Karl C. Posch

Rechnernetze und -Organisation. Teil B (30. März 2011) 2011 Michael Hutter Karl C. Posch Rechnernetz R Teil B (30. März 2011) 2011 Michael Hutter Karl C. Posch www.iaik.tugraz.at/content/teaching/bachelor_courses/rechnernetze_und_organisation/ 1 Zeitplan für Teil B Mittwoch 23. März 2011 Mittwoch

Mehr

ERA-Zentralübung Maschinenprogrammierung

ERA-Zentralübung Maschinenprogrammierung ERA-Zentralübung Maschinenprogrammierung M. Meyer LRR TU München 17.11.2017 Inhalt Aufgabe 3.1 Aufgabe 3.2 Aufgabe 3.3 Logische Operationen Schiebebefehle Weitere Befehle Registerübersicht Aufgabe 3.1

Mehr

Betriebssystembau. 3. Übung. Michael Engel Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund

Betriebssystembau. 3. Übung. Michael Engel Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund Betriebssystembau 3. Übung Michael Engel Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund michael.engel@tu-dortmund.de http://ess.cs.uni-dortmund.de/~me/ 1 Agenda: IRQ-Behandlung

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

Maschinensprache. 2.5 x86 Speicherzugriff. Universität Mannheim

Maschinensprache. 2.5 x86 Speicherzugriff. Universität Mannheim Maschinensprache 2.5 x86 Speicherzugriff Hauptspeicher Speicheraufbau Linearer, zusammenhängender Adressraum Kleinste adressierbare Einheit: 1 Byte Unterteilung in physikalischen, linearen und virtuellen

Mehr

Technische Informatik I Übung 3: Assembler

Technische Informatik I Übung 3: Assembler Technische Informatik I Übung 3: Assembler Roman Trüb Computer Engineering Group, ETH Zürich 1 Lernziele Übung 3 Aufgabe 1 Aufbau und Aufruf von Funktionen in Assembler Assembler Codeanalyse Aufgabe 2

Mehr

Rechnern netze und Organisatio on

Rechnern netze und Organisatio on Rechnernetze und Organisation Subroutines 1 Übersicht Motivation Bibliotheken Call und Return Stack Parameterübergabe Lokale Variablen Shared Libraries Interrupts und Exceptions 2 Reusability von Code

Mehr

Just-In-Time-Compiler (2)

Just-In-Time-Compiler (2) Just-In-Time-Compiler (2) Dr.-Ing. Volkmar Sieh Department Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2015/2016 V. Sieh Just-In-Time-Compiler

Mehr

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

Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015 Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015 Ziele der Übung Aufgabe 1 Aufbau und Aufruf von Funktionen in Assembler Codeanalyse

Mehr

i386 Interrupt-Deskriptortabelle (IDT)

i386 Interrupt-Deskriptortabelle (IDT) Agenda: IRQ-Behandlung in OO-Stubs Interrupts und Traps bei x86 Die Interrupt-Deskriptor-Tabelle (IDT) Aufbau der IDT Traps und Hardware IRQs Der Programmierbare Interruptcontroller PIC 8295A Aufbau Verwendung

Mehr

Kodieren von Anweisungen im Binärformat für Maschinen quasi natürlich, zumindest effizient. Für Menschen hingegen ist Binärformat schwierig

Kodieren von Anweisungen im Binärformat für Maschinen quasi natürlich, zumindest effizient. Für Menschen hingegen ist Binärformat schwierig 2.1 Einleitung Kodieren von Anweisungen im Binärformat für Maschinen quasi natürlich, zumindest effizient Hinsichtlich Zuverlässigkeit (digital vorteilhafter als analog) Für Menschen hingegen ist Binärformat

Mehr

Software ubiquitärer Systeme

Software ubiquitärer Systeme Software ubiquitärer Systeme 3. Übung Constantin Timm Arbeitsgruppe Entwurfsautomatisierung für Eingebettete Systeme Lehrstuhl für Informatik 12 TU Dortmund constantin.timm@cs.tu-dortmund.de http://ls12-www.cs.tu-dortmund.de/staff/timm/

Mehr

C++ Templates - eine kleine Einführung

C++ Templates - eine kleine Einführung C++ Templates - eine kleine Einführung Peter Ulbrich, Martin Hoffmann Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme) www4.informatik.uni-erlangen.de

Mehr

Exploit-Entwicklung mit Python

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

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

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 Zentralübung

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

Betriebssystembau (BSB)

Betriebssystembau (BSB) Betriebssystembau (BSB) 4. Übung https://ess.cs.tu-dortmund.de/de/teaching/ws2017/bsb/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de https://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware Informatik

Mehr

1 Maschinenunabhängige Optimierungen. Maschinenunabhängige Optimierungen Wintersemester 2008/09 1 / 17

1 Maschinenunabhängige Optimierungen. Maschinenunabhängige Optimierungen Wintersemester 2008/09 1 / 17 1 Maschinenunabhängige Optimierungen Maschinenunabhängige Optimierungen Wintersemester 2008/09 1 / 17 Optimierungen Automatische Optimierungen sind nötig, weil unoptimierter Code meist besser lesbar ist.

Mehr

Just-In-Time-Compiler (2)

Just-In-Time-Compiler (2) Just-In-Time-Compiler (2) Dr.-Ing. Volkmar Sieh Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2011/2012 Just-In-Time-Compiler (2) 1/13 2011-09-12 Just-In-Time-Compiler

Mehr

Mikrorechentechnik 1. Befehlssatzarchitektur. Professur für Prozessleittechnik Wintersemester 2011/2012

Mikrorechentechnik 1. Befehlssatzarchitektur. Professur für Prozessleittechnik Wintersemester 2011/2012 Fakultät Elektrotechnik und Informationstechnik, Professur für Prozessleittechnik Mikrorechentechnik 1 Befehlssatzarchitektur Professur für Prozessleittechnik Wintersemester 2011/2012 Qualifikationsziele

Mehr

Kompilierung eines Programmes. Mnemonics, ld, GCC, AS

Kompilierung eines Programmes. Mnemonics, ld, GCC, AS Assembler-Crashkurs Kompilierung eines Programmes Mnemonics, ld, GCC, AS Wie entsteht eine Binary? 1. Wir schreiben Source-Code 2. Wir Kompilieren diesen Source-Code ( es entsteht Object-Code/Assembler)

Mehr

Betriebssystembau (BSB)

Betriebssystembau (BSB) Betriebssystembau (BSB) 5. Übung http://ess.cs.tu-dortmund.de/de/teaching/ws2015/bsb/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware Informatik

Mehr

C++ Templates - eine kleine Einführung. Funktionstemplates. Fabian Scheler, Peter Ulbrich, Niko Böhm. 20. Oktober 2008

C++ Templates - eine kleine Einführung. Funktionstemplates. Fabian Scheler, Peter Ulbrich, Niko Böhm. 20. Oktober 2008 Überblick 1 Allgemein C++ Templates - eine kleine Einführung Fabian Scheler, Peter Ulbrich, Niko Böhm Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme)

Mehr

Betriebssysteme (BS) Koroutinen und Fäden. Überblick: Vorlesungen. Agenda. Agenda. Anwendung(en) Hardware. Motivation: Quasi-Parallelität

Betriebssysteme (BS) Koroutinen und Fäden. Überblick: Vorlesungen. Agenda. Agenda. Anwendung(en) Hardware. Motivation: Quasi-Parallelität Betriebssysteme (BS) Überblick: Vorlesungen Anwendung(en) Koroutinen und Fäden Daniel Lohmann Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Gerätezugriff (Treiber) Kontrollflussabstraktion

Mehr

TIn 1: Feedback Laboratories. Lecture 4 Data transfer. Question: What is the IP? Institut für Embedded Systems. Institut für Embedded Systems

TIn 1: Feedback Laboratories. Lecture 4 Data transfer. Question: What is the IP? Institut für Embedded Systems. Institut für Embedded Systems Mitglied der Zürcher Fachhochschule TIn 1: Lecture 4 Data transfer Feedback Laboratories Question: What is the IP? Why do we NEED an IP? Lecture 3: Lernziele Moving data, the why s and wherefores Moving

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

Übungen zu Grundlagen der Rechnerarchitektur und -organisation (ÜGRa)

Übungen zu Grundlagen der Rechnerarchitektur und -organisation (ÜGRa) Übungen zu Grundlagen der Rechnerarchitektur und -organisation (ÜGRa) Aufgabenblatt 07 Ausgabe: 2016-06-13 Abgabe: 2016-06-27 Aufgabe 1: Die MIPS-Architektur ist eine typische Register-Register-Architektur

Mehr

Übung zu Betriebssysteme

Übung zu Betriebssysteme Übung zu Betriebssysteme Interruptsynchronisation 22. & 24. November 2017 Andreas Ziegler Bernhard Heinloth Lehrstuhl für Informatik 4 Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl für Verteilte

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 Zentralübung

Mehr

Informatik I (D-ITET)

Informatik I (D-ITET) //009 Informatik I (D-ITET) Übungsstunde 8, 6..009 simonmayer@student.ethz.ch ETH Zürich Besprechung/Vertiefung der Vorlesung [..009] ArrayStack Ausgezeichnet Einige haben s etwas kompliziert gemacht clear()

Mehr

Assembler Tutorial Grundlagen und Theorie

Assembler Tutorial Grundlagen und Theorie Assembler Tutorial http://wwwamoknotrixde http://wwwamoknotrixde Vorwort In diesem Tutorial werden wir Grundlagenarbeit betreiben Diese besteht daraus, daß wir Begriffe wie Register, oder Stack erläutern

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

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

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 7. Vorlesung Dr.-Ing. Wolfgang Heenes int main() { printf("hello, world!"); return 0; } msg: main:.data.asciiz "Hello, world!".text.globl main la

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

Einführung in (Intel) 80x86 Assembler. Einführung in (Intel) 80x86 Assembler Wintersemester 2009/10 1 / 31

Einführung in (Intel) 80x86 Assembler. Einführung in (Intel) 80x86 Assembler Wintersemester 2009/10 1 / 31 Einführung in (Intel) 80x86 Assembler Einführung in (Intel) 80x86 Assembler Wintersemester 2009/10 1 / 31 Einführung Die folgenden Folien geben einen Überblick über die weit verbreitet x86 Architektur

Mehr

Rechnernetze und Organisation

Rechnernetze und Organisation Framework für Assignment A2 1 Übersicht Framework für Assignment A2 WH: Aufgabenstellung Klassen und Methoden Getting started Erste Instruktion aus Testdaten dekodieren 2 Aufgabenstellung Instruction-Set

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

20 Task-Management Was bleibt noch zu tun? Wird ein Poolelement in die Queue aufgenommen, dann muß der Poolelemente-Zähler inkrementiert werden. Dies erledigt die Anweisung pool_kopf_adr -> anzahl_der.pool_elemente

Mehr

Betriebssystembau (BSB)

Betriebssystembau (BSB) Betriebssystembau (BSB) Das Programmiermodell der Intel IA-32 Architektur http://ess.cs.tu-.de/de/teaching/ws213/bsb/ Olaf Spinczyk olaf.spinczyk@tu-.de http://ess.cs.tu-.de/~os AG Eingebettete System

Mehr

ERA-Zentralübung Maschinenprogrammierung

ERA-Zentralübung Maschinenprogrammierung Marcel Meyer LRR TU München 04.11.2016 Inhalt Aufgabe 1.1 Aufgabe 1.2 Speicherzugriffe Unbedingte Sprünge Stapelspeicher Unterprogramme Aufgabe 1.1 Quellregister AX, BX, CX Konstante deklarieren Werte

Mehr

x86-assemblerprogrammierung

x86-assemblerprogrammierung x86-assemblerprogrammierung Inhalt Literatur Register Speicherverwaltung Adressierung Stackverwaltung Datentypen und Befehlssatz Befehlskodierung Dandamudi : Intruduction to Assembly Language Programming

Mehr

Betriebssystembau (BSB)

Betriebssystembau (BSB) Betriebssystembau (BSB) Das Programmiermodell der Intel IA-32 Architektur Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os

Mehr

Tafelübung zu BS 2. Threadsynchronisation

Tafelübung zu BS 2. Threadsynchronisation Tafelübung zu BS 2. Threadsynchronisation Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/

Mehr

Systemnahe Programmierung in C (SPiC)

Systemnahe Programmierung in C (SPiC) Systemnahe Programmierung in C (SPiC) 9 Funktionen Jürgen Kleinöder, Daniel Lohmann, Volkmar Sieh Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg

Mehr

Klausur Mikroprozessortechnik

Klausur Mikroprozessortechnik 1 Prof. Dr. K. Wüst WS 2001 FH Gießen Friedberg, FB MNI Studiengang Informatik Nachname: Vorname: Matrikelnummer: Klausur Mikroprozessortechnik 14.9.2001 Punkteverteilung Aufgabe Punkte erreicht 1 3 2

Mehr

Übungen zu Grundlagen der systemnahen Programmierung in C (GSPiC) im Sommersemester 2018

Übungen zu Grundlagen der systemnahen Programmierung in C (GSPiC) im Sommersemester 2018 Übungen zu Grundlagen der systemnahen Programmierung in C (GSPiC) im Sommersemester 2018 2018-05-29 Bernhard Heinloth Lehrstuhl für Informatik 4 Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl

Mehr

Die Befehle mit dem Ziel IP sind nichts anderes als Sprungbefehle, sie sind unten noch mal aufgeführt.

Die Befehle mit dem Ziel IP sind nichts anderes als Sprungbefehle, sie sind unten noch mal aufgeführt. Die Befehle des Modellrechners in übersichtlichen Tabellen: Alle Opcodes sind Hexadezimal angegeben (s.u.). 1.) Die Ladebefehle zwischen den einzelnen Registern. In der oberen Zeile steht jeweils die Quelle

Mehr

Betriebssysteme (BS)

Betriebssysteme (BS) Betriebssysteme (BS) VL 6 IA-32 das Programmiermodell der Intel-Architektur Daniel Lohmann Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen Nürnberg

Mehr

Übung zu Betriebssysteme

Übung zu Betriebssysteme Übung zu Betriebssysteme Zeitscheibenscheduling 20. & 22. Dezember 2017 Andreas Ziegler Bernhard Heinloth Lehrstuhl für Informatik 4 Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl für Verteilte

Mehr

Betriebssystembau (BSB)

Betriebssystembau (BSB) Betriebssystembau (BSB) Das Programmiermodell der Intel IA-32 Architektur http://ess.cs.tu-dortmund.de/de/teaching/ws212/bsb/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de http://ess.cs.tu-dortmund.de/~os

Mehr

Assembler Integer-Arithmetik

Assembler Integer-Arithmetik Assembler Integer-Arithmetik Dr.-Ing. Volkmar Sieh Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2008 Assembler Integer-Arithmetik 1/23 2008-04-01 Arithmetik

Mehr

Betriebssysteme (BS) IA-32. Überblick. das Programmiermodell der Intel Architektur. Historie der Intel x86 Prozessoren. 8086: Programmiermodell

Betriebssysteme (BS) IA-32. Überblick. das Programmiermodell der Intel Architektur. Historie der Intel x86 Prozessoren. 8086: Programmiermodell Betriebssysteme (BS) alias Betriebssystembau (BSB) IA-32 das Programmiermodell der Intel Architektur Überblick Historie Basisprogrammiermodell Speicherverwaltung und Adressierung Schutz "Tasks" Zusammenfassung

Mehr

Buffer Overflow. Denis Graf, Tim Krämer, Konstantin Schlese. Universität Hamburg Fachbereich Informatik. 6. Januar 2013

Buffer Overflow. Denis Graf, Tim Krämer, Konstantin Schlese. Universität Hamburg Fachbereich Informatik. 6. Januar 2013 Buffer Overflow Denis Graf, Tim Krämer, Konstantin Schlese Universität Hamburg Fachbereich Informatik 6. Januar 2013 Agenda 1. Einführung Allgemeines über Buffer Overflows Historische Angriffe Definition

Mehr

Kontrollfragen Mikrocontroller Programmiersprache C H1203 Felix Rohrer

Kontrollfragen Mikrocontroller Programmiersprache C H1203 Felix Rohrer Block 1 1. Welcher Wert hat w? int w = 034; 28 (Dezimal) 034 wird als Octal interpretiert 34oct = 28dec 2. Wie lauten die Ergebnisse? unsigned int a = 3, b = 5, c = 7; unsigned int x, y, z; x = a == 3;

Mehr

Besprechung Aufgabe 1: Prozesse verwalten Fortsetzung Grundlagen C-Programmierung Aufgabe 2: Threadsynchronisation

Besprechung Aufgabe 1: Prozesse verwalten Fortsetzung Grundlagen C-Programmierung Aufgabe 2: Threadsynchronisation Betriebssysteme Tafelübung 2. Thread-Synchronisation http://ess.cs.tu-dortmund.de/de/teaching/ss2016/bs/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware

Mehr

Malware-Analyse und Reverse Engineering. 4: Startup Prof. Dr. Michael Engel

Malware-Analyse und Reverse Engineering. 4: Startup Prof. Dr. Michael Engel Malware-Analyse und Reverse Engineering 4: Startup 6.4.2017 Prof. Dr. Michael Engel Überblick (heute) Themen: Prozesserzeugung in Linux: fork und exec Linker und Einsprungpunkt Funktionsaufrufe und Parameterübergabe

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

Einführung in (Intel) 80x86 Assembler. Einführung in (Intel) 80x86 Assembler Wintersemester 2008/09 1 / 26

Einführung in (Intel) 80x86 Assembler. Einführung in (Intel) 80x86 Assembler Wintersemester 2008/09 1 / 26 Einführung in (Intel) 80x86 Assembler Einführung in (Intel) 80x86 Assembler Wintersemester 2008/09 1 / 26 1 Geschichte 2 Programmiermodell 3 Befehlssatz 4 Konventionen 5 Beispiele 6 SSE 7 Literatur Einführung

Mehr

Betriebssysteme BS-V SS 2015. Hans-Georg Eßer. Foliensatz V: Ulix: Interrupts und Faults Ulix: System Calls. Dipl.-Math., Dipl.-Inform.

Betriebssysteme BS-V SS 2015. Hans-Georg Eßer. Foliensatz V: Ulix: Interrupts und Faults Ulix: System Calls. Dipl.-Math., Dipl.-Inform. BS-V Betriebssysteme SS 2015 Dipl.-Math., Dipl.-Inform. Foliensatz V: Ulix: Interrupts und Faults Ulix: System Calls v1.0, 2015/05/28 (klassische Dokumentation) Folie V-1 Übersicht: BS Praxis und BS Theorie

Mehr