Declare и FreeLibrary, или еще раз о вызовах DLL

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Re: Declare и FreeLibrary, или еще раз о вызовах DLL

Сообщение 0xy » 17.03.2010 (Ср) 9:15

Twister писал(а):ЗЫ. Здесь и далее подразумевается, что все мной сказанное относится к линейке NT и только к ней.

Ну, это изначально было видно "по акценту" :)

LoadLibrary ковыряю потому, что в 98-й ковырять больше нечего. Хочу посмотреть, как она регистрирует загруженый модуль...

А интерес к вопросу действительно перерос в "чисто академический", ибо на практике мне оказалось достаточно загрузки dll из TEMP.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Declare и FreeLibrary, или еще раз о вызовах DLL

Сообщение jangle » 17.03.2010 (Ср) 14:09

Вот "чисто академический" пример вызова функций из "прошитой" Native DLL. Код на PB. Работает под любой ОС начиная с Win95 до Win7. C любыми правами юзера. Только Win32API функции. DLL может быть любая, cоответсвующая формату Portable Executable. Гарантированно в DLL передаются два сообщения DLL_PROCESS_ATTACH и DLL_PROCESS_DETACH. GetModuleHandle в DLL отрабатывается правильно. Ресурсы находятся.

Для удобства, все 3 функции лоадера вынесены в Loader.bas

LoadDllFromMemory - соответствует LoadLibrary
GetProcAddressDirectly - соответствует GetProcAddress
UnloadDllFromMemory - соответствует FreeLibrary

В пример прошита DLL архиватора ZLIB.DLL, при запусуке из внедренной DLL`ки вызываются функции и файл zlib_dll.bas архивируется.
Количество прошитых DLL неограниченно.

P.S. Так же можно прошивать слинкованные DLL`ки, когда одна неявно загружается другую. Код только надо немного изменить.
А вообще, это технология для воров. Тех кто хочет украсть чужие библиотеки и незаметно встроить их в свое приложение.
Вложения
zlib.zip
zlib
(81.79 Кб) Скачиваний: 58

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Declare и FreeLibrary, или еще раз о вызовах DLL

Сообщение Twister » 17.03.2010 (Ср) 16:50

jangle
Чем принципиально твой код отличается от того, что привел я? Никакой загрузки длл тут нет, есть копирование блока памяти из одного места в другое, парсинг релоков и импорта, а так же вызов некой функции внутри блока (вызов так называемой EntryPoint).

Гарантированно в DLL передаются два сообщения DLL_PROCESS_ATTACH и DLL_PROCESS_DETACH.
Ты сам это делаешь, о чем я уже не раз упоминал. От системы никаких уведомлений не будет.

GetModuleHandle в DLL отрабатывается правильно.
Опять же, я уже говорил - базу exe ты получишь без проблем. Базу же своей псевдо-загруженной длл нет!

Я никак не могу понять, что ты тут пытаешься доказать? Мало того, я вижу откровенное пренебрежение постами других пользователей, такое ощущение что ты либо не читаешь, либо не догоняешь.
1. Если ты не читаешь, тогда какого чёрта что-то пишешь тут?
2. Если не догоняешь, то какого чёрта споришь и что-то доказываешь, при этом не проявив ни малейшего желания разобраться?

Так или иначе, я выношу тебе устное предупреждение основываясь на двух вышеперечисленных пунктах и делая вывод о намеренном троллинге. Следующий шаг, как ты мог уже догадаться, будет бан - я не выношу больше одного предупреждения (MIT, привет ;) ). Рекомендую вкуривать во все здесь написанное до просветления.

Закрыто.
А я все практикую лечение травами...

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 70

    TopList