Как реализовать GetProcAddress?

Тема в разделе "WASM.WIN32", создана пользователем tazo, 25 окт 2004.

  1. tazo

    tazo New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    3
    Адрес:
    spb
    Нужно реализовать аналог GetProcAddress для kernel-mode. Почитал описание pe-формата, набросал код. Нахожу в памяти ntoskrnl.exe, далее в нем ищу PIMAGE_EXPORT_DIRECTORY, нахожу индекс функции по ее имени через AddressOfNames, нахожу ее RVA по индексу через AddressOfFunctions и полученный индекс. Для части функций получаю что-то не то (MyGetProc("Func") != Func). В чем грабли?
     
  2. MoKC0DeR

    MoKC0DeR New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2003
    Сообщения:
    136
    Адрес:
    Russia
    tazo

    Да в чем угодно! Как не видя код можно сказать в чем проблема ?!
     
  3. tazo

    tazo New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    3
    Адрес:
    spb
    Все, откопал. По индексу из таблицы имен нужно еще найти ординал функции, который уже является индексом адреса функции в таблице AddressOfFunctions. В pe.txt этот момент не очень понятно освящался :dntknw:
     
  4. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Начиная с 2000 есть MmGetSystemRoutineAddress, котороя сабж в ядре делает, но только для двух модулей: ntoskrnl и hal.
     
  5. tazo

    tazo New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    3
    Адрес:
    spb




    Самое забавное то, что на практике она не подходит. Часто требуется писать драйвер, совместимый начиная с NT4, где ее как раз и нету!!! Однако В w2k очень много вкусных изменений, которых нету в NT4. Если пишешь совместимый с NT4 драйвер, то их не используешь, что получается очень глупо: на подавляющем количестве случаев драйвер будет работать в w2k и выше... Посему рано или поздно приходишь к динамическому поиску адресов... Правда по началу начал было писать kal.sys (kernel abstraction layer, export driver), но понял что GetProc удобнее :)