Собственно возникла проблема с осуществлением сабжа. Как я это делал - расширял последнюю секцию и переносил туда массив IMAGE_IMPORT_DESCRIPTOR[], добавлял к нему новую запись, дописывал IMAGE_THUNK_DATA, делал на них ссылки на имена длл и ф-ии, ну вобщем все как положенно - все утилиты типа dumpbin и PELord открывали это дело нормально и обнаруживали новую длл и ф-ию, но система не в какую не хочет замечать новую длл, загружает без проблем, но длл не подгружается... Еще одна странность, есть такая директория - IMAGE_DIRECTORY_ENTRY_IAT, в некоторых прогах она заполнена, в некоторых нет, доки о ее назначении ничего толком не сказать не могут, хотелось бы узнать ее роль во всем этом... Заранее спасибо за любую помощь. PS Простьба на RTFM не посылать тк уже от туда
"Об упаковщиках в последний раз часть 1" там вроде это обсуждалось. Вот только сегодня читал с большим удовольствием
sep спасибо, статья мне на многое открыла глаза, но проблемы все таки остались. Вот, например, во всех exe генерируемых vc7 есть такая директория - IAT, насколько я понимаю она содержит массивы OriginalFirstThunk и FirstThunk для каждой DLL, еще мне кажется, что она сделана лишь для ускорения линковки ехе и dll, тк, когда я затираю ее RVA и Size в массиве директорий, ехе нормально грузится... Но! Когда я просто переношу массив IMAGE_IMPORT_DESCRIPTOR и ставлю новую ссылку на него в массиве директорий, то прога вылетает с ошибкой инициализации... Причем эта же самая операция успешно проходит на кривых борландовских файлах, но без IAT.. Я уже незнаю что и думать
> Вот, например, во всех 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 и дело с концом!
kaspersky огромное спасибо за подсказку по поводу IAT и атрибутов RW Оказалось все просто - IAT подсказывет загрузчику у каких страниц менять менять атрибуты, но когда я затираю заголовок IAT - загрузчик ничего не меняет и, как результат, массивы FirstThunk доступны только на чтение... Для решения проблемы достаточно у секции содержашей FirstThunk-и поставить аттрибут Write.