Windows intern - Aufbau der Speicherstruktur eines Prozesses...

Von: , 21.08.2009 21:24 Uhr

Liebe/-r Experte/-in,

aktuell versuche ich herauszufinden, wie Windows(>=XP) intern die Speicherverwaltung für einzelne Prozesse regelt:

Was ich bereits weiss ist dass Windows jedem Prozess einen "freien" Speicher von 4 Gigabyte zur Verfügung stellt, wobei dieser in Pages unterteilt ist welche dann jede für sich unter anderem einen unterschiedlichen Status, Schutz und Typ haben können.

Was ich (soweit ich das richtig verstanden habe) auch weiss ist, dass Windows beim Erstellen eines Prozesses nicht nur Automatisch den entsprechenden Code in den Speicher läd sondern auch (unter anderem) eine Inline Address Table (IAT) für API-Calls bereitstellt.

Nun meine Frage:
Wie kann ich nun - lediglich mit Hilfe des Speichers des jeweiligen Prozesses sowohl den EntryPoint des Prozesses und die IAT ermitteln als auch bei den einzelnen Memory-Pages zwischen Code und Datensegment unterscheiden.

Effektiv bin ich hier für jeden Hinweis dankbar, sowohl für Konkrete Antworten bzw. Hinweise auf Webseiten Informationen zu dem von mir genannten Thema als auch für Tips für Suchbegriffe mit denen ich die gewünschten Informationen finden kann. (Bisher habe ich zwar 'gegoogel' - scheinbar aber bisher ohne die richtigen Stichwörter)

danke schon mal

Daniel Heinrich

6 Antworten zu dieser Frage

  1. Antwort von nach 51 Minuten 0 hilfreich
    Re: Windows intern - Aufbau der Speicherstruktur eines Prozesses...

    Windows verwendet seit WinNT 3.1 das FLAT Speichermodell, dies ist eine deutliche Vereinfachung dessen, was die Hardware bereits seit i386 unterstützt

    4 GB phys. Speicher; eine globale und eine lokale Deskriptortabelle mit je 2047 Einträgen für virt. Speicher-Segmente mit einer max. Größe von 4 GB;
    macht daher:
    2 * 2047 * 4 GB, und das sind knapp 16 TB gesamter virtueller Speicher;

    im 16-bit Protected-mode des i286 waren es: 16 MB phys. Speicher; eine globale und eine lokale Deskriptortabelle mit je 2047 Einträgen für virt. Segmente-Segmente mit einer max. Größe von 64 kByte; macht daher:
    2 * 2047 * 64 kByte, und das sind knapp 1 GB gesamter virtueller Speicher;

    WinNT FLAT: ein Prozess bekommt 4 GB Adressraum zur Verfügung, wobei sich das Betriebssystem selbst 2 GB reserviert; der Rest wird über die Selektoren
    CS, DS und SS dem Prozess zur Verfügung gestellt;
    CS - Codesegemt-Selektor
    DS - Datensegment-Selektor
    SS - Stacksegment-Selektor

  2. Antwort von nach 11 Stunden 0 hilfreich
    Re: Windows intern - Aufbau der Speicherstruktur eines Prozesses...

    Hallo Daniel,

    so exakt kenne ich mich hier bei der Bereitstellung von Speichern auf den Windows-Systemen nicht aus.

    Hier wäre mit Sicherheit eine Referenzquelle die Technical Reference zum dem jeweiligen BS von MS oder halt einen Blick ins Technet. (evtl. gibts hier ja White Papers).

    Zumindest für WindowsXP passt bei 32 bit die Aussage mit den 4GB pro Prozess nicht. Hier ist normalerweise eine 2 GB Grenze eingestellt.

    Was Du hier prüfen könntest wäre die Informationen die du über WMI zu Processes bekommen kannst.

    Sorry das ich dir hier nicht wirklich weiterhelfen kann, aber Speicher ist eben vom BS als Gott gegeben angesehen. ;)

    Gruss
    Daniel

    • Antwort von nach 4 Tagen 0 hilfreich
      Re^2: Windows intern - Aufbau der Speicherstruktur eines Prozesses...

      Hi!

      Danke für deine Antwort :-) Zumindest für WindowsXP passt bei 32 bit die Aussage mit den
      4GB pro Prozess nicht. Hier ist normalerweise eine 2 GB Grenze
      eingestellt.
      Stimmt so nicht ganz - es sind schon (fast) 4 GB - es sind lediglich 2 davon für das Betriebssystem selber reserviert, dennoch sind es (fast) 4 GB (sonst würde es auch irgendwie keinen Sinn machen ein 32-Bit-System zu verwenden ^^ Was Du hier prüfen könntest wäre die Informationen die du über
      WMI zu Processes bekommen kannst.
      Ok - da muss ich mal guggen :-)

      wie gesagt - danke für deine Antwort und bis denn denn

      Daniel

    • Antwort von nach 3 Tagen 0 hilfreich
      Re: Windows intern - Aufbau der Speicherstruktur eines Prozesses...

      Hallo Daniel,
      leider kann ich dir darauf nicht direkt eine Antwort geben. Hast Du msdn zugriff? Hier sind ein paar Artikel zum Thema Speicherverwaltung in Windows, vieleicht bringt dich das weiter:
      http://blogs.msdn.com/ericlippert/archive/2009/06/08...
      http://msdn.microsoft.com/en-us/library/ms810616.aspx
      Ansonsten glaube ich ehre das das mit dem Speicher nicht (mehr) so gut funktioniert, da es ja nur noch ein virtueller Speicher ist. Könntest Du nicht auch mit Process ID arbeiten?
      Grüße

      Thomas

  3. Antwort von nach 4 Tagen 0 hilfreich
    Re^2: Windows intern - Aufbau der Speicherstruktur eines Prozesses...

    Hi Thomas,

    Erstmal Danke für deine beiden Links.

    Wegen der Process-ID: Ich arbeite ja schon mit ihr, schließlich will ich ja nur jeweils den "virtuellen" Speicher EINES Prozesses im laufenden Betrieb analysieren. (Wollte ich den "echten" Arbeitsspeicher roh auslesen müsste ich mich in Ring 0 bewegen oder das ganze in einer Virtuellen Umgebung machen was meiner Meinung nach einen zu großen Overhead darstellt.) Hast Du msdn zugriff? Hier sind ein paar Artikel zum Thema
    Speicherverwaltung in Windows, vieleicht bringt dich das
    weiter:
    Ja ich habe einen MSDN-Account :-)

    bis bald und danke nochmal

    Daniel

  4. Antwort von nach 222 Tagen 0 hilfreich
    Re: Windows intern - Aufbau der Speicherstruktur eines Prozesses...

    Hi,

    Ich habe das zwar noch nicht selber gemacht, allerdings geht das meines Wissens nur, wenn der Prozessor sich im höchsten Zugriffsstatus befindet und durch die Systemlisten arbeitest (Process-Entries). Allerdings bezweifle ich, daß die Speicherblöcke selbst irgendeine Kennung haben, die eindeutig ist.

    Gruß

    Crush

    Keine passende Antwort gefunden? Jetzt eigene Frage stellen!