|
|
| Посл.отвђт | Сообщен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 |