Главная страница
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.044 c
4-1118668593
Толян
2005-06-13 17:16
2005.08.14
Запрос у пользователя имени и пароля


1-1122014723
Valera
2005-07-22 10:45
2005.08.14
Замена в Run-Time


14-1122266581
WondeRu
2005-07-25 08:43
2005.08.14
DELPHI DIAGRAM PORTFOLIO(*.ddp) -абсолютно бесполезная штуковина?


1-1122270265
Рафик
2005-07-25 09:44
2005.08.14
Debugger Fault Notification


10-1099318222
AlexGof
2004-11-01 17:10
2005.08.14
Надо DCOM регистрировать на всех клиентах ?