Помогите пожалуйста разобраться с трансляцией адресов!

Тема в разделе "WASM.NT.KERNEL", создана пользователем The_GorYnycH, 28 янв 2009.

  1. The_GorYnycH

    The_GorYnycH New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2008
    Сообщения:
    32
    Собственно сабж... Очень хочется посмотреть, по каким адресам физической памяти лежат структуры, необходимые для трансляции виртуальных адресов на платформе х64, а также пройтись по ним ручками и в итоге получить физический адрес. Использую WinDbg. Ось на рабочей машине - WinXp x32, SP2, на отлаживаемой - WinServer 2008 x64. Символы для обоих систем скачаны с сайта Microsoft и пути к ним указаны, также указан путь и к моим символам. Распишу по порядку, что делал:
    В книжке Соломона и Руссиновича указано, что для преобразования нужны следующие структуры: селектор карты страниц, селектор указателя на каталог страниц, селектор таблицы страниц, селектор PTE. Адрес первой структуры я получаю командой !process <адрес процесса>, это мой процесс.

    Код (Text):
    1. kd> ! process fffffa80bc8cf760
    2. PROCESS fffffa80bc8cf760
    3.     SessionId: 2  Cid: 11d4    Peb: 7fffffda000  ParentCid: 1624
    4.     DirBase: d7b6e8000  ObjectTable: fffff880071401b0  HandleCount: 118.
    Вывожу дамп памяти этой таблицы командой dp /p адрес адрес+0x1000, и хотя я еще в коде приложения ничего особо не выделял, эта таблица частично заполнена вот так:
    Код (Text):
    1. 6: kd> dp /p d7b6e8000 d7b6e9000
    2. 0000000d`7b6e8000  7420000d`7b6ca867 00000000`00000000
    3. нули
    4. 0000000d`7b6e8070  00000000`00000000 36e0000d`7b576867
    5. нули
    6. 0000000d`7b6e8f60  00000000`00000000 0000000d`7b6e8863
    7. 0000000d`7b6e8f70  0000000d`7b191863 00000000`0013a063
    8. 0000000d`7b6e8f80  00000000`00136063 00000000`00ab8863
    9. 0000000d`7b6e8f90  0000000c`0680a863 00000000`00660863
    10. 0000000d`7b6e8fa0  00000001`603f4863 00000001`60200863
    11. нули
    12. 0000000d`7b6e8ff0  00000000`00000000 00000000`00159063
    После того, как я выделил в приложении 4ГБ памяти, обратился к ней, чтобы все таблицы заполнились, ибо я точно не уверен в какой момент они заполняются, по идее должны при первом обращении, поправьте, если ошибаюсь, память стала выглядеть так:
    Код (Text):
    1. kd> dp /p d7b6e8000 d7b6e9000
    2. 0000000d`7b6e8000  7f90000d`7b6ca867 00000000`00000000
    3. нули
    4. 0000000d`7b6e8070  00000000`00000000 6c50000d`7b576867
    5. нули
    6. 0000000d`7b6e8f60  00000000`00000000 0000000d`7b6e8863
    7. 0000000d`7b6e8f70  0000000d`7b191863 00000000`0013a063
    8. 0000000d`7b6e8f80  00000000`00136063 00000000`00ab8863
    9. 0000000d`7b6e8f90  0000000c`0680a863 00000000`00660863
    10. 0000000d`7b6e8fa0  00000001`603f4863 00000001`60200863
    11. нули
    12. 0000000d`7b6e8ff0  00000000`00000000 00000000`00159063
    Поменялись первые две строки. По идее здесь должны лежать указатели на след. таблицу, но те строки, которые изменились на указатели похожи слабо. 0х7f90000d`7b6ca867 это не физический и не виртуальный адрес, а что-то другое. Видимо я что-то не понимаю, просвятите пожалуйста.
     
  2. defaultplayer

    defaultplayer New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    214
    это не физ адрес это аппаратный пте, где 7f9 - это программный (индекс рабочего набора), d`7b6ca - физ адрес, 867 - аттрибуты страницы, посмотрел только что в том же руссиновиче, вроде так.
     
  3. The_GorYnycH

    The_GorYnycH New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2008
    Сообщения:
    32
    Ага, спасибо, все понятно. А адреса в нижней части страницы к чему относятся?
    ну, например вот этот.
    0000000d`7b6e8ff0 00000000`00000000 00000000`00159063