Ich verwende das neueste Ubuntu Linux mit einem benutzerdefinierten Kernel (4.2.0-36-generic), in dem ich deaktiviert habe CONFIG_STRICT_DEVNEM
, da ich während eines Projekts einige Begriffe im Speicher ausgeben und suchen muss.
Bei Verwendung von:
dd if=/dev/mem
um es auf dem Bildschirm auszudrucken,dd if=/dev/mem of=/home/user/Documents/file.dump
um es als Datei zu speichern, oderdd if=/dev/mem | hexdump -C | grep 'term'
um direkt zu finden, was ich suche,
Während des Vorgangs friert das System ein und startet neu.
Ich habe es mit überprüft df -h
und meine Festplatte hat genügend freien Speicherplatz. Außerdem stoppt der Vorgang immer, nachdem 2,1 GB bis 2,5 GB aus einem 8 GB RAM geschrieben wurden und bevor Adressen erreicht werden, die mit 4 beginnen (falls diese einen Unterschied machen). Außerdem zeigt das Überprüfen von /var/log/syslog
und /var/log/kern.log
vor dem Einfrieren nichts Relevantes an.
Außerdem werden durch die Verwendung von Parametern bs=1G count=2
die ersten 2 GB des Speichers erfolgreich kopiert, doch der anschließende Versuch, bs=1G count=2 skip=2
auf die nächsten 2 GB zuzugreifen, führt zum erneuten Einfrieren des Systems.
Können Sie eine Lösung vorschlagen, mit der der gesamte Speicher ausgelesen werden kann, oder eine andere Möglichkeit, direkt im Speicher nach Begriffen zu suchen?
Antwort1
Ich glaube, Sie stoßen möglicherweise auf einen Speicherbereich, der von PCI/ACPI oder ähnlicher Hardware verwendet wird. Möglicherweise gibt es ein speicherzugeordnetes Gerät, auf das nicht zugegriffen werden kann. Ich kann nicht genau sagen, welche Adresse das Problem verursacht, aber es ist üblich, dass einige spezielle Bereiche knapp unter der 4-GB-Grenze liegen.
Auf einer Maschine mit 4 GB Arbeitsspeicher gibt der Kernel beim Booten Folgendes aus:
BIOS-e820: 0000000000000000 - 000000000009e400 (usable)
BIOS-e820: 000000000009e400 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cf690000 (usable)
BIOS-e820: 00000000cf690000 - 00000000cf6e0000 (reserved)
BIOS-e820: 00000000cf6e0000 - 00000000cf6e3000 (ACPI NVS)
BIOS-e820: 00000000cf6e3000 - 00000000cf6f0000 (ACPI data)
BIOS-e820: 00000000cf6f0000 - 00000000cf700000 (reserved)
BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000130000000 (usable)
Ein Teil des nutzbaren Speichers liegt bei über der 4-GB-Grenze und zwischen und 0x100000000
scheint es Lücken zu geben .0xcf700000
0xfec00000
Die dem „verwendbaren“ Speicher entsprechenden Bereiche werden ebenfalls in angezeigt und /proc/iomem
als „System-RAM“ gekennzeichnet. (Die Datei enthält auch Informationen zu den anderen Speicherbereichen.) Möglicherweise sind Sie auf der sicheren Seite, wenn Sie nur aus diesen Bereichen lesen.
$ grep "System RAM" /proc/iomem
00001000-0009e3ff : System RAM
00100000-cf68ffff : System RAM
100000000-12fffffff : System RAM