Autor Thema: Problem mit Paging  (Gelesen 7671 mal)

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« am: 19. October 2006, 11:06 »
Hmm...ja ich hab da so eine Page gemappt (physikalisch: 0x22000; logisch: 0x10000)
Wenn ich jetzt etwas an 0x10000 schreibe, erscheint es zwar dort, aber nicht per phyikalischem SpeicherDump auch an 0x22000.

Könnte das was mit Caching zu tun haben....Wie lös ich das Problem???


Thx, Noooooooooooooos

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 19. October 2006, 12:13 »
Hmmm...das ändert auch nix. Bei Invlpg wird einfach ein PageFault erzeugt; muss man denn da die logische oder physikalische Adresse übergeben???
Auch das CR3 neu beschreiben bringt nix.

Naja....ich zeige hier mal ein Ausschnitt aus dem Bochsdebugger, wenns doch kein Cache-Fehler sein sollte:
  • Zuerst mal, schaue ich nach einem DW in der fehlerhaften Page(logisch: 0x10000, physikalisch: 0x22000):
    <bochs:10> x /d 0x1000c
    0x0001000c <bogus+       0>:    131079
  • Dann schau ich die Register an:
    <bochs:11> dump_cpu
    eax:0x00000000, ebx:0x00000001, ecx:0x00000000, edx:0x0000a339
    ebp:0x00000000, esp:0x0000e700, esi:0x00022007, edi:0x00011000
    eip:0x0000a268, eflags:0x00000202, inhibit_mask:0
    cs:s=0x0008, dl=0x0000ffff, dh=0x00cf9a00, valid=1
    ss:s=0x0010, dl=0x0000ffff, dh=0x00cf9300, valid=7
    ds:s=0x0010, dl=0x0000ffff, dh=0x00cf9300, valid=7
    es:s=0x0010, dl=0x0000ffff, dh=0x00cf9300, valid=5
    fs:s=0x0000, dl=0x00000000, dh=0x00000000, valid=0
    gs:s=0x0000, dl=0x00000000, dh=0x00000000, valid=0
    ldtr:s=0x0000, dl=0x00000000, dh=0x00000000, valid=0
    tr:s=0x0018, dl=0x9e130068, dh=0x00008900, valid=1
    gdtr:base=0x00009c33, limit=0x2f
    idtr:base=0x00009c63, limit=0x1af
    dr0:0x00000000, dr1:0x00000000, dr2:0x00000000
    dr3:0x00000000, dr6:0xffff0ff0, dr7:0x00000400
    cr0:0x80000011, cr1:0x00000000, cr2:0x00000000
    cr3:0x00007000, cr4:0x00000010

    CR3=0x7000
  • Dann schau ich mir dieses an:
    <bochs:12> xp /d 0x7000
    0x00007000 <bogus+       0>:    24615

    Wobei 24615 (Die PageTable) hexadezimal 0x6027 heisst.
  • Dann schauen wir in der PageTable an der Stelle für 0x10000 (Offset=0x40)den Eintrag an:
    <bochs:13> xp /d 0x6040
    0x00006040 <bogus+       0>:    139271

    139271=0x22007
  • Und wenn wir jetzt in der physischen Page wieder das selbe DW wie am Anfang auslesen wollen, ist dieses Null:
    <bochs:14>xp /d 0x2200c
    0x0002200c <bogus+       0>:    0


Thx Nooooooooooos

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 19. October 2006, 17:18 »
Hää?? Ich blick da nich ganz durch....Das sind doch die normalen Bits, U/S, Present usw.????

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 19. October 2006, 17:33 »
Ja eben 0x6000 ist die Ady, dann kommen noch alle Bits macht dann aben 0x6027^^

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 19. October 2006, 17:43 »
Ja...das sind doch zwei mögliche Wege um zur Ady zu kommen, dann noch Plus die ganzen Bits...blabla, dann komme ich auf 0x6027.

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 19. October 2006, 18:05 »
JA!!

Aber ich muss das U/S-Bit setzen, sonst läuft da nix im Ring3...Und auch die andern...

EDIT:
Das ly würd ich wegeditieren^^

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #6 am: 19. October 2006, 18:11 »
Dann zeig uns Unwissenden doch mal wo genau er das macht :wink: Ich seh das nämlich nicht.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 19. October 2006, 18:16 »
Mann....!!!
Im Debugger geb ich dann die Adresse schon ohne Bits ein...

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #8 am: 19. October 2006, 18:16 »
genau das mein ich, nooooooooos macht da eben keinen murks mit den bits.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 19. October 2006, 18:20 »
Also...ich blick bei eurer Diskussion nich mehr durch.
Muss ich jetzt was ändern???

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #10 am: 19. October 2006, 18:23 »
Welche bochs version verwendest du denn und hast du es mit einem anderen Emulator auch probiert oder paging wieder ausschalten und dann auslesen? Ich frag nur weil mir in den CHANGES des neuesten bochs release (2.3) folgendes ins Auge sticht:
Zitat
* lots of cpu and internal debugger fixes (link)
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 19. October 2006, 18:25 »
Hmm...ja ich hab noch 2.2....dann hol ich mir mal den neuen. thx

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 19. October 2006, 18:50 »
Hmmm...ja, an Bochs liegts nich. Das Problem besteht weiter unvermindert.

Wenn ich invlpg zusammen mit wbinvd benutz, welcher soll ich dann zuerst dran nehmen??

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 19. October 2006, 19:53 »
Schon gut...Dank an alle
Es lag trotzdem am Cache(auch Bochs hat einen) und nachdem ich invplg an der richtigen Stelle eingesetzt hab, ists gegangen.

Nooooooooooos

 

Einloggen