Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Как загрузить две копии одной библиотеки и еще кое что...

2 views
Skip to first unread message

Alexander V. Ivanov

unread,
Jun 16, 2005, 1:51:46 AM6/16/05
to
Hello, All!

Внезапно возникла передо мной проблема. Выглядит она примерно так,
есть модуль, скрипт енжина эдакая. В ней есть механизм подключения
динамических библиотек. Енжина не моя, я только ее вызываю. Оказалось,
что при вызове этой енжины в процессе интерпретации скрипта загружается
некая библиотека, которая тоже использует эту енжину, но из-за жестких
ее требований к версии(или еще к чему, бог ведает), загружает другую копию
(просто библиотеку енжины перименовали и прилинковали в таком виде).
Получается две разных версии енжины в адресном пространстве. Все бы
ничего, но механизм подключения библиотек енжиной включает себя установку
в загружаемой библиотеке таблицы обратных вызовов загрузившей енжины.
Эта таблица одна на загруженную библиотеку. Ей бы в контексте загрузки
находиться, но что выросло, то выросло... В результате при использовании
некой библиотеки обоими енжинами одна из них обваливается из-за того,
что в загруженной библиотеке чужая таблица обратных вызовов. :(

Условия таковы, что ни енжину, ни библиотеки подключаемые я трогать не
могу. Но могу влезть между ними. сейчас я библиотеке сую вместо таблицы
обратных вызовов просто память полученную с атрибутом PAGE_NOACCESS.
При обращении к ней ловлю исключение и подставляю адрес нужной таблицы.
Вроде как-то работает, но не совсем мне это нравится, в первую очередь
потому,
что этот оверхед на каждый чих будет происходить...

С другой стороны если бы я умел загружать в адресное пространство несколько
копий одного модуля, то все решалось бы элементарно. Для сетевых путей к
библиотекам это прокатывает. Т.е. при указании в LoadLibrary разных путей по
сути к одному файлу я получаю желаемый результат, но вот с локальными
файлами
никак. Сабституция(DefineDosDevice, SetVolumeMountPoint) не помогает. Кроме
прочего есть требование работоспособности не только в 2000, но и в NT. Пока
мне
видится только бесперспектиdный путь по самостоятельному выделению памяти,
считыванию туда модуля, проведение релокации, буде потребуется, ну короче
свой LoadLibrary :(

И еще вопрос, сейчас при обработке исключения я я смотрю, что за команда,
если call, то меняю адрес таблицы исходя из конкретного типа адресациии.
Хотя
это не позволит корректно обрабатывать все обращения к этой таблицы. Для
это нужно полностью разбирать команду. Вроде это не проблема, но вот понял
я, что пробел у меня в понимании нынешнего ассемблера, в частности префиксов
замены размера адреса и операндов, откуда узнавать значение бита D
дескриптора
сегмента. А под рукой как назло только справочник Юрова, года 2000. Может
кто
подскажет или ссылку даст, на описание архитектуры и системы команд более-
менее приличное хоть до уровня Pentium первого. А то поиском только магазины
выдаются в основном. Я заказал пару справочников посвежее, но когда еще
принесут...

With best regards, Alexander V. Ivanov. E-mail: aiv...@softlab.ru

Alexander V. Ivanov

unread,
Jun 16, 2005, 5:19:58 AM6/16/05
to
Hello, Alexander!
You wrote to All on Thu, 16 Jun 2005 05:51:46 +0000 (UTC):

[...]

AVI> никак. Сабституция(DefineDosDevice, SetVolumeMountPoint) не помогает.

Тут я не додумал... Сейчас приловчился шары временные навешивать. Но про
ассембдер все равно интересно, хоть и не так срочно теперь. Если кто
ответит,
спасибо...

Alexander Pevzner

unread,
Jun 16, 2005, 4:06:32 PM6/16/05
to
On 2005-06-16, Alexander V. Ivanov <aiv...@cocoon.ru> wrote:
> AVI> никак. Сабституция(DefineDosDevice, SetVolumeMountPoint) не помогает.
>
> Тут я не додумал... Сейчас приловчился шары временные навешивать. Но про
> ассембдер все равно интересно, хоть и не так срочно теперь. Если кто
> ответит,
> спасибо...

Насколько я помню, с Интеловского сайта всегда было возможно скачать
подрубные мануалы на их процессоры, в т.ч. и описания системы команд.

--

Wishes, Alexander Pevzner (p...@pzz.msk.ru)

Alexander V. Ivanov

unread,
Jun 17, 2005, 1:27:54 AM6/17/05
to
Hello, Alexander!
You wrote to Alexander V. Ivanov on Thu, 16 Jun 2005 20:06:32 +0000 (UTC):

[...]

AP> Насколько я помню, с Интеловского сайта всегда было возможно скачать
AP> подрубные мануалы на их процессоры, в т.ч. и описания системы команд.

И то верно, чего-то я даже не подумал... Спасибо.

0 new messages