Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: nico am 07. June 2008, 22:01
-
hi,
ich habe (glaube ich) eine kleines problem beim paging. ich habe folgenden code:
%define PAGE_SIZE 4096
%define PAGE_DIR_ENTRIES 1024
%define PAGE_TABLE_ENTRIES 1024
[section .text]
setup_paging:
pusha
; setup page table
mov eax,0x03; address
xor ecx,ecx ; count
.loop1:
mov [page_table+4*ecx],eax
add eax,PAGE_SIZE
inc ecx
cmp ecx,PAGE_TABLE_ENTRIES
jl .loop1
; setup page dir
mov eax,page_table
or eax,0x02
xor ecx,ecx
.loop2
mov [page_dir+4*ecx],eax
inc ecx
cmp ecx,PAGE_DIR_ENTRIES
jl .loop2
or eax,0x03
mov [page_dir],eax
mov [page_dir+4],eax
mov [page_dir+8],eax
mov [page_dir+12],eax
; enable pageing
mov eax,page_dir
mov cr3,eax
mov eax,cr0
or eax,0x80000000
mov cr0,eax
popa
ret
[section .bss]
align 4096
page_dir: resd 1024
align 4096
page_table: resd 1024
wenn ich jetzt auf den auf die 4 page_dir eintraege zugreife, funktioniert das. aber beim 5. eintrag (present=0) bekomme wie erwartet eine page fault exception und danach gleich eine gerneral protection exception (die ich mir nicht wirklich erklären kann). hat jemand eine idee woran das liegen kann?
-
Hast du einen vernünftigen Stack? Eine GPF kann nur auftreten wenn dein Stacksegment oder der IDT Eintrag nicht present sind.
Poste mal deinen ISR Code, am Paging Code kann man nicht sehen, warum die GPF auftritt.
-
guter hinweis. ich habe den fehlercode vom int 14 nicht vom stack genommen; jetzt funktioniert es ;-)
bg nico