Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Создание файла-контейнера
Micro Ice
сообщение 11.01.2008 - 23:29

Звезда форума
******
кубок за победу в конкурсах Форума
Группа: Участник
Сообщений: 1009
Регистрация: 26.04.2006
Пользователь №: 13250


Подскажите как написать программу для создания файлов-контейнеров. Суть программы в том что она считывает контент выбранного exe файла и генерирует другой exe, в котором данные первого будут храниться в виде текста. При запуске сгенерированного exe, контент из контейнера должен подгружаться в память и ему должен передаваться контроль.
Считывание и хранение - понятно, а вот как загрузить из контейнера напрямую в память и передать контроль, я разобраться не могу...
Желательно на С++

Сообщение отредактировано Micro Ice - 11.01.2008 - 23:29
Перейти в начало страницы
 
+Цитировать сообщение
Phoenix
сообщение 12.01.2008 - 13:10

void*
******
орден IV степени
Группа: Участник
Сообщений: 1631
Регистрация: 29.09.2003
Пользователь №: 45


ммм...
Простейший вариант - выгрузить хранимые данные на диск в виде .exe-файла, далее ::CreateProcess().
Перейти в начало страницы
 
+Цитировать сообщение
someone
сообщение 12.01.2008 - 13:45

Unknown
****
орден III степени
Группа: Модератор
Сообщений: 405
Регистрация: 29.09.2003
Пользователь №: 74


Ох и гемор ты себе придумал =)

Вообщем так:
1. Выделяем память с помощью VirtualAlloc такого размера как сам экзешник который будем запускать
2. Ставим с помощью VirtualProtect флажок PAGE_EXECUTE_READWRITE
3. Заливаем содержимое экзешника по адресу полученному VirtualAlloc
4. а дальше я наткнулся на вот такую статью:
правда на асме +)
]]>http://www.wasm.ru/article.php?article=memfile]]>

Альтернатива пункту 4:
4*. выдернуть таблицу релокаций, и ко всем ссылкам прибавлять адрес который вернул VirtualAlloc, только нужно учитывать что ссылки могут быть 16-бит, 32-бит, 48-бит.
5*. находим точку входа (WinMain наверно в твоём случае?) берём адрес и вызываем по нему

Удачи!
Перейти в начало страницы
 
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 27.04.2024 - 00:19