· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Как реализовать GetProcAddress?

Посл.отвђт Сообщенiе


Дата: Окт 25, 2004 14:52:31

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


Дата: Окт 25, 2004 15:44:47

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


Дата: Окт 25, 2004 15:57:42

Все, откопал. По индексу из таблицы имен нужно еще найти ординал функции, который уже является индексом адреса функции в таблице AddressOfFunctions. В pe.txt этот момент не очень понятно освящался :(


Дата: Окт 25, 2004 16:56:25

Начиная с 2000 есть MmGetSystemRoutineAddress, котороя сабж в ядре делает, но только для двух модулей: ntoskrnl и hal.


Дата: Окт 25, 2004 17:20:53


Начиная с 2000 есть MmGetSystemRoutineAddress, котороя сабж в ядре делает, но только для двух модулей: ntoskrnl и hal.


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


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.064