Как посмотреть содержимое оперативной памяти? [закрыто]

14

Есть ли способ увидеть содержимое оперативной памяти? От первого байта до последнего. Хотелось бы посмотреть, где в оперативной памяти находится ОС и все запущенные на ней процессы. Это возможно?

оста
источник
1
Как пользовательский процесс в защищенной среде памяти, у вас есть доступ только к пользовательской копии его пространства виртуальной памяти. Пространство памяти ядра, пространство виртуальной памяти других пользователей и неиспользуемая физическая память защищены от посторонних глаз. С другой стороны, случайный по времени снимок физической SDRAM не будет иметь большого значения, если вы не знаете отображения виртуальной памяти.
опилки
Память с произвольным доступом? Итак, таблица размещения страниц?
ta.speot.is
Что именно вы пытаетесь достичь? meta.stackexchange.com/questions/66377/what-is-the-xy-problem
bwDraco
Вы, вероятно, были бы намного счастливее с некоторым инструментом, который показывает, как распределяется память, по сравнению с фактическим просмотром 1 и 0.
Дэниел Р Хикс
1
это было просто из любопытства
osta

Ответы:

8

Вы могли бы использовать отладчик ядра, который позволял бы получать доступ к «сырой» памяти, как SoftICE для Windows . Вы также можете настроить GDB в качестве отладчика для ядра Linux . Если виртуальная машина является опцией, некоторые программы виртуализации поддерживают сохранение состояния машины (включая ОЗУ) на диск, который затем можно проанализировать . Однако следует отметить, что большинство «современных» операционных систем используют рандомизацию размещения адресного пространства (ASLR). Настоящая карта физической памяти системы специально фрагментирована, чтобы помочь смягчить различные проблемы безопасности и эксплойты (например , переполнение буфера в стеке / куче ).

Однако для данной программы, работающей в современной операционной системе, вы можете получить логическую карту памяти для данного процесса / потока - при условии, что у вас есть соответствующие символы отладки и отладчик. Если вам нужен общий вид, если программное / аппаратное обеспечение использует виртуальную память , ситуация становится значительно более сложной. Опять же, хотя, если вы буквально хотите, что только в оперативной памяти, см. Первый абзац.

Прорвать
источник
9

В Windows к содержимому физической памяти можно получить доступ через \Device\PhysicalMemoryобъект в диспетчере объектов . Для этого требуется доступ к системе на уровне ядра, а это значит, что для доступа к этому объекту вам потребуется установить программу, скорее всего, драйвер режима ядра.

В Linux к содержимому физической памяти можно напрямую обращаться как к двоичным данным, читая /dev/memкак root. Смотрите Что такое / dev / mem? и mem(4)справочную страницу для более подробной информации.

Я не уверен, почему вам нужно определить, где операционная система и процессы расположены в физической памяти, хотя ...

bwDraco
источник
3
В Windows вы можете открыть \Device\PhysicalMemory(эквивалентно /dev/kmem), как это делают утилиты RAMMap и PhysMem .
user1686 9.09.12
1
Уже нет. Начиная с Server 2003 и во всех более поздних версиях, \DevicePhysicalMemoryобъект нельзя открыть из пользовательского режима. RAMmap и большинство других инструментов sysinternals включают драйвер режима ядра для выполнения этой части своей работы.
Джейми Ханрахан