Самоучитель по программированию систем защиты


Функции работы с памятью



Функции работы с памятью

Из всего вышеизложенного нужно выделить основные моменты:

  1. 1. Все адресное пространство процесса (контекст памяти) делится на две области

    1. системное адресное пространство (верхние 2 Гб) и пользовательское адресное пространство (нижние 2 Гб):
    2. Системное адресное пространство всегда одинаково, вне зависимости от текущего контекста памяти.
    3. Пользовательское адресное пространство разное для каждого контекста памяти.

  2. 2. Код пользовательского режима и режима ядра пользуется для доступа к памяти разными селекторами:

    1. Для одного контекста памяти селекторы адресуют одну и ту же физическую память, но с разными режимами доступа.
    2. Селекторы не имеют ничего общего с контекстом памяти.
    3. По селекторам для ядра можно получить доступ (по крайней мере, для чтения) ко всему адресному пространству в данном контексте памяти, а по селекторам для ядра - только для пользовательской области памяти.

  3. 3. Код в пользовательском адресном пространстве всегда вытесняемый, если не предприняты меры по созданию новой записи в каталоге страниц, указывающих на невытесняемую память.
  4. 4. Код, работающий на уровне IRQL большем или равном DISPATCH_LEVEL, может использовать только невыгружаемую память (соответственно, сам код должен находиться в невыгружаемой памяти).
  5. 5. В ОС существуют функции для выполнения любой работы с памятью:

    1. Выделение/освобождение памяти в выгружаемой/невыгружаемой, кешируемой/некешируемой памяти.
    2. Преобразование адресов памяти (виртуальный в физический, физический в виртуальный).
    3. Проверка доступности памяти. Рассмотрим эти функции более подробно.




Начало  Назад  Вперед



Книжный магазин