Копирование при записи в kernel-mode

Тема в разделе "WASM.NT.KERNEL", создана пользователем Egor76, 26 окт 2006.

  1. Egor76

    Egor76 New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    7
    При записи ring0-кодом в нижние 2Гб, перезаписываемая страница изменяется для всех процессов в которые она отображена. А нужно чтобы создавалась измененная страница именно для данного процесса, как это делается при записи в ring3. Как быть?
     
  2. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Не важно из какого кольца писать, нижние 2 Гб всегда принадлежат контексту текущего процесса
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    KeAttachProcess?
     
  4. Egor76

    Egor76 New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    7
    Изначально страницы PE-файла в нижних 2Гб общие для нескольких процессов. Т.е. например страница из Kernel32.dll находится в одном экземпляре в оперативной памяти (или swop-файле) для всех текущих процессов. При попытке записи на такую страницу ring3-кодом (не важно в каком процессе) система создает копию данной страницы именно для этого процесса, и после этого данная страница изменяется только для этого процесса (все это написано у Рихтера). Так вот нужно, чтобы такое происходило при записи на страницу в ring0. А при записи в ring0, копирования при записи не происходит.
     
  5. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    и не произойдет, таков механизм copy-on-write - не работает в ring0
     
  6. MiraclE

    MiraclE New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2005
    Сообщения:
    38
    Адрес:
    Kazakhstan
    Все будет работать, нужно просто выставить странице PAGE_EXECUTE_WRITECOPY,из ядра это можно сделать правкой PTE или вызовом NtProtectVirtualMemory.
     
  7. Egor76

    Egor76 New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    7
    Т.н. "механизм copy-on-write" есть ни что иное как некоторый код, который процессор x486 выполняет в ответ на распознанное им исключение при обращении к некоторым образом описанной странице.
    А вообще, проблема решилась!!!!!!!!!!!!!
    Путем прямого прыжка на не экспортируемые из ntoskrnl NtProtectVirtualMemory/NtWriteVirtualMemory
    Главное чобы аргументы лежали в нижних 2Гб.