Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2013, 19:53   #1
lollollollol
Форумчанин
 
Регистрация: 23.03.2013
Сообщений: 218
По умолчанию Запуск программы из памяти (array of byte)

Есть идея запускать приложение прямо в памяти. Т.е. получаю array of byte(массив - ехе файл), который нужно выполнить без сохранения на диск.

Находил такие темы:
http://www.delphisources.ru/forum/sh...ad.php?t=13425
http://www.programmersforum.ru/newthread.p...wthread&f=4
http://hpc.name/thread/31283/p1.html

Но это всё не то.


В идеале запустить ехе файл как отдельный поток на исполнение, или может быть заменить в памяти мой процесс нужным, помоги хотябы с теорией, ну и чуть-чуть практики, если не сложно
lollollollol вне форума Ответить с цитированием
Старый 12.05.2013, 21:30   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Когда-то думал о том что можно в CreateThread передать адрес на первый байт некоего массива. Соответственно массив станет как бы исполнимым кодом.
Не пробовал. К тому же уверен что для этого массива нужно будет давать привилегии на исполнение.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.05.2013, 22:24   #3
lollollollol
Форумчанин
 
Регистрация: 23.03.2013
Сообщений: 218
По умолчанию

Обычно передаётся указатель на первый байт процедуры, которая выполняется.
Т.е. получатся можно попытаться указать на точку входа? или я непонимаю чего-то
lollollollol вне форума Ответить с цитированием
Старый 12.05.2013, 23:17   #4
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Если запускать именно exe, то нужно распарсить заголовок exe файла, переместить все секции так, как указано в заголовке, загрузить библиотеки, уазанные в секции импорта и соответственно заполнить ее. Иными словами выполнить работу загрузчика винды.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 12.05.2013, 23:23   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Я точно механизм не знаю.
Я не развивал эту тему даже с академической точки зрения, но думаю помимо передачи точки входа ты столкнешься с морем проблем при самом исполнении кода.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2013, 07:25   #6
lollollollol
Форумчанин
 
Регистрация: 23.03.2013
Сообщений: 218
По умолчанию

А если вместо exe сделать dll, не проще ли будет?
lollollollol вне форума Ответить с цитированием
Старый 13.05.2013, 09:02   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от lollollollol Посмотреть сообщение
А если вместо exe сделать dll, не проще ли будет?
конечно будет проще, dll именно расчитано на динамическую загрузку.
создали процедуру Start в длл.
а в проге, загрузили длл, получили адрес процедуры Start, вызвали её.

многие же плагины именно длл-ками и являются.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.05.2013, 09:23   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

В винде нет разницы между EXE и DLL.
Все равно надо будет грузить весь файла, читать заголовок, распределять секции, грузить нужные DLL библиотеки и т.д.
waleri вне форума Ответить с цитированием
Старый 13.05.2013, 11:39   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
В винде нет разницы между EXE и DLL.
Все равно надо будет грузить весь файла, читать заголовок, распределять секции, грузить нужные DLL библиотеки и т.д.
в общем то да, только при компиляции длл, она готова для загрузки по умолчанию, и можно применить загрузчик винды.

с exe же сложнее.


хотя стоп, это если нет цели чтоб dll не оказалось на диске.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 13.05.2013 в 11:55.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.05.2013, 15:07   #10
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Процитирую себя http://www.programmersforum.ru/showp...33&postcount=5
(правда этот код уже засветился везде, где только можно, и, вероятно, его не любят антивирусы)
пыщь
JTG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Array Of Byte -> TStream KiL0z Общие вопросы Delphi 9 18.06.2011 20:17
unsigned char в array<Byte> Artemprodigy Visual C++ 0 23.03.2011 11:19
Байты из файла в array of Byte Cold_Night Помощь студентам 5 09.12.2009 15:46
convert(array of byte, real48) Ringess Общие вопросы Delphi 3 24.06.2009 13:03
Array of byte в файл Deight Общие вопросы Delphi 3 05.12.2008 19:10