Трансляция адресов, MmMapIoSpace

Тема в разделе "WASM.BEGINNERS", создана пользователем HoShiMin, 10 ноя 2018.

  1. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.241
    HoShiMin, Товарищ, так ты ссылки, пожалуйста, читай..
    --- Сообщение объединено, 12 ноя 2018 ---
    все примеры вполне имеются == и в мсдн куча годноты, и сорцы с гитов достать Никто не мешает.
     
  2. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    UbIvItS,

    Читать конечно нужно, но это имхо не тот случай где можно человека напрягать ссылками, я говорил уже выше. Я сталкивался с подобной проблемой, поиск инфы ничего не даёт, не штатная ситуация. Более того это кернел, а ни винапи, где всё согласно докам. В этом деле нужно понимать как ядро устроено, а доки - толку от них мало.
     
  3. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.241
    вроде, и в Windows Internals http://csit.udc.edu/~byu/UDC3529315/WindowsInternals-4e.pdf чой-то должно быть :)
    --- Сообщение объединено, 12 ноя 2018 ---
    можно, кстати, порыться и в сорцах https://github.com/reactos/reactos
    --- Сообщение объединено, 12 ноя 2018 ---
    Ты имел дело с этими вопросами сколько лет назад???
     
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    UbIvItS,

    >Ты имел дело с этими вопросами сколько лет назад???

    Если я подзабыл имена функций, это не означает что я не помню механизмы. Да и какая разница, эти вопросы обычно кроме тс тут никто не задаёт. Интернал механизы нужно понимать, это не виньапи, где можно открыть какие то доки и посмотреть прототипы. В кернел иначе - либо ты в теме, либо нет, а доки - хорошо что они есть, но их нужно изучать, годами.
     
    TermoSINteZ нравится это.
  5. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.241
    дело в том, что сейчас реально больше инфы и реально мощней тулзы.. раньше софтайс был приделом мЯчт, а сейчас на ОДНОЙ макинке можно ладить ядро чрез вирты + куча сорцов на гитах валяются. сейчас реально рай для разрабов :) было бы только время/здоровье/желание :)
     
  6. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    UbIvItS,

    Мне нет смысла с вами спорить.
     
  7. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.460
    Адрес:
    Россия, Нижний Новгород
    Итак, действительно, через MmGetVirtualForPhysical получил валидный виртуальный адрес, по которому лежат валидные записи.
    Оттранслировал юзермодный адрес - физический адрес совпал с полученным через MmGetPhysicalAddress. Отлично!
    Но! Когда транслирую ядерный (4Кб из NonPaged-пула), PTE-запись оказывается пустой, все биты нулевые (чтение PTE успешно, без ошибок). Тоже какие-то особенности?

    P.S.: Под WinDbg завтра посмотрю

    Безымянный.png
     
    Последнее редактирование: 13 ноя 2018
  8. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.553
    Адрес:
    Russia
    0) что это за дрисня ?)))
    1) действительно посмотрите завтра в windbg ) не хочу все разжевывать по полочкам. надо чтоб новички тоже думали )
     
  9. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.460
    Адрес:
    Россия, Нижний Новгород
    Ну почему сразу дрисня((
     
  10. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.460
    Адрес:
    Россия, Нижний Новгород
    Только сейчас снова дошли руки до драйвера.
    Посмотрел внутрь MmGetPhysicalAddress и увидел интересную функу:
    upload_2018-11-17_21-53-22.png

    Похоже, она и отвечает за сокрытие PTE для адресов из пула. Что интересно, в виртуалке периодически PTE читается верно (соответственно, и физический адрес ресолвится правильно и совпадает с полученным через MmGetPhysicalAddress). На хосте такого поведения воспроизвести не получилось.

    Допишу ещё несколько обёрток над ядерными функами и попробую поресолвить ядерные адреса не из пула, отпишусь о результатах.
    --- Сообщение объединено, 17 ноя 2018 ---
    Проверил: память, выделенная через MmAllocateNonCachedMemory, ресолвится без проблем.