SlideShare a Scribd company logo
Πανεπιςτήμιο Πατρών
Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών
Τομέασ Ηλεκτρονικήσ και Υπολογιςτών
Προηγμένοι Μικροεπεξεργαςτέσ
1
“Μειέηε ππνζηήξημεο κεραληζκώλ
αζθάιεηαο Protected Mode ζην DosBox”
ζην κάζεκα
“Πποηγμένοι Μικποεπεξεπγαζηέρ”
Σςμμεηέσονηερ:
 Σθξεπεηόο Δεκήηξηνο, 7380
 Παπαδόπνπινο Γεώξγηνο Μάξηνο, 7356
Εξάμηνο: 9o
Ακαδημαικό Έηορ: 2013-2014
Πανεπιςτήμιο Πατρών
Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών
Τομέασ Ηλεκτρονικήσ και Υπολογιςτών
Προηγμένοι Μικροεπεξεργαςτέσ
2
Σκοπόρ
Η δνθηκή ηωλ παξαθάηω εξωηεκάηωλ ζην DOSBOX:
1. Μεηάβαζη από Code Segment ζε άλλο με ηο ίδιο privilege level (ζηο παπάδειγμα
και ηα δύο μηδέν).
2. Μεηάβαζη από Code Segment ζε άλλο με ςτηλόηεπο privilege level (ζηο
παπάδειγμα από μηδέν ζε ηπία).
3. Μεηάβαζη από Code Segment ζε άλλο με σαμηλόηεπο privilege level (ζηο
παπάδειγμα από ηπία ζε μηδέν).
4. Μεηαθοπά Data Segment ζε Code Segment.
5. Μεηαθοπά Code Segment ζε Data Segment.
6. Μεηαθοπά ζε ζημείο πος ςπεπβαίνει ηο limit ενόρ Code Segment.
7. Μεηαθοπά ζε ζημείο πος ςπεπβαίνει ηο limit ενόρ Data Segment.
8. Μεηάβαζη μέζυ Call Gate ζε σαμηλόηεπο privilege level.
9. Έλεγσορ δςναηόηηηαρ εκηέλεζηρ πποζηαηεςμένυν ενηολών από privilege level 3.
Πανεπιςτήμιο Πατρών
Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών
Τομέασ Ηλεκτρονικήσ και Υπολογιςτών
Προηγμένοι Μικροεπεξεργαςτέσ
3
Χπηζιμοποιούμενα Επγαλεία
 DOSBOX
 Notepad ++
 Intel Manual 386
