|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Окт 27, 2004 16:58:56 В ресурсы своей проги я прошил чужой EXE файл. И в определенные моменты, мне нужно запускать его из памяти без сохранения на диск. Может у кого нибудь есть EXE лоадер в виде DLL ? Лоадер должен получать указатель на первый байт загруженного EXE, и запускать его из массива или переменной не сохраняя на диск. |
|
|
Дата: Окт 27, 2004 17:46:24 вот вроде что хотел.. 29a-7_full_edition\Binaries\yoda\INCONEX е-зин бери на h††p://vx.netlux.org/ --------------------------------------------------------- InConEx - executing PE files in the own process memory context -------------------------------------------------------------- by yoda This program tries to load a target PE image into some memory in its own memory context and execute it there. Only PE files can be executed that have RelocationInformation included. The ImportTable is initialized, the Relocation items are applyed to the image and at the end also the windows internal stuff is adjusted, i.e. fixing calling process module information (ImageBase, ImageSize, module path, command line, current directory). The built virtual module image is executed in an own thread, so the server gets back execution control after the client thread terminates. To avoid that the client applications will terminate the whole process on the end of its execution, we simply hook the ExitProcess API. Every process has to use this API to finish its execution, also if it's not visible in the ImportTable because it's called by stubs (MFC, VB, .NET, MSVCRT,...). InConEx basically supports 9x and NT based operation systems but it doesn't work on 9x as good as on NT. E.g. on 9x the DialogBoxParam calls fail :( |
|
|
Дата: Окт 27, 2004 17:56:20 На vx.netlux.org не нашел InConEx :((( Если он у тебя есть, пришли пожалйста на alx_ps@mail.ru |
|
|
Дата: Окт 27, 2004 18:00:58 Нашел InConEx сейчас буду смотреть.. Но там вроде PE загрузчик не в виде DLL |
|
|
Дата: Окт 27, 2004 18:24:01 Только не забудь что "пришитый" ехе надо грузить в память по нужному ему адресу, иначе потребуются релоки. И еще надо будет фиксить PEB, чтобы GetModuleHandle() возвращала нужный адрес, а не твой host. Ну и еще куча всего остального =) |
|
|
Дата: Окт 28, 2004 09:24:36 Посмотрел код лоадера InConEx, к сожалению он не подходит к моей задаче. Мне нужно запускать EXE из памяти, а не с диска. Вообще, я не понимаю смысла этого исходника, зачем так извратился товарисщ yoda? Хотел показать, что может написать аналог виндосовского загрузчика, который может запускать экзешники с диска? Так я тоже это умею, и мне только одна API функция понадобится - CreateProcess. Короче, не спасет InConEx отцов русской демократии... :( |
|
|
Дата: Окт 28, 2004 11:24:26 Приложил PE лоадер в виде DLL. К сожалению он запускает только EXE с релоками. Фиксит GetModuleHandle, ресурсы у EXE не теряет... Написан на PowerBASIC for Windows. Короче в примере запустите START.BAT и все поймете А мне надо запустить, VB экзешник в нем нет секции .rloc ! :( Если у кого-нибудь есть лоадер который может запускать экзешник без релоков,заверните его в DLL и выложите сюда пожалуйста, очень нужно... _1470862357__loader.zip |
|
|
Дата: Окт 28, 2004 11:37:33 Чтобы запустить .exe без релоков, он должен грузиться по iamgebase. Так что тебе наверное придется поменять imagebase у своего .exe(того, который будет "родителем") |
|
|
Дата: Окт 28, 2004 12:35:10 to ssx: Можно поменять iamgebase в уже откомпилированном EXE? Просто не каждый компилятор при сборке EXE позволяет указывать iamgebase |
|
|
Дата: Окт 28, 2004 13:30:15 · Поправил: bogrus alixПросто не каждый компилятор при сборке EXE позволяет указывать iamgebase А какой у тебя компилятор и линковщик? |
|
|
Дата: Окт 28, 2004 16:28:48 Компилятор VB6, линкер стандартный от MS Visual Studio 6 |
|
|
Дата: Окт 28, 2004 17:25:07 линкер от vs позволяет задать imagebase - /BASE |
|
|
Дата: Окт 28, 2004 17:51:00 Попробовал заменит BASE с 40000 на 10000 при старте проги получил GPF. Какой диапазон можно указывать в BASE? |
|
|
Дата: Окт 28, 2004 18:01:35 Из Рихтера: "Базовый адрес, но которому загружается приложение, определяется компоновщиком. Разные компоновщики выбирают и разные (no умолчанию) базовые адреса. Ком поновщик Visual С++ использует по умолчанию базовый адрес 0x00400000 — самый нижний в Windows 98, начиная с которого в ней допускается загрузка образа испол няемого файла. Указав параметр /BASE: адрес (в случае компоновщика от Microsoft), можно изменить базовый адрес, по которому будет загружаться приложение. При попытке загрузить исполняемый файл в Windows 98 по базовому адресу ниже 0x00400000 загрузчик переместит его на другой адрес. Это увеличит время загрузки приложения, но оно по крайней мере будет выполнено. Если Вы разрабатываете программы и для Windows 98, и для Windows 2000, сделайте так, чтобы приложение загружалось по базовому адресу не ниже 0x00400000." Смотри в отладчике, что не так |
|
|
Дата: Окт 28, 2004 19:20:27 ImageBase нельзя менять в экзешнике тк все обрящения к памяти идут не по относительным адресам, а по абсолютным (это в случае отсутствия релоков). Единственный выход - писать базонезависимый код. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.090 |