Wie lautet die Adresse im Prozessmonitor

355
FunctionBlock

Wenn wir unter Prozessmonitor einen bestimmten Prozess aufnehmen, dann seine Eigenschaft auswählen, unter Ereigniseigenschaften die Prozessregisterkarte die Adresse für jede einzelne Bibliotheksdatei anzeigen und worauf beziehen sich diese Adressen? Verweisen auch die Adressen unter Stack auf den virtuellen oder physischen Speicherort?

0

1 Antwort auf die Frage

1
Jamie Hanrahan

Alle angezeigten Adressen sind virtuell. Sie sind die Startadressen der DLLs oder anderer zugeordneter Dateien im virtuellen Adressraum des Prozesses. Die auf der Registerkarte "Stapel" angezeigten Adressen sind auch virtuell.

Sie sehen eine ähnliche Aufteilung in Process Explorer - aktivieren Sie die "DLLs-Ansicht" im unteren Bereich. Und auch in VMmap, aber mit mehr Details. VMmap enthält die Adressen von "Abschnitten" in jeder ausführbaren Datei. Es gibt einen Abschnitt für den Code, einen für schreibgeschützte Daten, einen für "Ressourcen" usw. sowie einige Steuerinformationen.

Es ist tatsächlich extrem schwierig für ein virtuelles Speicher-Betriebssystem auf x86 / x64, eine physische Adresse direkt zu verwenden, dh auf sie zu verweisen. Sobald das System "virtuell" wird, dh das Bit "Paging aktivieren" in CR0 setzt (was sehr früh beim Booten auftritt), werden alle Adressen, die vom laufenden Code (ob Kernel oder Benutzermodus) aktiviert wurden, von der CPU als virtuelle Adressen interpretiert. und muss (mithilfe von Informationen aus den Seitentabellen) in physisch übersetzt werden, bevor sie dem Speichercontroller angezeigt werden.

Kernel-Code im Betriebssystem verwaltet den physischen Arbeitsspeicher natürlich (z. B. weist er Prozessen zu, die ihn benötigen) und manipuliert Seitentabelleneinträge und physische Seitennummern, kann jedoch nicht direkt auf den Arbeitsspeicher über verweisen die physischen Adressen der Erinnerung.