1. Μεηάβαζη από Code Segment ζε άλλο με ηο ίδιο privilege level (ζηο
παπάδειγμα και ηα δύο μηδέν).
Δεκηνπξγήζακε έλα Code Selector Test (CODE_SEL_TEST) θαη ηνλ αληίζηνηρν
Descriptor νη νπνίνη είλαη θιώλνη ηνπ CODE_SEL θαη ηνπ code_sel_descr έηζη ώζηε λα
κεηαβνύκε από privilege level 0 ηνπ CODE_SEL ζην νπνίν είκαζηε ζην privilege level 0
ηνπ CODE_SEL_TEST. Γηα λα εθηειέζνπκε απηό ην εξώηεκα βάιακε ηελ εληνιή:
call CODE_SEL_TEST:task2
Σύκθωλα κε ην 6.3.3 ηνπ manual ε κεηαθνξά ειέγρνπ κεηαμύ 2 code segment κε ίδην
privilege level είλαη επηηξεπηή θαη ην πξόγξακκα έηξεμε θαλνληθά όπωο αλακελόηαλ.
Τα CODE_SEL_TEST θαη code_descr_test νξίδνληαη ζην αξρείν gdt.asm ωο
εμήο:
CODE_SEL_TEST equ $-gdt_start
code_descr_test: istruc seg_descriptor
at limit0_15, dw 0xFFFF ; limit 0:15
at base0_15, dw 0 ; base 0:15
at base16_23, db 0 ; base 16:23
at type_dpl, db 0x9B ; 1 00 1 001 1 = present + DPL=0 +
code_segment_descr + C=0 + Read + not_active
at limit16_19,db 0xCF ; 1 1 00 1111 = Granularity + 32bit code + limit
16:19
at base24_31, db 0 ; base 24:31
; base = 0x0, limit = 0xFFFFFFFF
iend
Πανεπιςτήμιο Πατρών
Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών
Τομέασ Ηλεκτρονικήσ και Υπολογιςτών
Προηγμένοι Μικροεπεξεργαςτέσ
4
Φηηάρλνπκε ην base address ζην αξρείν stdlib.asm ωο εμήο:
; Update Code Descriptor base address field
push eax
push word code_descr_test
call initialize_descriptor_base
add sp, 6
2. Μεηάβαζη από Code Segment ζε άλλο με ςτηλόηεπο privilege level (ζηο
παπάδειγμα από μηδέν ζε ηπία).
Δεκηνπξγήζακε έλα CODE_SEL_TS1 θαη ηνλ αληίζηνηρν Descriptor νη νπνίνη
είλαη θιώλνη ηνπ CODE_SEL θαη ηνπ code_sel_descr κε privilege level 3 έηζη ώζηε λα
κεηαβνύκε από privilege level 0 ηνπ CODE_SEL ζην νπνίν είκαζηε ζην privilege level 3
ηνπ CODE_SEL_TS1. Γηα λα εθηειέζνπκε απηό ην εξώηεκα βάιακε ηελ εληνιή:
call CODE_SEL_TS1:task2
Σύκθωλα κε ην θεθάιαην 6.3.3 γηα Conforming Bit 0, επεηδή ην DPL (3) δελ είλαη
ίζν κε ην CPL (0), θαλνληθά έπξεπε ην πξόγξακκα λα κελ ηξέμεη. Ωζηόζν ην DOSBOX
πξνθαλώο δελ θάλεη Privilege Level Checking νπόηε ην πξόγξακκα έηξεμε.
Σύκθωλα κε ην θεθάιαην 6.3.3 γηα Conforming Bit 1, επεηδή ην DPL (3) δελ είλαη
κηθξόηεξν ή ίζν ηνπ CPL (0), θαλνληθά έπξεπε ην πξόγξακκα λα κελ ηξέμεη. Ωζηόζν ην
DOSBOX πξνθαλώο δελ θάλεη Privilege Level Checking νπόηε ην πξόγξακκα έηξεμε.
Τα CODE_SEL_T1 θαη code_descr_TS1 νξίδνληαη ζην αξρείν gdt.asm ωο εμήο:
; The code selector and code descriptor of the task1 with privilege level 3
CODE_SEL_TS1 equ $-gdt_start
code_descr_TS1: istruc seg_descriptor
at limit0_15, dw 0xFFFF ; limit 0:15
at base0_15, dw 0 ; base 0:15
at base16_23, db 0 ; base 16:23
at type_dpl, db 0xFB ; 1 11 1 101 1 = present + DPL=3 +
code_segment_descr + C=0 + Read + not_active
at limit16_19,db 0xCF ; 1 1 00 1111 = Granularity + 32bit code + limit
16:19
at base24_31, db 0 ; base 24:31
; base = 0x0, limit = 0xFFFFFFFF
iend
; Update Code Descriptor base address field
; Update Code Descriptor TS1 base address field
push eax
Πανεπιςτήμιο Πατρών
Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών
Τομέασ Ηλεκτρονικήσ και Υπολογιςτών
Προηγμένοι Μικροεπεξεργαςτέσ
5
push word code_descr_TS1
call initialize_descriptor_base
add sp, 6
3. Μεηάβαζη από Code Segment ζε άλλο με σαμηλόηεπο privilege level (ζηο
παπάδειγμα από ηπία ζε μηδέν).
Αξρηθά, πεγαίλνπκε κέζω iret ζην task1, ην νπνίν εθηειεί ην CODE_SEL_TS1 ην
νπνίν έρεη Privilege Level 3. Από εθεί ζέινπκε λα πάκε ζην CODE_SEL κε Privilege
Level 0 κέζω ηεο εληνιήο:
call CODE_SEL:task2
Σύκθωλα κε ην θεθάιαην 6.3.3 ηνπ manual γηα Conforming Bit 0, επεηδή ην DPL
(0) δελ είλαη ίζν κε ην CPL (3), θαλνληθά έπξεπε ην πξόγξακκα λα κελ ηξέμεη. Ωζηόζν
ην DOSBOX πξνθαλώο δελ θάλεη Privilege Level Checking νπόηε ην πξόγξακκα
έηξεμε.
Σύκθωλα κε ην θεθάιαην 6.3.3 ηνπ manual γηα Conforming Bit 1, επεηδή ην DPL
(0) είλαη κηθξόηεξν ή ίζν ηνπ CPL (3), θαλνληθά έπξεπε ην πξόγξακκα λα ηξέμεη, όπωο
θαη έγηλε.
4. Μεηαθοπά Data Segment ζε Code Segment.
Πξνζπαζνύκε λα κεηαθηλήζνπκε ην DATA_SEL ζηνλ CS ηνπ πξνγξάκκαηνο
κέζω ηωλ εληνιώλ:
call DATA_SEL:0
Σύκθωλα κε ην θεθάιαην 6.3.1.1 ηνπ manual ε κεηαθίλεζε απηή είλαη κε
επηηξεπηή δηόηη δελ κπνξνύκε λα βάινπκε Data Selector ζην CS. Τν DOSBOX βγάδεη
κήλπκα: CALL:Descriptor type b unsupported.
Πανεπιςτήμιο Πατρών
Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών
Τομέασ Ηλεκτρονικήσ και Υπολογιςτών
Προηγμένοι Μικροεπεξεργαςτέσ
6
5. Μεηαθοπά Code Segment ζε Data Segment.
Πξνζπαζνύκε λα κεηαθηλήζνπκε ην CODE_SEL ζηνλ DS ηνπ πξνγξάκκαηνο
κέζω ηωλ εληνιώλ:
mov ax, CODE_SEL
mov ds, ax
Σύκθωλα κε ην θεθάιαην 6.3.1.1 ηνπ manual κηα ηέηνηα κεηαθίλεζε δελ
απαγνξεύεηαη γη’ απηό θαη ην DOSBOX δελ καο έβγαιε ηέηνην πξόβιεκα.
6. Μεηαθοπά ζε ζημείο πος ςπεπβαίνει ηο limit ενόρ Code Segment.
Φηηάμακε ην CODE_SEL_LIMIT ωο θιόλν ηνπ CODE_SEL θαη ην call_descr_limit
ωο θιόλν ηνπ call_descr κε κόλε δηαθνξά όηη ην call_descr_limit έρεη limit 0 γηα λα
δνθηκάζνπκε ην Limit Checking κέζω ηωλ εληνιώλ:
call CODE_SEL_LIMIT:0xffff
Σύκθωλα κε ην θεθάιαην 6.3.1.2 ηνπ manual κηα ηέηνηα κεηαθνξά ειέγρνπ δελ
είλαη επηηξεπηή δηόηη ην limit καο είλαη κεδέλ θαη ην offset δηάθνξν ηνπ κεδελόο. Ωζηόζν
ην DOSBOX δε δέρζεθε θαλ ηε κεηαθίλεζε βγάδνληαο ην κήλπκα: CALL:Descriptor type
b unsupported.
Τα CODE_SEL_LIMIT θαη code_descr_limit νξίδνληαη ζην αξρείν gdt.asm ωο
εμήο:
CODE_SEL_LIMIT equ $-gdt_start
Πανεπιςτήμιο Πατρών
Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών
Τομέασ Ηλεκτρονικήσ και Υπολογιςτών
Προηγμένοι Μικροεπεξεργαςτέσ
7
code_descr_limit: istruc seg_descriptor
at limit0_15, dw 0x0 ; limit 0:15
at base0_15, dw 0 ; base 0:15
at base16_23, db 0 ; base 16:23
at type_dpl, db 0x9B ; 1 00 1 001 1 = present + DPL=0 +
code_segment_descr + C=0 + Read + not_active
at limit16_19,db 0x0 ; 1 1 00 1111 = Granularity + 32bit code + limit
16:19
at base24_31, db 0 ; base 24:31
; base = 0x0, limit = 0x0
iend
7. Μεηαθοπά ζε ζημείο πος ςπεπβαίνει ηο limit ενόρ Data Segment.
Φηηάμακε ην DATA_SEL_LIMIT ωο θιόλν ηνπ DATA_SEL θαη ην data_descr_limit
ωο θιόλν ηνπ data_descr κε κόλε δηαθνξά όηη ην data_descr_limit έρεη limit 0, έηζη ώζηε
λα δνθηκάζνπκε ην Limit Checking κέζω ηωλ εληνιώλ:
mov word ax, DATA_SEL_LIMIT
mov ds, ax
mov ax, vidmem_start
Σύκθωλα κε ην θεθάιαην 6.3.1.2 ηνπ manual κηα ηέηνηα κεηαθνξά ειέγρνπ δελ
είλαη επηηξεπηή δηόηη ην limit καο είλαη κεδέλ θαη ην offset δηάθνξν ηνπ κεδελόο. Ωζηόζν
ην πξόγξακκα έηξεμε θαλνληθά άξα πξνθαλώο ην DOSBOX δελ θάλεη Limit Checking.
Τα CODE_SEL_LIMIT θαη code_descr_limit νξίδνληαη ζην αξρείν gdt.asm ωο
εμήο:
Πανεπιςτήμιο Πατρών
Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών
Τομέασ Ηλεκτρονικήσ και Υπολογιςτών
Προηγμένοι Μικροεπεξεργαςτέσ
8
DATA_SEL_LIMIT equ $-gdt_start
data_descr_limit: istruc seg_descriptor
at limit0_15, dw 0x0 ; limit 0:15
at base0_15, dw 0 ; base 0:15
at base16_23, db 0 ; base 16:23
at type_dpl, db 0x92 ; 1 00 1 101 0 = present + DPL=0 +
data_segment_descr + E=0 + RW + not_active
at limit16_19,db 0x0 ; 1 1 00 1111 = Granularity + Big + limit 16:19
at base24_31, db 0 ; base 24:31
; base = 0x0, limit = 0xFFFFFFFF
iend
8. Μεηάβαζη μέζυ Call Gate ζε σαμηλόηεπο privilege level.
Φηηάμακε έλα Call gate κε DPL 3 ώζηε λα κεηαβνύκε από Privilege Level 3 ζε
Privilege Level 0. Μεηαβήθακε ζην task1 κέζω iret θαη κεηά ζέιακε λα θάλνπκε ηε
κεηαθνξά κέζω ηεο εληνιήο:
call CALL_GATE_SEL:0
Σύκθωλα κε ην 6.3.4 ηθαλνπνηνύληαη νη πξνϋπνζέζεηο, ωζηόζν ην πξόγξακκα δελ
έηξεμε ζην DOSBOX θαη έβγαιε κήλπκα: CALL:GATE:SS: no writable data segment.
To Call Gate ην νξίδνπκε ζην αξρείν gdt.asm ωο εμήο:
; The call gate selector and descriptor
CALL_GATE_SEL equ $-gdt_start
call_gate_descr: istruc call_gate_descriptor
at offset0_15, dw 0
at selector, dw 0
at dword_count, db 0
at p_type_dpl, db 0xEC ; Εδώ νξίζακε DPL=3
at offset16_31, dw 0
iend
Τν selector θαη ην offset ηνπ call gate descriptor ηα θηηάρλνπκε ζην αξρείν
stdlib.asm ωο εμήο:
; Update the selector of the call gate with the CODE_SEL
mov word [call_gate_descr+2], CODE_SEL;
Πανεπιςτήμιο Πατρών
Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών
Τομέασ Ηλεκτρονικήσ και Υπολογιςτών
Προηγμένοι Μικροεπεξεργαςτέσ
9
; Update the offsets of the call gate with the address of task2
push eax
mov eax, task1
mov word [call_gate_descr], ax;
shr eax, 16
mov word [call_gate_descr+6], ax;
9. Έλεγσορ δςναηόηηηαρ εκηέλεζηρ πποζηαηεςμένυν ενηολών από privilege
level 3.
Μεηαβαίλνπκε κε iret ζην task1 θαη από εθεί (ελώ είκαζηε ζε CPL 3)
πξνζπαζνύκε λα εθηειέζνπκε ηελ πξνζηαηεπκέλε εληνιή:
hlt
Σύκθωλα κε ην θεθάιαην 6.3.5.1 ε εληνιή απηή δελ κπνξεί λα εθηειεζηεί δηόηη
απαηηεί ην CPL λα είλαη κεδέλ. Τν DOSBOX θξαζάξεη αθνύ βγάιεη ην κήλπκα Exit to
error: INT: Inner level: Stack segment not writable.
Πανεπιςτήμιο Πατρών
Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών
Τομέασ Ηλεκτρονικήσ και Υπολογιςτών
Προηγμένοι Μικροεπεξεργαςτέσ
10

