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

       

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



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

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

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

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

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

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


        4. Содержание раздела