Сейчас на форуме: zds, UniSoft (+6 невидимых)

 eXeL@B —› Программирование —› не запускается загруженый pe - образ
Посл.ответ Сообщение

Ранг: 5.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 25 октября 2012 17:27
· Личное сообщение · #1

В общем написал загрузчик PE-образов, вроде работает как положено .
Hо есть одна проблема , почему-то генериться исключение при запуске образа в котором отсутствует таблица релокаций.
Прочел в некоторых статьях что якобы в таких случаях могут пересикаться области памяти обоих файлов(загрузчика и образа ) что впоследствии и приводит к крашу,
решил поменять базовый адрес загрузки, но все напрастно. Загрузка файла производится как положено, но стоит вызвать область куда был загружен
файл как генериться исключение.

Собственно вопрос, как исправить данную ситуацию ?

P.S. Исходник загрузчика, в прикрепленном файле.


7176_25.10.2012_EXELAB.rU.tgz - aa.txt



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 25 октября 2012 18:16
· Личное сообщение · #2

во-первых вы для всех секций память выделяете PAGE_READWRITE, без execute
во-вторых лучше сначала себя куда-нибудь переносить, чтоб не мешать загрузке модуля без релоков
в-третих хватит изобретать велосипед - MapViewOfFile с указанием что это image, размапит весь образ как надо



Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 25 октября 2012 18:16
· Личное сообщение · #3

1 - Запускать EXE нужно только по базе, даже если есть таблица релокаций (исключение - если есть флаг IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE)
2 - Если запускать образ в памяти выделенной виртуалаллоком, не работают исключения.
3 - Регистрация в PEB. Без нее не работают ресурсы и много что еще.
Это из крупных косяков. Мелочи даже не считал.

-----
PGP key <0x1B6A24550F33E44A>





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 25 октября 2012 18:36
· Личное сообщение · #4

acapor пишет: пересикаться
ммм. с вирусней и протами - в другие форумы, имхо

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 25 октября 2012 18:40
· Личное сообщение · #5

ajax
Да мало ли, может чел что-то мирное пишет. Мне вот приходилось писать подобные вещи чтобы запускать PE файлы не в винде.

-----
PGP key <0x1B6A24550F33E44A>




Ранг: 5.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 25 октября 2012 18:48
· Личное сообщение · #6

протектор пишу



Ранг: 5.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 26 октября 2012 21:02
· Личное сообщение · #7

проблема решена !
Загвоздка была в освобождении памяти, после перенесения базы.
Hеобходимо освободить память(MEM_DECOMMIT) а не снимать резервирование с указанного региона(MEM_RELEASE).




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 26 октября 2012 22:01
· Личное сообщение · #8

Вообще-то DECOMMIT и RELEASE перепутаны местами. Что-то мне подсказывает, что в процессе решения архитектура пополнилась не просто парой костылей, а парой полноценных инвалидных колясок. Ну решена и ладно, тогда закрою.
З.Ы. А вообще по протекторам-это не на этот форум.


 eXeL@B —› Программирование —› не запускается загруженый pe - образ
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати