Как в C или C ++ (windows) читать ОЗУ, задавая физический (не виртуальный) адрес? Это означает, что не нужно использовать систему виртуальной памяти (таблицы mmu) и быть специфичным для одного процесса.
Я уже знаю API ReadProcessMemory
, который читает из оперативной памяти (используется большинством обучающих программ), но только для определенного процесса.
Я поискал в MSDN и обнаружил, что Device \ PhysicalMemory , похоже, дает такую возможность, но я не нашел практического примера, и эта функция, похоже, была отключена пакетами обновления Windows (чтобы исправить некоторую уязвимость) .
Я знаю, что это возможно, потому что это делает WinHex (если вы выберете «инструменты»> «открыть оперативную память»> «физическая память»). Затем он отобразит содержимое RAM от 0x00000000 до your_ram_size, как при открытии обычного файла. Для этого требуются права администратора, но нет драйвера для установки (что означает, что WinHex делает это из пользовательского режима).
РЕДАКТИРОВАТЬ: добавлена информация об os.