Page Directory Template für den 010 Editor
Die Umrechnung von virtuellen in physische Adressen ist eine ausgesprochen langweilige und dabei auch noch fehleranfällige Angelegenheit. Um das Leben etwas einfacher zu machen, habe ich ein Template für Sweetscapes 010 Editor geschrieben.
Die Anwendung des Templates ist ausgesprochen einfach. Laden Sie zunächst das Speicherabbild in den 010 Editor, setzen Sie den Cursor auf den Anfang des Page Directories, laden und starten Sie schließlich das Template. Der Editor ist nun eine Weile damit beschäftigt, die umfangreichen Arrays zu berechnen. Während dessen können Sie bereits den Page Directory Index aus der virtuellen Adressen berechnen, wie ich das in meinem vorherigen Beitrag beschrieben habe.
Ich greife noch mal auf das Beispiel aus dem letzten Artikel zurück. Die 10 höherwertigsten Bits der virtuellen Adresse 0x7ffdf000 zeigen auf dem Page Directory Entry Nr. 511. Also scrollen Sie bitte in der Template-Ansicht des "Inspectors" bis zum PDE[511] und expandieren Sie den Eintrag. Der 010 Editor zeigt die einzelnen Flags.

Als erstes überprüfen Sie bitte das PageSize Flag. Ist es zurückgesetzt, so bezeichnet es eine 4 kB große Speicherseite. In diesem Fall müssen Sie aus den nächsten 10 Bit der virtuellen Adresse dem Page Table Index (hier 991) berechnen.
Der 010 Editor hat für Sie bereits die Page Table berechnet. Sie brauchen also nur noch bis zum Eintrag PTE[991]:

Hier überprüfen Sie zunächst das Flag Present. Das gesetzte Flag zeigt an, dass die gewünschte Speicherseite aktuell im physischen Speicher (und damit in dem untersuchten Speicherabbild) vorhanden ist. Sie können deshalb jetzt die endgültige (physische) Adresse berechnen. Verwenden Sie hierzu die durch das Template angezeigte PageBaseAddress und die letzten 12 Bit der virtuellen Adresse.
Das Ergebnis ist natürlich wieder 0x532f * 0x1000 + 0 = 0x532f000. Mit dem Template erfolgt die Umrechnung jedoch viel schneller (und zuverlässiger) als von Hand.
Bitte beachten Sie jedoch, dass ich dieses Template nur für einfache Speicherabbilder (wie sie dd erzeugt) geschrieben habe. Ich denke nicht, dass es mit strukturierten Formaten wie einer VMware VMSS Datei oder dem von einem Debugger erzeugten Dump funktionieren wird.