Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос DMA — Оптимизация трансляции Virtual to Physical через self-ref entry и PML4E

Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
340
Реакции
7
Опять пришлось лезть в дебри трансляции адресов, потому что стандартные методы начинают подтормаживать при активном чтении памяти. Наткнулся тут на интересную реализацию перевода виртуальных адресов в физические, решил поделиться с местными кодерами, пока сам допиливаю свой байпасс.

Суть в чем: большинство юзает стандартный обход пейдж-тейблов, который работает медленно из-за кучи чтений на каждый уровень иерархии. Если ты уже в кернеле, можно юзать self-reference entry при аттаче, но для внешнего софта это не всегда удобно.

Автор идеи предлагает прокидывать PML4E, который указывает прямо на таргетный DTB. По технической части:

  1. Метод: Создание кастомного PML4E, ссылающегося на целевой DTB. Это позволяет MMU самостоятельно разруливать пейдж-волк.
  2. Результат: Получаем PFN конечной страницы практически мгновенно, что дает колоссальный буст по скорости чтения по сравнению с классическим софтом.
  3. Скрытность: Тут кроется главный подвох. Инъекция PML4E — это жирный флаг для любого нормального античита, который умеет чекать целостность структур памяти. Нужно искать способы скрытия, иначе отлет по мануалбану будет вопросом пары минут.

В теории, можно провернуть тот же финт без инъекции PML4E, если найти виртуальный адрес, который мапит финальную PTE-страницу, но это пока не копал — слишком муторно с поиском маппинга в текущих реалиях обновлений ядер.

Собственно, почему никто раньше массово не юзал такой подход в паблик-сурсах? Скорее всего, из-за риска спалиться на модификации структур. Тем, кто пишет свой Kernel-драйвер или пилит приватный DMA-софт — информация к размышлению.

Кто-то уже пробовал реализовывать подобный маппинг в своих проектах или юзаете более консервативные методы трансляции? Отпишитесь, насколько сильно проседает производительность при "чистом" обходе против этого метода, если кто тестил под нагрузкой.
 
Назад
Сверху Снизу