Форум: "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