Übung zu Betriebssysteme
|
|
- Fritzi Fertig
- vor 5 Jahren
- Abrufe
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 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
MehrAssembler. 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
MehrEinfü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
MehrU23 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
MehrBetriebssystembau. 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
MehrAssembler - 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
MehrBetriebssystembau (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
MehrU23 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
MehrBetriebssystembau (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
MehrH. 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,
MehrERA-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 :=
MehrSystemaufrufe. 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
MehrAssembler - 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
Mehrx86 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
MehrBetriebssystembau (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
MehrHinweise 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
MehrKarlsruher 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
MehrDer 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 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
MehrVorlesung: 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
MehrAssembler 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) 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
MehrRechnerne 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/
MehrU23 - 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
Mehr6. 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
MehrRechnernetze 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
MehrRechnernetze 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
MehrERA-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
MehrBetriebssystembau. 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
MehrHinweise 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
MehrMaschinensprache. 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
MehrTechnische 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
MehrRechnern 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
MehrJust-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
MehrTechnische 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
Mehri386 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
MehrKodieren 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
MehrSoftware 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/
MehrC++ 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
MehrExploit-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
Mehr2. 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
MehrFAKULTÄ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
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
MehrBetriebssystembau (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
Mehr1 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.
MehrJust-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
MehrMikrorechentechnik 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
MehrKompilierung 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)
MehrBetriebssystembau (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
MehrC++ 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)
MehrBetriebssysteme (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
MehrTIn 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
MehrDatenstrukturen, 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) 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 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
MehrFAKULTÄ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
MehrInformatik 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()
MehrAssembler 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
MehrAufgabe 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
MehrBuffer 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
MehrGrundlagen 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
MehrAssembler - 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
MehrEinfü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
MehrRechnernetze 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
MehrAlgorithmen 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.
Mehr20 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
MehrBetriebssystembau (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
MehrERA-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
Mehrx86-assemblerprogrammierung
x86-assemblerprogrammierung Inhalt Literatur Register Speicherverwaltung Adressierung Stackverwaltung Datentypen und Befehlssatz Befehlskodierung Dandamudi : Intruduction to Assembly Language Programming
MehrBetriebssystembau (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
MehrTafelü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/
MehrSystemnahe 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
MehrKlausur 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 2018-05-29 Bernhard Heinloth Lehrstuhl für Informatik 4 Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl
MehrDie 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
MehrBetriebssysteme (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 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
MehrBetriebssystembau (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
MehrAssembler 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
MehrBetriebssysteme (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
MehrBuffer 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
MehrKontrollfragen 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;
MehrBesprechung 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
MehrMalware-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
MehrInhaltsverzeichnis. 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
MehrEinfü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
MehrBetriebssysteme 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