Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];

Вниз

Отличия 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.012 c
1-1122377695
Term
2005-07-26 15:34
2005.08.14
Как отобразить не главные окна своей программы в панели задач Win


1-1122368068
dddim
2005-07-26 12:54
2005.08.14
winexec


14-1122033554
Александр Иванов
2005-07-22 15:59
2005.08.14
"Искусство программирования" Кнута в "нормальном" формате


14-1121956424
lookin
2005-07-21 18:33
2005.08.14
Простуда и температура воздуха...


14-1121785921
Profi
2005-07-19 19:12
2005.08.14
Могу ли я использовать JVCL в Shareware?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский