Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.14;
Скачать: CL | DM;

Вниз

Отличия EXE и DLL. LoadLibrary(EXE)   Найти похожие ветки 

 
GrayFace ©   (2005-06-15 00:42) [0]

Пытался загрузить EXE, как DLL. LoadLibrary, а дальше перейти на EntryPoint. Не получается. Возможно, дело в том, что я не передаю ей параметров. Релоки exe сохранены.
В связи с этим вопросы:
1) Чем отличается EXE от DLL, кроме назначения EntryPoint и нужды в релоках?
2) Возможно ли загрузить EXE указанным образом так, чтобы она работала, как обычно?
3) Если нельзя, то зачем Delphi пихает релоки, даже если в exe нет экспортируемых функций?


 
Digitman ©   (2005-06-15 08:53) [1]

1) и ЕХЕ и DLL являются РЕ-модулями, с этой т.з. различий в них нет : релоки, импорт, экспорт и пр. - неотъемлемые атрибуты любого РЕ-модуля.

2) в принципе возможно, но зачем ?

3) мало ли способов использовать код EXE-модуля, загруженного как библиотеки, кроме вызова эксп.ф-ций ! ... код-то - позиционно-зависимый, без он релокации работать не сможет


 
Digitman ©   (2005-06-15 09:18) [2]


> LoadLibrary, а дальше перейти на EntryPoint.


что значит "перейти" ? поясни ...


 
Игорь Шевченко ©   (2005-06-15 10:22) [3]


> 2) Возможно ли загрузить EXE указанным образом так, чтобы
> она работала, как обычно?


Нет.


 
GrayFace ©   (2005-06-16 01:58) [4]

Digitman ©   (15.06.05 9:18) [2]
что значит "перейти" ? поясни ...

Втупую посмотрел ее адрес в PE Explorer, прибавил к HModule и сделал jmp. Вроде бы не промахнулся - попал на начало какого-то метода.

Digitman ©   (15.06.05 8:53) [1]
2) в принципе возможно, но зачем ?

Ради интереса.

Игорь Шевченко ©   (15.06.05 10:22) [3]
Нет.

Поясните, plz.


 
Digitman ©   (2005-06-16 08:43) [5]


> Ради интереса.


Тогда "ради интереса" прокомментируй свое "как обычно" ..

Ибо под "как обычно" подразумевается создание из ЕХЕ отдельного процесса, а для этого LoadLibrary() никаким боком не подходит..


 
Игорь Шевченко ©   (2005-06-16 11:02) [6]

GrayFace ©   (16.06.05 01:58) [4]


> Поясните, plz.


Что именно ?


 
Суслик ©   (2005-06-16 11:57) [7]

Когда-то в молодости я страдал фигней: пытался в свой exe из другого своего же exe импортировать функции.

У меня ничего не вышло, т.к. судя по cpu для exe не делались релоки вызовов. Тогда ИШ сказал, что использовать exe таким образом невозможно.

ЗЫ. Оба exe были на delphi.


 
Digitman ©   (2005-06-16 12:40) [8]


> Суслик ©   (16.06.05 11:57) [7]


дело там даже не в релоках, а в том что инициализация не выполнена

В случае с DLL система в ходе исполнения LoadLibrary :
- находит pe-модуль,
- грузит его как положено в АП вызывающего процесса (с релоками, настройкой импорта и пр.),
- обнаруживает признак того что это библиотека, получает ее DllEntryPoint и автоматически вызывает п/программу, адрес которой взят из DllEntryPoint, с параметром DLL_PROCESS_ATTACH

В результате происходит ожидаемая программная иниц-ция внутренних переменных, структур и пр. и пр., если алгоритм DLL это предусматривает (в ре-модулях, использующих VCL, это происходит обязательно)

В случае же с EXE никаких DllEntryPoint нет (есть просто EntryPoint иного смыслового назначения, нежели DllEntryPoint), соответственно система в ходе LoadLibrary не вызывает автоматически никаких п/программ из загруженного модуля и, соответственно, нет той самой иниц-ции, которая с успехом выполнилась бы при обычном использовании модуля (т.е. CreateProcess)



Страницы: 1 вся ветка

Текущий архив: 2005.08.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
1-1122188478
tttyu
2005-07-24 11:01
2005.08.14
как получить текущую позицию ScrollBar а в Richedit?


1-1122122718
xroot
2005-07-23 16:45
2005.08.14
дебаггер


10-1099069229
AlexGof
2004-10-29 21:00
2005.08.14
DCOM как вызвать из 1С ?


1-1122021165
Profik
2005-07-22 12:32
2005.08.14
FastNet


4-1118750333
Константин_1558
2005-06-14 15:58
2005.08.14
Нужно открыть в проводнике диск CDRom а. Прошу помощи!