Адрес Массива PTE в WinXP SP2

Тема в разделе "WASM.NT.KERNEL", создана пользователем KoMaTo3HuK, 12 июн 2007.

  1. KoMaTo3HuK

    KoMaTo3HuK New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2007
    Сообщения:
    13
    А где начинается PTE в WinXP SP2, SP1, WIN 2000, Server, вообще для известных вам систем?
     
  2. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    массив PTE в общем смысле является массивом только в пределах одной таблицы страниц, потому как разные таблицы страниц не обязательно должны быть смежны физически
    таблицы страниц для отдельной задачи могут выделяться в любом месте физически доступной памяти
    поэтому с этой точки зрения говорить об адресе некорректно
    другое дело таблицы страниц для перехода в страничный режим при инициализации ОС, ты это имеешь в виду?
     
  3. KoMaTo3HuK

    KoMaTo3HuK New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2007
    Сообщения:
    13
    А как его можно обнаружить?
     
  4. n0name

    n0name New Member

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

    KoMaTo3HuK New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2007
    Сообщения:
    13
    спасибо.
     
  6. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    KoMaTo3HuK
    в CR3 адрес каталога страниц (причем физический), т. е массива PDE
    каэждый его элемент содержит адрес (тоже физический) очередной таблицы страниц, т. е массива PTE
     
  7. KoMaTo3HuK

    KoMaTo3HuK New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2007
    Сообщения:
    13
    Теперь проблема.

    Пытаюсь произвести следующие манипуляции:

    1 беру адрес какой-нибудь своей переменной.
    2 вынимаю из него PDI - индекс в PDE
    3 смотрю в PDE по смещению PDI

    а там 0 - как так ?
     
  8. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    KoMaTo3HuK
    код в студию
    надо по смещению PDI * 4
     
  9. KoMaTo3HuK

    KoMaTo3HuK New Member

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

    DWORD * pde;
    PDE[indexPDI];
     
  10. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    KoMaTo3HuK
    ты весь код покажи, тут не понятно, чем утебя pde инициализируется
     
  11. KoMaTo3HuK

    KoMaTo3HuK New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2007
    Сообщения:
    13
    Инициализирую вот так.

    DWORD *PDE;
    PHYSICAL_ADDRESS addr;

    _asm{
    push eax
    mov eax,cr3
    mov addr.quadpart,eax
    pop eax
    }

    addr.quadpart = addr.quadpart & 0xFFFFF000
    PDE = MmMapIoSpace(addr,PAGE_SIZE,0)