Как вы читаете непосредственно из физической памяти?

Как в C или C ++ (windows) читать ОЗУ, задавая физический (не виртуальный) адрес? Это означает, что не нужно использовать систему виртуальной памяти (таблицы mmu) и быть специфичным для одного процесса.

Я уже знаю API ReadProcessMemory , который читает из оперативной памяти (используется большинством обучающих программ), но только для определенного процесса.

Я поискал в MSDN и обнаружил, что Device \ PhysicalMemory , похоже, дает такую ​​возможность, но я не нашел практического примера, и эта функция, похоже, была отключена пакетами обновления Windows (чтобы исправить некоторую уязвимость) .

Я знаю, что это возможно, потому что это делает WinHex (если вы выберете «инструменты»> «открыть оперативную память»> «физическая память»). Затем он отобразит содержимое RAM от 0x00000000 до your_ram_size, как при открытии обычного файла. Для этого требуются права администратора, но нет драйвера для установки (что означает, что WinHex делает это из пользовательского режима).

РЕДАКТИРОВАТЬ: добавлена ​​информация об os.

23
задан tigrou 6 December 2011 в 17:10
поделиться