![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Exe как Dll [D7, WinXP]
s_ © (2007-04-05 09:15:00)Каким образом сделать в исполняемом файле (exe-файле)экспортируемые функции, как в dll. Если можно с примером. Заранее спасибо.
Leonid Troyanovsky (2007-04-06 22:22:00) [1]
> s_ (05.04.07 16:00) [22]
> Я же задал в полне понятный вопрос, взможно ли исполнять
> импортируемую функцию из exe-шки?
Импортируемую из exe функцию выполнить возможно.
Даже без вторжения в релокацию и даже из чужого exe,
если импортер, например, имеет окно в первичном потоке.
Но, в этом случае, нужна еще специальным образом
изготовленная длл.
--
Regards, LVT.
Сергей М. (2007-04-06 15:28:00) [2]
> DrPass © (06.04.07 15:25) [47]
> Такой фигней заниматься - это только в целях самобразования,
> и когда до чертиков свободного времени есть
Совершенно верно.
DrPass (2007-04-06 15:25:00) [3]
> Сергей М. © (06.04.07 13:19) [43]
> устроить принудительную релокацию при наличии RT и принудительную
> инициализацию - дело техники)
Если хорошо поковыряться в сети, можно даже примеры кода на Delphi найти - точно помню, встречал пару раз. Потому как лично я бы поленился "ручками" делать релокацию образа. Такой фигней заниматься - это только в целях самобразования, и когда до чертиков свободного времени есть...
Сергей М. (2007-04-06 14:00:00) [4]
> s_ (06.04.07 13:42) [44]
> Как же сделать, чтобы было и с релокацией, и с инициализацией
Так и сделать - реализовать соответствующие алгоритмы.
Предлагаешь бросить все и специально для тебя их реализовать ?)
Сергей М. (2007-04-06 13:57:00) [5]
> s_ (06.04.07 13:42) [44]
Я ж тебе говорю - тебе это не по силам)
Это ж не "батон на форму кинуть" - алгоритмы нетривиальные, требуют довольно глубоких знаний "поторохов" опер.системы и логики инициализации Делфи-приложений.
Так что, если ты завелся "нипадецки", начни с формулировки вопроса о релокации в форуме "WinAPI".
s_ (2007-04-06 13:42:00) [6]> Сергей М. © (06.04.07 12:59) [42]
Вы же писали, что ВОЗМОЖНО [24]. А теперь вы говорите
> без релокации и без инициализации подавляющее большинство подобных затей терпят фиаско.
Как же сделать, чтобы было и с релокацией, и с инициализацией.
Или Это все -таки невозможно.
А если невозможно, то чего Вы мне тут голову морочите.
Сказали бы, что для Exe-шки НЕВОЗМОЖНОи точка.
Сергей М. (2007-04-06 13:19:00) [7]Я вот тут репу почесал) и, пожалуй, поддержу SergGG © (06.04.07 10:00) [36] - было бы желание, а уж устроить принудительную релокацию при наличии RT и принудительную инициализацию - дело техники)
Сергей М. (2007-04-06 12:59:00) [8]
> Игорь Шевченко © (06.04.07 12:48) [41]
> Загрузчик не использует секцию relocation для не-dll
Тоже верно.
Так что главная засада остается главной засадой - без релокации и без инициализации подавляющее большинство подобных затей терпят фиаско.
Игорь Шевченко (2007-04-06 12:48:00) [9]Delphi тут не при чем. Загрузчик не использует секцию relocation для не-dll.
Сергей, ты об этом тоже знаешь :)
Сергей М. (2007-04-06 11:02:00) [10]
> DrPass © (06.04.07 10:44) [38]
Да, действительно, я был не прав - в D7 флаг IMAGE_FILE_RELOCS_STRIPPED по умолчанию не установлен, и соответственно RT по умолчанию генерируется.
Сергей М. (2007-04-06 10:54:00) [11]
> DrPass © (06.04.07 10:44) [38]
>
>
> Как раз он таки всегда ее генерирует.
Да что ты говоришь !?) А мужики-то и не знают))..
То-то я смотрю - по какому ImageBase ни загружай собранный в D7 exe-модуль, абсолютные адреса, сгенерированные линкером, всегда будут корректными))
DrPass (2007-04-06 10:44:00) [12]
> Сергей М. © (06.04.07 10:10) [37]
> Нельзя, к примеру, заставить дельфийский линкер генерировать
> таблицу релокаций для ехе-модулей
Как раз он таки всегда ее генерирует. Только в последних версиях BDS есть опция SETPEOPTFLAGS, с помощью которой можно запретить генерировать таблицу релокаций в исполняемом файле
Сергей М. (2007-04-06 10:10:00) [13]
> SergGG © (06.04.07 10:00) [36]
Все да не всё)
Нельзя, к примеру, заставить дельфийский линкер генерировать таблицу релокаций для ехе-модулей.
SergGG (2007-04-06 10:00:00) [14]По-моему в Delphi можно сделать всё!!!!
Главное - иметь желание.
Суслик (2007-04-06 09:16:00) [15]я помню интересовался этим вопросом года 2-3 назад. по результатам обсуждения Игорь Шевченко вынес вердикт - в дельфи этого сделать нельзя.
Германн (2007-04-05 23:46:00) [16]
> Leonid Troyanovsky © (05.04.07 23:01) [33]
>
...
>
> 2All: Хочется повториться: длл - это рудиментарная форма
> технологии клиент-сервер в условиях дефицита ресурсов.
>
> Не мучайте старушку, в конце-концов.
>
> --
> Regards, LVT.
>
Точно. Долой kernel32.dll и все другие! Даёшь дополнительные сотни метров свободного пространства в System32!
:)
Leonid Troyanovsky (2007-04-05 23:01:00) [17]
> Loginov Dmitry © (05.04.07 20:51) [32]
> качестве параметра адреса функции, находящейся в EXE (с
> точки зрения DLL такие функции являются
У длл не должно быть своей точки зрения, бо в чужой
монастырь со своим уставом не лезут.
2All: Хочется повториться: длл - это рудиментарная форма
технологии клиент-сервер в условиях дефицита ресурсов.
Не мучайте старушку, в конце-концов.
--
Regards, LVT.
Loginov Dmitry (2007-04-05 20:51:00) [18]В любом случае экспорт функций в ЕХЕшнике - это извращение. При работе DLL и EXE в одном адресном пространстве наиболее распространенный вариант использования функций EXE из DLL - это вызов экспортируемой функции из DLL с передачей в качестве параметра адреса функции, находящейся в EXE (с точки зрения DLL такие функции являются callback-функциями)
Loginov Dmitry (2007-04-05 20:46:00) [19]> Каким образом сделать в исполняемом файле (exe-файле)экспортируемые
> функции, как в dll. Если можно с примером. Заранее спасибо.
Точно также, как и при экспорте из DLL. В случае, если если библиотека загружена в адресное пространство того самого ЕХЕшника, то не нужно беспокоится о инициализации объектов и т.п. Раз ЕХЕ запущен, значит все данные инициализированы. Но совсем другое дело, если требуемые функции экспортируются каким-либо сторонним ЕХЕ. В таком случае используй СОМ.
Leonid Troyanovsky (2007-04-05 20:01:00) [20]
> s_ (05.04.07 16:27) [25]
> для чего сделали возможным ЭКСПОРТИРОВАТЬ функции в исполняемом
> (exe) файле????? :((((
Например, чтобы загруженная им библиотека, могла получить
доступ к этим функциям через GetProcAddress.
Только не спрашивай, зачем это надо.
--
Regards, LVT.