More Related Content

More from Georgios-Marios Papadopoulos

Architecture of LAN's
Architecture of LAN's Architecture of LAN's
Architecture of LAN's
Georgios-Marios Papadopoulos
 
Automatic detection of instruments in laparoscopic images - Presentation
Automatic detection of instruments in laparoscopic images - PresentationAutomatic detection of instruments in laparoscopic images - Presentation
Automatic detection of instruments in laparoscopic images - Presentation
Georgios-Marios Papadopoulos
 
Automatic detection of instruments in laparoscopic images
Automatic detection of instruments in laparoscopic imagesAutomatic detection of instruments in laparoscopic images
Automatic detection of instruments in laparoscopic images
Georgios-Marios Papadopoulos
 
Dynamics equation of motion and Trajectory planning of a 2 DOF RR robotic arm
Dynamics equation of motion and Trajectory planning of a 2 DOF RR robotic armDynamics equation of motion and Trajectory planning of a 2 DOF RR robotic arm
Dynamics equation of motion and Trajectory planning of a 2 DOF RR robotic arm
Georgios-Marios Papadopoulos
 
Studoland: The Student's Dream
Studoland: The Student's DreamStudoland: The Student's Dream
Studoland: The Student's Dream
Georgios-Marios Papadopoulos
 
Φοιτητική Επιχειρηματικότητα: H πορεία από ένα μακρινό όνειρο σε μια δημιουργ...
Φοιτητική Επιχειρηματικότητα: H πορεία από ένα μακρινό όνειρο σε μια δημιουργ...Φοιτητική Επιχειρηματικότητα: H πορεία από ένα μακρινό όνειρο σε μια δημιουργ...
Φοιτητική Επιχειρηματικότητα: H πορεία από ένα μακρινό όνειρο σε μια δημιουργ...
Georgios-Marios Papadopoulos
 
