![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| SolodDemiurg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 17.11.2002 Репутация: нет Всего: нет |
Help! Нужно чтоб прога извлекла ресурс из себя в память и запустила его как экзэшник
Здравствуйте! Я начинающий c++ программист и страшно нуждаюсь в помощи. Проблема: Моя программа содержит в себе бинарный экзэшник, хранящийся внутри как ресурс типа заданного мною типа. Я хочу чтобы программа была в состоянии достать этот ресурс в память (примерно знаю, как– FindResource, … LockResource API функции) и запустить как обычный экзэшник, причем не извлекая на диск, а прямо из памяти. Был бы очень благодарен если бы кто-нибудь мне помог либо, если это невозможно, объяснил, почему так. Заранее благодарю, [email protected] [email protected] |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Есть мысли как это сделать... насколько это реально надо проверять на собственном опыте... Вот например, те же эксплойты... если они могут выолнять свой код в памяти, значит и мы можем.
Берем область памяти, ставим на неё протект на выполнение (предварительно скопировав данные начиная с точки входа в исполняемый файл) и далее передаем из нашей программы управление на тот адрес в памяти. з.ы. это токо моя теория, и насколько она верна - хз... надо пробовать -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Не.... не прокатит это... можно выполнить определенный код с явными адресами.
Целый экзешник не получится хотя бы потому, что возникнут проблемы с таблицами импорта (с адресами импортируемых функций) -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| SolodDemiurg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 17.11.2002 Репутация: нет Всего: нет |
спасибо за ответ, но хотелось бы запустить
|
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Создателям joiner'а тоже наерно хотелось... пиши свой загрузчик... а еще лучше свою ОСь, которая будет уметь так делать
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Ага, помниться я тоже хотел так делать.
Только, как я понял, без редактирования ОС-и ничего не выйдет. Система предпологает (точнее она в этом уверена), что исполняемый модуль находиться на диске, и время от времени она к нему(файлу на диске) обращается. Даже написания собственного загрузчика будет недостадочно. -------------------- Волны гасят ветер... |
|||
|
||||
| Vit |
|
|||
![]() 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 |
|||
|
||||
| HexoGenus |
|
|||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Хммммм... есть один вариант... но настолько некрасивый что боюсь меня за него здесь морально убъют.... Предпосылки: 1. Экзешник из ресурса можно извлечь на диск и оттуда запустить... 2. Можно создать электронный диск т.е. диск который будет реально находится в оперативке а для ОС будет просто диском с определенной буковкой... 3. Диск в Windows можно спрятать если что то там в реестре поменять ... (Может есть более гуманные способы прятать диски но я их не знаю) Т.е. можно сделать так что виндовз будет все операции с EXE-файлом выполнять на виртуальном диске а его даже видно не будет... Правда не знаю можно ли это сделать без перезагрузки компа... Но если вы пишете прогу которая будет запускаться при включении компа то проблема эта для вас не существенна --------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Ну прально, RAM-диск можно примонтировать, токо это не выход... насколько я понял нужно не это.
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |