Чтение системной памяти

Тема в разделе "WASM.BEGINNERS", создана пользователем lisij, 25 май 2006.

  1. lisij

    lisij New Member

    Публикаций:
    0
    Регистрация:
    16 май 2006
    Сообщения:
    11
    Добрый день.

    Подскажите пожалуйста как можно прочесть системную память ?
     
  2. lisij

    lisij New Member

    Публикаций:
    0
    Регистрация:
    16 май 2006
    Сообщения:
    11
    Уточнюсь. Как с помощью драйвера ring 0, прочесть содержимое памяти начиная с адреса 0000h:0000h и до конца ?
     
  3. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    смотришь, доступен адрес для чтения или нет (MmIsAddressValid), если доступен - читаешь

    mov eax,address

    mov eax,[eax]
     
  4. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    lisij



    Одномоментно в текущем процессе отображена (т.е. простым языком доступна на чтение) не вся память. Часть пямяти процесса может находится либо в pagefile.sys либо в *.exe или в любом другом файле на диске. При попытке прочитать такую память возникает прерывание Int 0E или в народе PageFAULT, и эта память автоматически заполняется из вышеуказанных источников. Все вышесказанное относится к виртуальной памяти, а не к реально физической.

    Парралельно два следствия:

    1. Если процесс не использует часть памяти, то при чтении этого участка возникает исключение Access ... (доступ запрещен). Если ты пытаешся прочесть это из ring0, то возникает синий экран смерти... Потому перехватывай int 0E для своей обработки.

    2. САМОЕ ВАЖНОЕ: ОДНОВРЕМЕННО С ФИЗИЧЕСКОЙ ПАМЯТЬЮ В ВИРТУАЛЬНУЮ ПАМЯТЬ ПРОЦЕССА НАЧИНАЯ С АДРЕСА 80000000h ОТОБРАЖАЕТСЯ ПАМЯТЬ ВСЕХ ТВОИХ УСТРОЙСТВ (ТИПА ВИДЕОКАРТЫ И ТВ-ТЮНЕРА), ТАК ВОТ ПРИ ПОПЫТКЕ ПРОЧЕСТЬ ОБЛАСТЬ ПЯМЯТИ УСТРОЙСТВА НА 1 ИЗ 3 КОМПЬЮТЕРОВ ЭТО МОЖЕТ ПРИВЕСТИ К ЗАВИСАНИЮ МАШИНЫ, ПОТОМУ НАПРИМЕР ПРИ ПОИСКЕ В SOFTICE В ЭТОЙ ОБЛАСТИ МОЖЕТ ПРОИСХОДИТЬ ЗАВИСАНИЕ.

    Спасибо IceStudent. Пожалуйста не захламляйте форум.
     
  5. lisij

    lisij New Member

    Публикаций:
    0
    Регистрация:
    16 май 2006
    Сообщения:
    11
    Ясно, извеняюсь за дубли ).

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

    Теперь о моей цели, все банально просто, я хочу в реальном времени видеть как работает память, что туда система грузит с каких процессов какие сегменты какие страницы, адреса, куда происходит свопирование. Все это ради саморазвития, я не догоню этот кусок поирога если не увижу как это работает. И конечно практика в написании программы подобного рода. Я думаю любой кто занимается подобного рода исследованиями меня поймет. Это же интересно !
     
  6. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    еще один глупый вопрос - как проверить доступносить кернеловой страницы на запись?
    проверка напрямую по pte или вызов ProbeForWrite с измененным MmUserProbeAddress не рассматриваются
    MmProbeAndLockPages тоже вроде не работает с памятью ядра..