Уточнюсь. Как с помощью драйвера ring 0, прочесть содержимое памяти начиная с адреса 0000h:0000h и до конца ?
смотришь, доступен адрес для чтения или нет (MmIsAddressValid), если доступен - читаешь mov eax,address mov eax,[eax]
lisij Одномоментно в текущем процессе отображена (т.е. простым языком доступна на чтение) не вся память. Часть пямяти процесса может находится либо в pagefile.sys либо в *.exe или в любом другом файле на диске. При попытке прочитать такую память возникает прерывание Int 0E или в народе PageFAULT, и эта память автоматически заполняется из вышеуказанных источников. Все вышесказанное относится к виртуальной памяти, а не к реально физической. Парралельно два следствия: 1. Если процесс не использует часть памяти, то при чтении этого участка возникает исключение Access ... (доступ запрещен). Если ты пытаешся прочесть это из ring0, то возникает синий экран смерти... Потому перехватывай int 0E для своей обработки. 2. САМОЕ ВАЖНОЕ: ОДНОВРЕМЕННО С ФИЗИЧЕСКОЙ ПАМЯТЬЮ В ВИРТУАЛЬНУЮ ПАМЯТЬ ПРОЦЕССА НАЧИНАЯ С АДРЕСА 80000000h ОТОБРАЖАЕТСЯ ПАМЯТЬ ВСЕХ ТВОИХ УСТРОЙСТВ (ТИПА ВИДЕОКАРТЫ И ТВ-ТЮНЕРА), ТАК ВОТ ПРИ ПОПЫТКЕ ПРОЧЕСТЬ ОБЛАСТЬ ПЯМЯТИ УСТРОЙСТВА НА 1 ИЗ 3 КОМПЬЮТЕРОВ ЭТО МОЖЕТ ПРИВЕСТИ К ЗАВИСАНИЮ МАШИНЫ, ПОТОМУ НАПРИМЕР ПРИ ПОИСКЕ В SOFTICE В ЭТОЙ ОБЛАСТИ МОЖЕТ ПРОИСХОДИТЬ ЗАВИСАНИЕ. Спасибо IceStudent. Пожалуйста не захламляйте форум.
Ясно, извеняюсь за дубли ). Хорошо. Вот поправте меня, если я не прав. Процесс разделен на сегменты, сегменты в свою очередь бьются на страницы. Если страница долго не используется то она выгружается в своп. С другой стороны мы имеем, при обращении к странице которой в памяти нет генерится прерывание, сисетма ломится в менеджер памяти где получает адрес страницы в свопе находит ее и проецирует в физическую память. Теперь о моей цели, все банально просто, я хочу в реальном времени видеть как работает память, что туда система грузит с каких процессов какие сегменты какие страницы, адреса, куда происходит свопирование. Все это ради саморазвития, я не догоню этот кусок поирога если не увижу как это работает. И конечно практика в написании программы подобного рода. Я думаю любой кто занимается подобного рода исследованиями меня поймет. Это же интересно !
еще один глупый вопрос - как проверить доступносить кернеловой страницы на запись? проверка напрямую по pte или вызов ProbeForWrite с измененным MmUserProbeAddress не рассматриваются MmProbeAndLockPages тоже вроде не работает с памятью ядра..