Autor Thema: Paging  (Gelesen 4817 mal)

nico

  • Beiträge: 16
    • Profil anzeigen
Gespeichert
« 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?
« Letzte Änderung: 07. June 2008, 22:09 von nico »

Korona

  • Beiträge: 94
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 08. June 2008, 00:03 »
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.
« Letzte Änderung: 08. June 2008, 00:07 von Korona »

nico

  • Beiträge: 16
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 08. June 2008, 10:04 »
guter hinweis. ich habe den fehlercode vom int 14 nicht vom stack genommen; jetzt funktioniert es ;-)

bg nico

 

Einloggen