Ich habe hier im Blog bereits die Definitionen der Struktur _EPROCESS für einige Kernel-Versionen veröffentlicht. Die Informationen lassen sich, wie beschrieben, mit dem Kernel-Debugger WinDbg aus einem Speicherabbild gewinnen. Aber zuvor muss natürlich erst einmal die gewünschte Windows-Version installiert werden. Wie es erheblich einfacher und schneller geht, erklärt dieser Artikel.
Der Debugger erstellt aus dem Speicherabbild eine Liste aller geladenen Module. Für jedes Modul, was letztlich nichts anderes als eine Programmdatei oder DLL ist, bildet er eine Signatur aus einem Zeitstempel und der Dateigröße. Mit diesen Informationen fordert er von einem Symbol Server eine passende Program Database (PDB) an. Und die enthält letztlich die gewünschten Informationen.
Genauer gesagt: sie kann die gewünschten Informationen enthalten. Wer Anwendungsprogramme untersucht, muss dazu nicht gerade jede Datenstruktur des Kernels im Detail kennen. Die meisten der von Microsofts Symbol Server bezogenen PDBs für die Kernel (je nach System ntoskrnl.pdb, ntkrnlmp.pdb oder ntkrnlpa.pdb) enthalten deshalb kaum mehr als die exportierten Funktionen. Auf den ersten Blick zu erkennen sind diese abgespeckten Dateien an einer Größe von unter 1 MB.
Ergiebiger sind da die PDBs, die mit dem Driver Development Kit (DDK) geliefert werden. Die Dateigröße liegt hier bei über 5 MB, bei der Oktober CTP für Vista sogar bei 15 MB. Ein rascher Blick mit dem Hex-Editor zeigt immerhin, dass die Zeichenfolge "_EPROCESS" zwischen allerlei Binärdaten enthalten ist. Aber wie liest man die aus?
Als ausgesprochen hilfreich erweist sich hier die Website DebugInfo.com von Oleg Starodumov. Neben vielen anderen Tipps beschreibt er, wie man mit Hilfe der Bibliothek debughlp.dll Typinformationen aus PDBs auslesen kann. Freundlicherweise veröffentlicht er auch gleich eine Implementierung in der Gestalt des Programms TypeInfoDump. Wer nicht bereits die Debug-Tools von Microsoft installiert hat, sollte sich das größere der angebotenen Pakete mit allen benötigten DLLs besorgen.
Informationen über Datenstrukturen lassen sich jetzt bequem allein aus der PDB auslesen; ein komplettes Betriebssystem muss man jetzt zumindest dafür nicht mehr installieren.
