· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› Добавление в раздел импорта

Посл.отвђт Сообщенiе


Дата: Сен 1, 2004 21:23:43

Собственно возникла проблема с осуществлением сабжа. Как я это делал - расширял последнюю секцию и переносил туда массив IMAGE_IMPORT_DESCRIPTOR[], добавлял к нему новую запись, дописывал IMAGE_THUNK_DATA, делал на них ссылки на имена длл и ф-ии, ну вобщем все как положенно - все утилиты типа dumpbin и PELord открывали это дело нормально и обнаруживали новую длл и ф-ию, но система не в какую не хочет замечать новую длл, загружает без проблем, но длл не подгружается... Еще одна странность, есть такая директория - IMAGE_DIRECTORY_ENTRY_IAT, в некоторых прогах она заполнена, в некоторых нет, доки о ее назначении ничего толком не сказать не могут, хотелось бы узнать ее роль во всем этом... Заранее спасибо за любую помощь.
PS Простьба на RTFM не посылать тк уже от туда ;)


Дата: Сен 2, 2004 17:26:50

"Об упаковщиках в последний раз часть 1" там вроде это обсуждалось. Вот только сегодня читал с большим удовольствием :)


Дата: Сен 3, 2004 13:45:54

sep
спасибо, статья мне на многое открыла глаза, но проблемы все таки остались. Вот, например, во всех exe генерируемых vc7 есть такая директория - IAT, насколько я понимаю она содержит массивы OriginalFirstThunk и FirstThunk для каждой DLL, еще мне кажется, что она сделана лишь для ускорения линковки ехе и dll, тк, когда я затираю ее RVA и Size в массиве директорий, ехе нормально грузится... Но! Когда я просто переношу массив IMAGE_IMPORT_DESCRIPTOR и ставлю новую ссылку на него в массиве директорий, то прога вылетает с ошибкой инициализации... Причем эта же самая операция успешно проходит на кривых борландовских файлах, но без IAT.. Я уже незнаю что и думать :(


Дата: Сен 4, 2004 05:33:01

> Вот, например, во всех exe генерируемых vc7
и ms vc 6 тоже

> есть такая директория - IAT
> насколько я понимаю она содержит массивы
> OriginalFirstThunk и FirstThunk для каждой DLL
она указывает на некий FirstThunk. какой? хз.

> еще мне кажется, что она сделана лишь для ускорения
> линковки ехе и dll
ну и как она ее ускоряет? ;-) предложи хоть один возможный механизм.
на самом деле изначальная идея была в следующем: все IAT'ы всех DLL'ей сводятся в одну непрерывную область памяти, расположенную в секции с атрибутам RO, загрузчик использует IMAGE_DIRECTORY_ENTRY_IAT для нахождения этой самой области и временного присвоения ей атрибута RW, после окончания загрузки вновь восстаналивает.
некоторые кретины (не бум показывать пальцем) используют IMAGE_DIRECTORY_ENTRY_IAT для быстрого нахождения эффективных адресов API-функций с целью поставить на них хук. в действительности же, IAT'ы не обязаны располагаться в непрерывной области, так что этот трюк не работает. более того IMAGE_DIRECTORY_ENTRY_IAT может быть равен и нулю, правда, тогда некоторые версии винды не восстнавят RO на IAT со всеми вытекающими отсюда...

> Когда я просто переношу массив IMAGE_IMPORT_DESCRIPTOR
> и ставлю новую ссылку на него в массиве директорий,
> то прога вылетает с ошибкой инициализации...
а пример вылетающего файла можно?
ну обнули IMAGE_DIRECTORY_ENTRY_IAT и дело с концом!


Дата: Сен 4, 2004 11:00:09

kaspersky огромное спасибо за подсказку по поводу IAT и атрибутов RW :) Оказалось все просто - IAT подсказывет загрузчику у каких страниц менять менять атрибуты, но когда я затираю заголовок IAT - загрузчик ничего не меняет и, как результат, массивы FirstThunk доступны только на чтение... Для решения проблемы достаточно у секции содержашей FirstThunk-и поставить аттрибут Write.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.049