Динамическая библиотека в ядре?

Тема в разделе "WASM.NT.KERNEL", создана пользователем katrus, 9 май 2011.

  1. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Какие есть "цивильные" способы сделать позднее связывание (идеально, конечно, что то типа dll библиотеки) в ядре?
     
  2. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    я не буду спрашивать нафига =) кернелмодный лоадер вполне себе рекурсивный:
    (sysload.c) MiResolveImageReferences->MmLoadSystemImage
    то есть возможно и статический и динамический импорт. Но я никогда не пробовал так делать, возможно __declspec нормально обработается.
    Естественно драйвер-библиотека должен быть уже прописан в реестре.
     
  3. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    nt.ZwLoadDriver()
    ntdll.LdrGetProcedureAddress()
     
  4. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    2x64
    а статически не пробовали связывать? У лоадера все для этого есть.
     
  5. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Это всё понятно, но у автора речь про позднее связывание, т.е. если я правильно понял, таблица импорта отпадает, не?
     
  6. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    импорт в любом виде будет поздним связыванием, тк адреса функций в обоих случаях вычисляются на стадии выполнения. Ранее связывание это скорее статическая линковка.
     
  7. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Я извиняюсь, но метод линковки (dll linkage) и связывание (binding) это разные вещи, не надо смешивать. Линковка бывает статической (.lib-файл с кодом) или динамической (.lib-файл без кода или иной способ). Связывание бывает раннее (во время загрузки модуля, но до выполнения его кода) или позднее (после загрузки, во время выполнения). Ещё есть отложенное связывание (delay import), но это автору не нужно, как я понял, да и в ядре оно вроде бы нереализуемо полноценно (хотя тут могу ошибаться). Ну это я так, чтобы прояснить терминологию.
     
  8. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Извиняюсь, нужно было сразу сформулировать задачу. Допустим есть драйвер работающий под раными платформами (от XP до 7). Причем на Vista/Win7 он может использовать функции (например API от WFP) которые не существуют под XР. Идеально бы было вынести платформенно зависемый код в динамическую библиотеку, чтоб не компилировать отдельный драйвер под каждую плафрому.
     
  9. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    так вам уже все способы описали, пробуйте =)
     
  10. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Библиотеки ядерные точно также придётся собирать под разные платформы, в чём профит-то?