Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> экзэ-извлечь ресурс из себя и запустить, Help! Нужно чтоб прога извлекла ресурс и 
:(
    Опции темы
SolodDemiurg
Дата 17.11.2002, 03:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 17.11.2002

Репутация: нет
Всего: нет



Help! Нужно чтоб прога извлекла ресурс из себя в память и запустила его как экзэшник

Здравствуйте! Я начинающий c++ программист и страшно нуждаюсь в помощи. Проблема:  
Моя программа содержит в себе бинарный экзэшник, хранящийся внутри как ресурс типа заданного мною типа.
Я хочу чтобы программа была в состоянии достать этот ресурс в память (примерно знаю, как– FindResource, … LockResource API функции)  и запустить как обычный экзэшник, причем не извлекая на диск, а прямо из памяти. Был бы очень благодарен если бы кто-нибудь мне помог либо, если это невозможно, объяснил, почему так.
Заранее благодарю,
[email protected]
[email protected]
PM MAIL   Вверх
Baa
Дата 17.11.2002, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Есть мысли как это сделать... насколько это реально надо проверять на собственном опыте... Вот например, те же эксплойты... если они могут выолнять свой код в памяти, значит и мы можем.
Берем область памяти, ставим на неё протект на выполнение (предварительно скопировав данные начиная с точки входа в исполняемый файл) и далее передаем из нашей программы управление на тот адрес в памяти.
з.ы. это токо моя теория, и насколько она верна - хз... надо пробовать


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Baa
Дата 17.11.2002, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Не.... не прокатит это... можно выполнить определенный код с явными адресами.
Целый экзешник не получится хотя бы потому, что возникнут проблемы с таблицами импорта (с адресами импортируемых функций)


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
SolodDemiurg
Дата 19.11.2002, 04:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 17.11.2002

Репутация: нет
Всего: нет



спасибо за ответ, но хотелось бы запустить
PM MAIL   Вверх
Baa
Дата 19.11.2002, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Создателям joiner'а тоже наерно хотелось... пиши свой загрузчик... а еще лучше свою ОСь, которая будет уметь так делать :)


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Fantasist
Дата 19.11.2002, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Ага, помниться я тоже хотел так делать.  :)
Только, как я понял, без редактирования ОС-и ничего не выйдет. Система предпологает (точнее она в этом уверена), что исполняемый модуль находиться на диске, и время от времени она к нему(файлу на диске) обращается. Даже написания собственного загрузчика будет недостадочно.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Vit
Дата 19.11.2002, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: нет
Всего: 207



Дополняя Fantasist - Win32 "считает" что файл находится на диске. Как известно, при необходимости дополнительной памяти ось временно выгружает определённые участки памяти в файл подкачки. Для исполняемого файла только  значения переменных идут в файл подкачки, если же система посчитала что надо временно высвободить память занимаемую кодом программы, ось не переносит его в Swap, а просто уничтожает из памяти, при необходимости ось опять считывает нужный кусок файла в память. Другими словами текст исполняемого файла на момент выполнения файла становится как-бы кусочком Swap файла... Именно поэтому например невовремя вынутый CD диск может быть причиной появления Blue Screen, а все инсталляторы делают процесс "Подготовки к инсталлированию" который заключается копированию самого инсталлятора на HD и запуск его с винта дабы не вылететь в тот момент когда пользователь сменит диск


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
HexoGenus
  Дата 19.11.2002, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Экс. модератор
Сообщений: 110
Регистрация: 28.8.2002
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Цитата(Fantasist @ 19.11.2002, 03:17)
Система предпологает (точнее она в этом уверена), что исполняемый модуль находиться на диске, и время от времени она к нему(файлу на диске) обращается. Даже написания собственного загрузчика будет недостадочно.

Хммммм... есть один вариант... но настолько некрасивый что боюсь меня за него здесь морально убъют....    ;-)
Предпосылки:
1. Экзешник из ресурса можно извлечь на диск и оттуда запустить...
2. Можно создать электронный диск т.е. диск который будет реально находится в оперативке а для ОС будет просто диском с определенной буковкой...
3. Диск в Windows можно спрятать если что то там в реестре поменять ...
(Может есть более гуманные способы прятать диски но я их не знаю)

Т.е. можно сделать так что виндовз будет все операции с EXE-файлом выполнять на виртуальном диске а его даже видно не будет...
Правда не знаю можно ли это сделать без перезагрузки компа...
Но если вы пишете прогу которая будет запускаться при включении компа то проблема эта для вас не существенна  :D
--------------------
Когда невозможно уже работать напряженнее, начни работать умнее.
PM MAIL WWW ICQ   Вверх
Baa
Дата 20.11.2002, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Ну прально, RAM-диск можно примонтировать, токо это не выход... насколько я понял нужно не это.


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0494 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.