Собственно сабж... Очень хочется посмотреть, по каким адресам физической памяти лежат структуры, необходимые для трансляции виртуальных адресов на платформе х64, а также пройтись по ним ручками и в итоге получить физический адрес. Использую WinDbg. Ось на рабочей машине - WinXp x32, SP2, на отлаживаемой - WinServer 2008 x64. Символы для обоих систем скачаны с сайта Microsoft и пути к ним указаны, также указан путь и к моим символам. Распишу по порядку, что делал: В книжке Соломона и Руссиновича указано, что для преобразования нужны следующие структуры: селектор карты страниц, селектор указателя на каталог страниц, селектор таблицы страниц, селектор PTE. Адрес первой структуры я получаю командой !process <адрес процесса>, это мой процесс. Код (Text): kd> ! process fffffa80bc8cf760 PROCESS fffffa80bc8cf760 SessionId: 2 Cid: 11d4 Peb: 7fffffda000 ParentCid: 1624 DirBase: d7b6e8000 ObjectTable: fffff880071401b0 HandleCount: 118. Вывожу дамп памяти этой таблицы командой dp /p адрес адрес+0x1000, и хотя я еще в коде приложения ничего особо не выделял, эта таблица частично заполнена вот так: Код (Text): 6: kd> dp /p d7b6e8000 d7b6e9000 0000000d`7b6e8000 7420000d`7b6ca867 00000000`00000000 нули 0000000d`7b6e8070 00000000`00000000 36e0000d`7b576867 нули 0000000d`7b6e8f60 00000000`00000000 0000000d`7b6e8863 0000000d`7b6e8f70 0000000d`7b191863 00000000`0013a063 0000000d`7b6e8f80 00000000`00136063 00000000`00ab8863 0000000d`7b6e8f90 0000000c`0680a863 00000000`00660863 0000000d`7b6e8fa0 00000001`603f4863 00000001`60200863 нули 0000000d`7b6e8ff0 00000000`00000000 00000000`00159063 После того, как я выделил в приложении 4ГБ памяти, обратился к ней, чтобы все таблицы заполнились, ибо я точно не уверен в какой момент они заполняются, по идее должны при первом обращении, поправьте, если ошибаюсь, память стала выглядеть так: Код (Text): kd> dp /p d7b6e8000 d7b6e9000 0000000d`7b6e8000 7f90000d`7b6ca867 00000000`00000000 нули 0000000d`7b6e8070 00000000`00000000 6c50000d`7b576867 нули 0000000d`7b6e8f60 00000000`00000000 0000000d`7b6e8863 0000000d`7b6e8f70 0000000d`7b191863 00000000`0013a063 0000000d`7b6e8f80 00000000`00136063 00000000`00ab8863 0000000d`7b6e8f90 0000000c`0680a863 00000000`00660863 0000000d`7b6e8fa0 00000001`603f4863 00000001`60200863 нули 0000000d`7b6e8ff0 00000000`00000000 00000000`00159063 Поменялись первые две строки. По идее здесь должны лежать указатели на след. таблицу, но те строки, которые изменились на указатели похожи слабо. 0х7f90000d`7b6ca867 это не физический и не виртуальный адрес, а что-то другое. Видимо я что-то не понимаю, просвятите пожалуйста.
это не физ адрес это аппаратный пте, где 7f9 - это программный (индекс рабочего набора), d`7b6ca - физ адрес, 867 - аттрибуты страницы, посмотрел только что в том же руссиновиче, вроде так.
Ага, спасибо, все понятно. А адреса в нижней части страницы к чему относятся? ну, например вот этот. 0000000d`7b6e8ff0 00000000`00000000 00000000`00159063