Marketing Olympia as a Tourist Destination
Marketing Olympia as a Tourist DestinationMarketing Olympia as a Tourist Destination
Marketing Olympia as a Tourist Destination
Georgios-Marios Papadopoulos
 

More from Georgios-Marios Papadopoulos (8)

Architecture of LAN's
Architecture of LAN's Architecture of LAN's
Architecture of LAN's
 
Automatic detection of instruments in laparoscopic images - Presentation
Automatic detection of instruments in laparoscopic images - PresentationAutomatic detection of instruments in laparoscopic images - Presentation
Automatic detection of instruments in laparoscopic images - Presentation
 
Automatic detection of instruments in laparoscopic images
Automatic detection of instruments in laparoscopic imagesAutomatic detection of instruments in laparoscopic images
Automatic detection of instruments in laparoscopic images
 
Dynamics equation of motion and Trajectory planning of a 2 DOF RR robotic arm
Dynamics equation of motion and Trajectory planning of a 2 DOF RR robotic armDynamics equation of motion and Trajectory planning of a 2 DOF RR robotic arm
Dynamics equation of motion and Trajectory planning of a 2 DOF RR robotic arm
 
Studoland: The Student's Dream
Studoland: The Student's DreamStudoland: The Student's Dream
Studoland: The Student's Dream
 
