Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.07.21;
Скачать: [xml.tar.bz2];

Вниз

CreateProcess в памяти   Найти похожие ветки 

 
Samael6   (2003-05-11 13:19) [0]

Здравствуйте, Мастера!
У меня такая проблема: нужно загрузить ЕХЕ-файл в память и там его выполнить . Причем приходится переписовать часть стандартного загрузчика, чтобы прога запускалась из памяти. С загрузкой ЕХЕшника проблем нет, а вот как его потом там выполнить незнаю. Поможите?


 
MBo   (2003-05-11 16:05) [1]

Забудь пока что


 
NightAngel   (2003-05-12 02:19) [2]

> Samael6 © (11.05.03 13:19)
А чем не устраивает CreateProcess()?

> нужно загрузить ЕХЕ-файл в память и там его выполнить.
Принципиальных ограничений здесь нет.
Программы в формате PE в памяти, НЕ СООТВЕСТВУЮТ своему образу на диске. Например, экзешник для DOS"а загружается в память КАК ЕСТЬ - то есть, если побайтно эмулировать его работу (не загружая его в память), то все смещения и переходы будут указывать в нужное место. Для PE файлов это не так. PE программа грузится в память вместе со всеми заголовками. Секции в файле на диске обычно выровнены на размер сектора, в памяти на размер страницы. Это нужно будет учесть при загрузке файла. В запускаемом файле должна присутствовать таблица фиксапов (секции .reloc или .fixup). Если нет - будут проблемы. Значение Image Base, то есть адрес по которому будет загружен PE файл, должно быть выравнено на границу 64 Кб (10000h).

Далее как запустить:
1. Считать файл в память выровнив заголовки и секции.
2. Перенастроить все VA адреса в программе (в соответствии с информацией в секциии .reloc или .fixup).
3. Загрузить все используемые библиотеки и настроить импорт.
4. Если есть Tls callback, то пройти по списку функций.
5. Передать управление программе по Entry point RVA - адрес, относительно Image Base по которому передается управление при запуске программы (предварительно настроив все регистры общего назначения).


 
Morfein   (2003-05-12 02:47) [3]

Ну таки программа - это не процедура! Просто так передать управление не выйдет хотя бы потому, что две программы по одному TSS работать не будут... а чтобы создать TSS, нужно добавить запись в GDT, а для этого надо привилегии нулевого кольца. Всё вышесказанное - ИМХО. Поправьте, если не прав...


 
Vit@ly   (2003-05-12 19:58) [4]

2 Samael6 © (11.05.03 13:19)
Поясни, что следует понимать под "загрузить ЕХЕ-файл в память и там его выполнить". Стартовать из твоей проги или что-то иное?


 
NightAngel   (2003-05-13 03:05) [5]

> Morfein © (12.05.03 02:47)
Ну таки программа - это не процедура! Просто так передать управление не выйдет хотя бы потому, что две программы по одному TSS работать не будут... а чтобы создать TSS, нужно добавить запись в GDT, а для этого надо привилегии нулевого кольца. Всё вышесказанное - ИМХО. Поправьте, если не прав...


Код любой Dll исполняется в контексте вызвавшего её процесса, а это тот-же PE файл (специфичный, конечно, но структура та-же).
А TSS (Task State Segment) - это всего лишь структура данных, которая определяет состояние (т.е. контекст) задачи. В ней хранится содержимое всех регистров общего назначения, сегментных и некоторых системных регистров а также некоторая дополнительная информация и используется для сохранения и восстановления состояния задачи (при переключении задач) и ничего более.


 
Samael6   (2003-05-13 10:24) [6]

Поясни, что следует понимать под "загрузить ЕХЕ-файл в память и там его выполнить". Стартовать из твоей проги или что-то иное?

Да, просто стартовать из своей проги, но не с диска! :)

Спасибо за разъяснения, а нет ли у кого-нибудь примеров практической реализации вопроса? Буду очень благодарен!
Заранее благодарен.



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.07.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
4-68106
_San_
2003-05-16 09:30
2003.07.21
Получить координаты мыши


14-67980
Карелин Артем
2003-07-07 11:48
2003.07.21
Буржуйский форум по дельфи. ХОРОШИЙ.


1-67884
DarkReign
2003-07-02 19:46
2003.07.21
Как отобразить перекрытую MDI форму?


3-67738
xShadow
2003-06-29 18:15
2003.07.21
TQuery получение имён полей...


14-68031
Devil
2003-06-26 15:56
2003.07.21
Инсталлятор BDE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский