In einem Beitrag in seinem Blog beschreibt Jacky Wu, wie sich Page Directories in einem Speicherabbild von Microsoft Windows XP SP2 im PAE-Modus finden lassen.
Im x86-Modus lassen sich Speicherseiten durch die Überprüfung eines einzelnen DWORD als Page Directory (PD) identifizieren. Möglich ist dies, weil PDs selbstbezüglich sind.
Im PAE-Modus besteht das PD aus vier Speicherseiten (zu je 4 kiB) anstatt einer einzelnen Seite, wie im x86-Modus. Deshalb wird es etwas schwieriger, mittels des selben einfachen Kriteriums diese Seiten zu finden. Jacky Wu hat jetzt herausgefunden, dass im PAE-Modus das vierte PD selbstbezüglich ist, wenngleich an einem anderen als dem aus dem x86-Modus bekannten Offset.
In Ergänzung des von Jacky Wu angeführten Beispiels zeige ich nachfolgend die Ansicht eines PD im 010 Editor und einem entsprechenden Template.
Im oberen Bereich des Bildes ist die Page Directory Pointer Table (PDPT) sichtbar. Ihre vier Einträge verweisen auf die vier PDs. In diesem Beispiel sind die PDs in den Speicherseiten Nr. 0x311 bis 0x314 zu finden. Bitte beachten Sie, dass das vierte PD in der Seite Nr. 0x314 liegt.
Im unteren Teil des Bildes ist dieses PD und die ersten seiner Page Directory Entries (PDE) genauer dargestellt. Wie man deutlich erkennen kann, verweist der vierte PDE (PDE[3]) auf die Basisadresse des vierten PD. Also ist das PD auch im PAE-Modus selbstbezüglich. Beachten Sie bitte auch, dass die ersten drei PDEs auf die Speicherseiten der anderen drei PDs verweisen.
Die ersten vier PDEs des vierten PD könnten also auch als Page Directory Pointer Table dienen. Dies ist in einer von Wu's Grafiken auch so dargestellt.
Allerdings konnte ich unter Microsoft Windows XP SP2, build 5.1.2600.2622 dieses Verhalten nicht beobachten. Die folgende Auflistung zeigt einen Auszug aus dem Ergebnis von PTFinder. Dargestellt sind die Prozesse und der jeweilige Inhalt des CR3-Registers, das ja auf die PDPT verweist. Offensichtlich zeigt CR3 nicht auf den Beginn der vierten PDs eines Prozesses, sondern in eine von zwei Speicherseiten. Die Seite Nr. 0x310 enthält dabei die PDPT für den System/Idle-Prozess, während die PDPTs aller anderen Prozesse in Seite Nr. 0x5280 abgelegt sind.
No. Type PID CR3 Remarks ---- ---- ------ ---------- ---------------- 1 Proc 0 0x00310000 Idle 2 Proc 184 0x05280240 explorer.exe 3 Proc 796 0x052800e0 svchost.exe 4 Proc 476 0x05280040 csrss.exe 5 Proc 544 0x05280080 services.exe 6 Proc 1064 0x05280160 svchost.exe 7 Proc 1504 0x052801e0 alg.exe 8 Proc 412 0x05280020 smss.exe 9 Proc 720 0x052800c0 svchost.exe 10 Proc 236 0x05280100 VMwareTray.exe 11 Proc 4 0x00310000 System 12 Proc 452 0x052802a0 notepad.exe 13 Proc 556 0x052800a0 lsass.exe 14 Proc 1096 0x05280180 spoolsv.exe 15 Proc 1304 0x052801c0 VMwareService.e 16 Proc 2044 0x05280220 userinit.exe 17 Proc 500 0x05280060 winlogon.exe 18 Proc 1852 0x05280200 wuauclt.exe 19 Proc 1216 0x052801a0 netdde.exe 20 Proc 872 0x05280120 svchost.exe 21 Proc 244 0x05280260 VMwareUser.exe 22 Proc 944 0x05280140 svchost.exe 23 Proc 260 0x05280280 rundll32.exe
