Копирование памяти посредством DMA.

Тема в разделе "WASM.ZEN", создана пользователем Clerk, 20 дек 2008.

  1. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Никогда не программировал контроллер пдп, реально использовать его для копирования памяти ядра(есть режим память-память) ?
    Нужно ли запрещать прерывания на время передачи данных ?
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Clerk
    Современные реализации не поддерживают режим память-память. Все контроллеры dma имеют ограничения до 16мбайт
    Прерывания запрещать не нужно. Если конечно ты не копируешь сами прерывания.
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Pavia
    Окей. Жаль что не поддерживают. Обьясню подробнее. Я решил поигратсо с системными привилегиями(http://www.virustech.org/f/viewtopic.php?id=9). Первое что приходит на ум - установка поля IOPL в флажках потока, ядро это поле не сбрасывает при планировании и вызове сервисов. Последнее исполняетсо вызовом NtSetInformationProcess(ProcessUserModeIOPL), этот инфокласс какраз и требует системных привилегий(TCB). Этим открываетсо доступ юзермодному потоку к вводу-выводу и он может использовать инструкции in/out. Далее необходимо какимто способом создать лазейку в ядре(чтобы привилегии повысить, тоесть попасть в кернелмод незаметно для пз), для этого нужно чтото записать, не имеет значения что, главное чтоб можно было задать адрес, ну первая мысль - копирование. Ладно, если это не поддерживаетсо, то можно исполнить запись по произвольному адресу в ядре (данные не стольт важны пока) ?
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Clerk
    Могу предложить поиграться с APIC отоброжаешь физическое на виртуальный адресс. А дальше делаешь с ним что хочешь.
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Pavia
    Нее, доступ ведь тока к портам, нужно с посредством пдп делоть такое.
     
  6. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    А понял. Тут вижу два выхода использовать жесткий диск но он сразу пишет блоками 512. Второй способ использовать какое либо устроство через MSI = система прерываний построенная на сообщениях - позволяет записать 4байта нужной информации по нужному адрессу. =) Можно использовать котролер жесткого. Искуственно сгенерировать прерывания и он запишет нужные данные. Вся настройка идет через порты PCI.
    А адресс нужно знать какой. Только устройства пишут по физическим адрессам.
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Pavia
    Чудесно, можешь дать линк почитать поподробнее, захотел реализовать.
     
  8. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Clerk
    спецификация PCI
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ну лан, спасибо сам разберусь.)