Φοιτητική Επιχειρηματικότητα: H πορεία από ένα μακρινό όνειρο σε μια δημιουργ...
Φοιτητική Επιχειρηματικότητα: H πορεία από ένα μακρινό όνειρο σε μια δημιουργ...Φοιτητική Επιχειρηματικότητα: H πορεία από ένα μακρινό όνειρο σε μια δημιουργ...
Φοιτητική Επιχειρηματικότητα: H πορεία από ένα μακρινό όνειρο σε μια δημιουργ...
 
Marketing Olympia as a Tourist Destination
Marketing Olympia as a Tourist DestinationMarketing Olympia as a Tourist Destination
Marketing Olympia as a Tourist Destination
 
A flashback to the future
A flashback to the futureA flashback to the future
A flashback to the future
 

Protected Mode security mechanisms support in DosBox

  • 1. Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ 1 “Μειέηε ππνζηήξημεο κεραληζκώλ αζθάιεηαο Protected Mode ζην DosBox” ζην κάζεκα “Πποηγμένοι Μικποεπεξεπγαζηέρ” Σςμμεηέσονηερ:  Σθξεπεηόο Δεκήηξηνο, 7380  Παπαδόπνπινο Γεώξγηνο Μάξηνο, 7356 Εξάμηνο: 9o Ακαδημαικό Έηορ: 2013-2014
  • 2. Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ 2 Σκοπόρ Η δνθηκή ηωλ παξαθάηω εξωηεκάηωλ ζην DOSBOX: 1. Μεηάβαζη από Code Segment ζε άλλο με ηο ίδιο privilege level (ζηο παπάδειγμα και ηα δύο μηδέν). 2. Μεηάβαζη από Code Segment ζε άλλο με ςτηλόηεπο privilege level (ζηο παπάδειγμα από μηδέν ζε ηπία). 3. Μεηάβαζη από Code Segment ζε άλλο με σαμηλόηεπο privilege level (ζηο παπάδειγμα από ηπία ζε μηδέν). 4. Μεηαθοπά Data Segment ζε Code Segment. 5. Μεηαθοπά Code Segment ζε Data Segment. 6. Μεηαθοπά ζε ζημείο πος ςπεπβαίνει ηο limit ενόρ Code Segment. 7. Μεηαθοπά ζε ζημείο πος ςπεπβαίνει ηο limit ενόρ Data Segment. 8. Μεηάβαζη μέζυ Call Gate ζε σαμηλόηεπο privilege level. 9. Έλεγσορ δςναηόηηηαρ εκηέλεζηρ πποζηαηεςμένυν ενηολών από privilege level 3.
  • 3. Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ 3 Χπηζιμοποιούμενα Επγαλεία  DOSBOX  Notepad ++  Intel Manual 386 1. Μεηάβαζη από Code Segment ζε άλλο με ηο ίδιο privilege level (ζηο παπάδειγμα και ηα δύο μηδέν). Δεκηνπξγήζακε έλα Code Selector Test (CODE_SEL_TEST) θαη ηνλ αληίζηνηρν Descriptor νη νπνίνη είλαη θιώλνη ηνπ CODE_SEL θαη ηνπ code_sel_descr έηζη ώζηε λα κεηαβνύκε από privilege level 0 ηνπ CODE_SEL ζην νπνίν είκαζηε ζην privilege level 0 ηνπ CODE_SEL_TEST. Γηα λα εθηειέζνπκε απηό ην εξώηεκα βάιακε ηελ εληνιή: call CODE_SEL_TEST:task2 Σύκθωλα κε ην 6.3.3 ηνπ manual ε κεηαθνξά ειέγρνπ κεηαμύ 2 code segment κε ίδην privilege level είλαη επηηξεπηή θαη ην πξόγξακκα έηξεμε θαλνληθά όπωο αλακελόηαλ. Τα CODE_SEL_TEST θαη code_descr_test νξίδνληαη ζην αξρείν gdt.asm ωο εμήο: CODE_SEL_TEST equ $-gdt_start code_descr_test: istruc seg_descriptor at limit0_15, dw 0xFFFF ; limit 0:15 at base0_15, dw 0 ; base 0:15 at base16_23, db 0 ; base 16:23 at type_dpl, db 0x9B ; 1 00 1 001 1 = present + DPL=0 + code_segment_descr + C=0 + Read + not_active at limit16_19,db 0xCF ; 1 1 00 1111 = Granularity + 32bit code + limit 16:19 at base24_31, db 0 ; base 24:31 ; base = 0x0, limit = 0xFFFFFFFF iend
  • 4. Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ 4 Φηηάρλνπκε ην base address ζην αξρείν stdlib.asm ωο εμήο: ; Update Code Descriptor base address field push eax push word code_descr_test call initialize_descriptor_base add sp, 6 2. Μεηάβαζη από Code Segment ζε άλλο με ςτηλόηεπο privilege level (ζηο παπάδειγμα από μηδέν ζε ηπία). Δεκηνπξγήζακε έλα CODE_SEL_TS1 θαη ηνλ αληίζηνηρν Descriptor νη νπνίνη είλαη θιώλνη ηνπ CODE_SEL θαη ηνπ code_sel_descr κε privilege level 3 έηζη ώζηε λα κεηαβνύκε από privilege level 0 ηνπ CODE_SEL ζην νπνίν είκαζηε ζην privilege level 3 ηνπ CODE_SEL_TS1. Γηα λα εθηειέζνπκε απηό ην εξώηεκα βάιακε ηελ εληνιή: call CODE_SEL_TS1:task2 Σύκθωλα κε ην θεθάιαην 6.3.3 γηα Conforming Bit 0, επεηδή ην DPL (3) δελ είλαη ίζν κε ην CPL (0), θαλνληθά έπξεπε ην πξόγξακκα λα κελ ηξέμεη. Ωζηόζν ην DOSBOX πξνθαλώο δελ θάλεη Privilege Level Checking νπόηε ην πξόγξακκα έηξεμε. Σύκθωλα κε ην θεθάιαην 6.3.3 γηα Conforming Bit 1, επεηδή ην DPL (3) δελ είλαη κηθξόηεξν ή ίζν ηνπ CPL (0), θαλνληθά έπξεπε ην πξόγξακκα λα κελ ηξέμεη. Ωζηόζν ην DOSBOX πξνθαλώο δελ θάλεη Privilege Level Checking νπόηε ην πξόγξακκα έηξεμε. Τα CODE_SEL_T1 θαη code_descr_TS1 νξίδνληαη ζην αξρείν gdt.asm ωο εμήο: ; The code selector and code descriptor of the task1 with privilege level 3 CODE_SEL_TS1 equ $-gdt_start code_descr_TS1: istruc seg_descriptor at limit0_15, dw 0xFFFF ; limit 0:15 at base0_15, dw 0 ; base 0:15 at base16_23, db 0 ; base 16:23 at type_dpl, db 0xFB ; 1 11 1 101 1 = present + DPL=3 + code_segment_descr + C=0 + Read + not_active at limit16_19,db 0xCF ; 1 1 00 1111 = Granularity + 32bit code + limit 16:19 at base24_31, db 0 ; base 24:31 ; base = 0x0, limit = 0xFFFFFFFF iend ; Update Code Descriptor base address field ; Update Code Descriptor TS1 base address field push eax
  • 5. Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ 5 push word code_descr_TS1 call initialize_descriptor_base add sp, 6 3. Μεηάβαζη από Code Segment ζε άλλο με σαμηλόηεπο privilege level (ζηο παπάδειγμα από ηπία ζε μηδέν). Αξρηθά, πεγαίλνπκε κέζω iret ζην task1, ην νπνίν εθηειεί ην CODE_SEL_TS1 ην νπνίν έρεη Privilege Level 3. Από εθεί ζέινπκε λα πάκε ζην CODE_SEL κε Privilege Level 0 κέζω ηεο εληνιήο: call CODE_SEL:task2 Σύκθωλα κε ην θεθάιαην 6.3.3 ηνπ manual γηα Conforming Bit 0, επεηδή ην DPL (0) δελ είλαη ίζν κε ην CPL (3), θαλνληθά έπξεπε ην πξόγξακκα λα κελ ηξέμεη. Ωζηόζν ην DOSBOX πξνθαλώο δελ θάλεη Privilege Level Checking νπόηε ην πξόγξακκα έηξεμε. Σύκθωλα κε ην θεθάιαην 6.3.3 ηνπ manual γηα Conforming Bit 1, επεηδή ην DPL (0) είλαη κηθξόηεξν ή ίζν ηνπ CPL (3), θαλνληθά έπξεπε ην πξόγξακκα λα ηξέμεη, όπωο θαη έγηλε. 4. Μεηαθοπά Data Segment ζε Code Segment. Πξνζπαζνύκε λα κεηαθηλήζνπκε ην DATA_SEL ζηνλ CS ηνπ πξνγξάκκαηνο κέζω ηωλ εληνιώλ: call DATA_SEL:0 Σύκθωλα κε ην θεθάιαην 6.3.1.1 ηνπ manual ε κεηαθίλεζε απηή είλαη κε επηηξεπηή δηόηη δελ κπνξνύκε λα βάινπκε Data Selector ζην CS. Τν DOSBOX βγάδεη κήλπκα: CALL:Descriptor type b unsupported.
  • 6. Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ 6 5. Μεηαθοπά Code Segment ζε Data Segment. Πξνζπαζνύκε λα κεηαθηλήζνπκε ην CODE_SEL ζηνλ DS ηνπ πξνγξάκκαηνο κέζω ηωλ εληνιώλ: mov ax, CODE_SEL mov ds, ax Σύκθωλα κε ην θεθάιαην 6.3.1.1 ηνπ manual κηα ηέηνηα κεηαθίλεζε δελ απαγνξεύεηαη γη’ απηό θαη ην DOSBOX δελ καο έβγαιε ηέηνην πξόβιεκα. 6. Μεηαθοπά ζε ζημείο πος ςπεπβαίνει ηο limit ενόρ Code Segment. Φηηάμακε ην CODE_SEL_LIMIT ωο θιόλν ηνπ CODE_SEL θαη ην call_descr_limit ωο θιόλν ηνπ call_descr κε κόλε δηαθνξά όηη ην call_descr_limit έρεη limit 0 γηα λα δνθηκάζνπκε ην Limit Checking κέζω ηωλ εληνιώλ: call CODE_SEL_LIMIT:0xffff Σύκθωλα κε ην θεθάιαην 6.3.1.2 ηνπ manual κηα ηέηνηα κεηαθνξά ειέγρνπ δελ είλαη επηηξεπηή δηόηη ην limit καο είλαη κεδέλ θαη ην offset δηάθνξν ηνπ κεδελόο. Ωζηόζν ην DOSBOX δε δέρζεθε θαλ ηε κεηαθίλεζε βγάδνληαο ην κήλπκα: CALL:Descriptor type b unsupported. Τα CODE_SEL_LIMIT θαη code_descr_limit νξίδνληαη ζην αξρείν gdt.asm ωο εμήο: CODE_SEL_LIMIT equ $-gdt_start
  • 7. Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ 7 code_descr_limit: istruc seg_descriptor at limit0_15, dw 0x0 ; limit 0:15 at base0_15, dw 0 ; base 0:15 at base16_23, db 0 ; base 16:23 at type_dpl, db 0x9B ; 1 00 1 001 1 = present + DPL=0 + code_segment_descr + C=0 + Read + not_active at limit16_19,db 0x0 ; 1 1 00 1111 = Granularity + 32bit code + limit 16:19 at base24_31, db 0 ; base 24:31 ; base = 0x0, limit = 0x0 iend 7. Μεηαθοπά ζε ζημείο πος ςπεπβαίνει ηο limit ενόρ Data Segment. Φηηάμακε ην DATA_SEL_LIMIT ωο θιόλν ηνπ DATA_SEL θαη ην data_descr_limit ωο θιόλν ηνπ data_descr κε κόλε δηαθνξά όηη ην data_descr_limit έρεη limit 0, έηζη ώζηε λα δνθηκάζνπκε ην Limit Checking κέζω ηωλ εληνιώλ: mov word ax, DATA_SEL_LIMIT mov ds, ax mov ax, vidmem_start Σύκθωλα κε ην θεθάιαην 6.3.1.2 ηνπ manual κηα ηέηνηα κεηαθνξά ειέγρνπ δελ είλαη επηηξεπηή δηόηη ην limit καο είλαη κεδέλ θαη ην offset δηάθνξν ηνπ κεδελόο. Ωζηόζν ην πξόγξακκα έηξεμε θαλνληθά άξα πξνθαλώο ην DOSBOX δελ θάλεη Limit Checking. Τα CODE_SEL_LIMIT θαη code_descr_limit νξίδνληαη ζην αξρείν gdt.asm ωο εμήο:
  • 8. Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ 8 DATA_SEL_LIMIT equ $-gdt_start data_descr_limit: istruc seg_descriptor at limit0_15, dw 0x0 ; limit 0:15 at base0_15, dw 0 ; base 0:15 at base16_23, db 0 ; base 16:23 at type_dpl, db 0x92 ; 1 00 1 101 0 = present + DPL=0 + data_segment_descr + E=0 + RW + not_active at limit16_19,db 0x0 ; 1 1 00 1111 = Granularity + Big + limit 16:19 at base24_31, db 0 ; base 24:31 ; base = 0x0, limit = 0xFFFFFFFF iend 8. Μεηάβαζη μέζυ Call Gate ζε σαμηλόηεπο privilege level. Φηηάμακε έλα Call gate κε DPL 3 ώζηε λα κεηαβνύκε από Privilege Level 3 ζε Privilege Level 0. Μεηαβήθακε ζην task1 κέζω iret θαη κεηά ζέιακε λα θάλνπκε ηε κεηαθνξά κέζω ηεο εληνιήο: call CALL_GATE_SEL:0 Σύκθωλα κε ην 6.3.4 ηθαλνπνηνύληαη νη πξνϋπνζέζεηο, ωζηόζν ην πξόγξακκα δελ έηξεμε ζην DOSBOX θαη έβγαιε κήλπκα: CALL:GATE:SS: no writable data segment. To Call Gate ην νξίδνπκε ζην αξρείν gdt.asm ωο εμήο: ; The call gate selector and descriptor CALL_GATE_SEL equ $-gdt_start call_gate_descr: istruc call_gate_descriptor at offset0_15, dw 0 at selector, dw 0 at dword_count, db 0 at p_type_dpl, db 0xEC ; Εδώ νξίζακε DPL=3 at offset16_31, dw 0 iend Τν selector θαη ην offset ηνπ call gate descriptor ηα θηηάρλνπκε ζην αξρείν stdlib.asm ωο εμήο: ; Update the selector of the call gate with the CODE_SEL mov word [call_gate_descr+2], CODE_SEL;
  • 9. Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ 9 ; Update the offsets of the call gate with the address of task2 push eax mov eax, task1 mov word [call_gate_descr], ax; shr eax, 16 mov word [call_gate_descr+6], ax; 9. Έλεγσορ δςναηόηηηαρ εκηέλεζηρ πποζηαηεςμένυν ενηολών από privilege level 3. Μεηαβαίλνπκε κε iret ζην task1 θαη από εθεί (ελώ είκαζηε ζε CPL 3) πξνζπαζνύκε λα εθηειέζνπκε ηελ πξνζηαηεπκέλε εληνιή: hlt Σύκθωλα κε ην θεθάιαην 6.3.5.1 ε εληνιή απηή δελ κπνξεί λα εθηειεζηεί δηόηη απαηηεί ην CPL λα είλαη κεδέλ. Τν DOSBOX θξαζάξεη αθνύ βγάιεη ην κήλπκα Exit to error: INT: Inner level: Stack segment not writable.
  • 10. Πανεπιςτήμιο Πατρών Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίασ Υπολογιςτών Τομέασ Ηλεκτρονικήσ και Υπολογιςτών Προηγμένοι Μικροεπεξεργαςτέσ 10