|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Авг 8, 2004 11:30:08 Возможно ли ли сделать так, чтобы файл можно было запустить, а кроме того подгрузить как DLL в другой процесс? Если программу компилировать как DLL, то её не удается запустить, а если как EXE то при загрузке функцией LoadLibrary не обрабатываются релоки и не вызывается DllMain(он же WinMain). Может его загружать нужно как то хитро или в заголовке чего подправить? |
|
|
Дата: Авг 8, 2004 12:10:57 · Поправил: Toxic Если программу компилировать как DLL, то её не удается запустить А если через rundll32.exe? |
|
|
Дата: Авг 8, 2004 12:23:14 Toxic Не, через rundll не пойдет, прога должна сама себя внедрить в чужой процесс, только вот самому релоки настраивать или таскать с собой отдельную dll очень не хочется. |
|
|
Дата: Авг 8, 2004 12:41:55 Вроде можно. Эту тему когда-то обсуждали на reversing'е, но я как-то ее искал - не нашёл, наверно сгинула в старой базе времён артуриков. Может стоит задать вопрос здесь |
|
|
Дата: Авг 8, 2004 16:10:18 imho, достаточно установить флаг IMAGE_FILE_DLL в IMAGE_FILE_HEADER::Characteristics |
|
|
Дата: Авг 8, 2004 17:09:48 я как-то делал такие файлики, но сталкнулся с проблемой запаковки. файлы либо не паковались вообще, либо потом криво работали. (в непакованном виде всё было как надо) |
|
|
Дата: Авг 8, 2004 23:27:39 green IMAGE_FILE_DLL если этот флаг установлен то в w2k программу не запустить как exe. Corpse А можешь поделится таким файликом? |
|
|
Дата: Авг 9, 2004 00:35:30 mamaich ================================================================ "я в молодости проспорил бутылку коньяка как раз когда разбирался с возможностью ЕХЕ-файла быть одновременно и ЕХЕшкой, и DLL-кой. При этом у него оказывались две разные точки входа - одна когда он запускался как обычный ЕХЕ, а вторая вызывалась когда его грузили по LoadLibrary. Могу подробнее рассказать. ---------------------------------------------- короче там всё просто. Компиляешь прогу как обычный ЕХЕ (то есть у нее в РЕ-заголовке стоит флаг что она не является динамической библиотекой), но при этом оставляешь в ЕХЕшке релокейшены. Если ты ее запускаешь как просто ЕХЕ - вызывается та точка входа, которая прописана в заголовке как Entry Point (тобишь main/WinMain). Если ЕХЕшка грузится по LoadLibrary, то тут загрузчик мудрит. Он перебирает таблицу экспортов ЕХЕшки в поисках одной из процедур: DllMain _DllMain _DllMain@12 (эти стопудово ищатся) DllEntryPoint _DllEntryPoint _DllEntryPoint@12 (эти я не проверял) и если такая функция существует - то она вызывается с соответствующими параметрами. В этом случае функция находящаяся по Entry Point не вызывается вообще. Если таких экспортов нету - то вообще никакая функция не вызывается. Как пример такой ЕХЕшки, которая может быть загружена как ДЛЛ - смотри файл %windir%\system32\npp\nppagent.exe. Это я все написал про 2К, есть ли такое в 9х - хз." ================================================================ Вот ещё по теме: http://reng.ru/board/viewtopic.php?t=1109 Asterix, я в детстве марки собирал, а теперь грамотные посты :) Кстати, прикольно, этот пост mamaich'а как раз тому человеку и адресован. |
|
|
Дата: Авг 9, 2004 00:52:27 Four-F > Asterix, я в детстве марки собирал, а теперь грамотные посты :) Сохраню-ка и я этот топик себе, раз не сделал это тогда :-) Марки я не собирал, но вроде тоже запасливый всегда был, видимо просто тогда я не оценил практическую сторону применения этого метода ;-) |
|
|
Дата: Авг 9, 2004 01:29:55 · Поправил: Asterix Нихрена у меня не выходит, ни в мастдае, ни в 2k :-( Не грузится как DLL, хотя в экспорте есть DllMain и у файла есть релоки. |
|
|
Дата: Авг 9, 2004 09:02:26 Вернее exe'шка то по LoadLibrary грузится, но DllMain не вызывается. |
|
|
Дата: Авг 9, 2004 12:03:20 Вот, если кто-то хочет поэкспериментировать, исходники, может я что-то не правильно делал.. ? 197009582__dll_exe.rar |
|
|
Дата: Авг 9, 2004 12:20:46 Asterix Все у тебя правильно(потому что у меня точно так же ;) сделано, у меня тоже dllmain не вызывается. |
|
|
Дата: Авг 9, 2004 12:59:46 мне кажется, есть основания предполагать, что если модуль уже загружен, то при загрузке его в другой процесс лоадер просто мапит страницу памяти с хедером в адресное простр. нового процесса. Если это так, то можно устанавливать этот флаг (IMAGE_FILE_DLL) уже после загрузки exe. |
|
|
Дата: Авг 9, 2004 13:42:09 green В случае если какая-либо страница была изменена она окажется в swap'е. Так что устанавливая у себя флаг на чужой процесс мы никак не повлияем. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.055 |