Как посмотреть содержимое оперативной памяти? [закрыто]
14
Есть ли способ увидеть содержимое оперативной памяти? От первого байта до последнего. Хотелось бы посмотреть, где в оперативной памяти находится ОС и все запущенные на ней процессы. Это возможно?
Как пользовательский процесс в защищенной среде памяти, у вас есть доступ только к пользовательской копии его пространства виртуальной памяти. Пространство памяти ядра, пространство виртуальной памяти других пользователей и неиспользуемая физическая память защищены от посторонних глаз. С другой стороны, случайный по времени снимок физической SDRAM не будет иметь большого значения, если вы не знаете отображения виртуальной памяти.
опилки
Память с произвольным доступом? Итак, таблица размещения страниц?
Вы, вероятно, были бы намного счастливее с некоторым инструментом, который показывает, как распределяется память, по сравнению с фактическим просмотром 1 и 0.
Дэниел Р Хикс
1
это было просто из любопытства
osta
Ответы:
8
Вы могли бы использовать отладчик ядра, который позволял бы получать доступ к «сырой» памяти, как SoftICE для Windows . Вы также можете настроить GDB в качестве отладчика для ядра Linux . Если виртуальная машина является опцией, некоторые программы виртуализации поддерживают сохранение состояния машины (включая ОЗУ) на диск, который затем можно проанализировать . Однако следует отметить, что большинство «современных» операционных систем используют рандомизацию размещения адресного пространства (ASLR). Настоящая карта физической памяти системы специально фрагментирована, чтобы помочь смягчить различные проблемы безопасности и эксплойты (например , переполнение буфера в стеке / куче ).
Однако для данной программы, работающей в современной операционной системе, вы можете получить логическую карту памяти для данного процесса / потока - при условии, что у вас есть соответствующие символы отладки и отладчик. Если вам нужен общий вид, если программное / аппаратное обеспечение использует виртуальную память , ситуация становится значительно более сложной. Опять же, хотя, если вы буквально хотите, что только в оперативной памяти, см. Первый абзац.
В Windows к содержимому физической памяти можно получить доступ через \Device\PhysicalMemoryобъект в диспетчере объектов . Для этого требуется доступ к системе на уровне ядра, а это значит, что для доступа к этому объекту вам потребуется установить программу, скорее всего, драйвер режима ядра.
В Linux к содержимому физической памяти можно напрямую обращаться как к двоичным данным, читая /dev/memкак root. Смотрите Что такое / dev / mem? и mem(4)справочную страницу для более подробной информации.
Я не уверен, почему вам нужно определить, где операционная система и процессы расположены в физической памяти, хотя ...
В Windows вы можете открыть \Device\PhysicalMemory(эквивалентно /dev/kmem), как это делают утилиты RAMMap и PhysMem .
user1686 9.09.12
1
Уже нет. Начиная с Server 2003 и во всех более поздних версиях, \DevicePhysicalMemoryобъект нельзя открыть из пользовательского режима. RAMmap и большинство других инструментов sysinternals включают драйвер режима ядра для выполнения этой части своей работы.
Ответы:
Вы могли бы использовать отладчик ядра, который позволял бы получать доступ к «сырой» памяти, как SoftICE для Windows . Вы также можете настроить GDB в качестве отладчика для ядра Linux . Если виртуальная машина является опцией, некоторые программы виртуализации поддерживают сохранение состояния машины (включая ОЗУ) на диск, который затем можно проанализировать . Однако следует отметить, что большинство «современных» операционных систем используют рандомизацию размещения адресного пространства (ASLR). Настоящая карта физической памяти системы специально фрагментирована, чтобы помочь смягчить различные проблемы безопасности и эксплойты (например , переполнение буфера в стеке / куче ).
Однако для данной программы, работающей в современной операционной системе, вы можете получить логическую карту памяти для данного процесса / потока - при условии, что у вас есть соответствующие символы отладки и отладчик. Если вам нужен общий вид, если программное / аппаратное обеспечение использует виртуальную память , ситуация становится значительно более сложной. Опять же, хотя, если вы буквально хотите, что только в оперативной памяти, см. Первый абзац.
источник
В Windows к содержимому физической памяти можно получить доступ через
\Device\PhysicalMemory
объект в диспетчере объектов . Для этого требуется доступ к системе на уровне ядра, а это значит, что для доступа к этому объекту вам потребуется установить программу, скорее всего, драйвер режима ядра.В Linux к содержимому физической памяти можно напрямую обращаться как к двоичным данным, читая
/dev/mem
какroot
. Смотрите Что такое / dev / mem? иmem(4)
справочную страницу для более подробной информации.Я не уверен, почему вам нужно определить, где операционная система и процессы расположены в физической памяти, хотя ...
источник
\Device\PhysicalMemory
(эквивалентно/dev/kmem
), как это делают утилиты RAMMap и PhysMem .\DevicePhysicalMemory
объект нельзя открыть из пользовательского режима. RAMmap и большинство других инструментов sysinternals включают драйвер режима ядра для выполнения этой части своей работы.