хай всем такой вопрос в pe формате, в секции импортов, каждой из импортируемых функций соответствует один hint, который ложится рядом с именем функции. в формате сказано, что это - предполагаемый номер этой функции в export таблице dll-ки, из которой эта функция импортируется. я скомпилил на студии 2005 простенький hello world, потом с помощью pe explorer-а посравнивал hint-ы, и номера соответствующих функций в системных dll (kernel32 и msvcr90). ни одного совпадения не обнаружил. вопрос - как такое может быть ? или я неправильно понял документацию по PE формату?
Формат PE написан двуяко... Так что не удивително что не поняли. Так предпологаемый и фактический?? П.С. Все будет зависить как будут грузится библиотеки. Так что от версии к версии что от может изменится. А побольшому случаю не пох*** а?
в спецификации написано что hint, это предполагаемый номер. загрузчик сравнивает название функции, которая лежит по предполагаемому номеру с именем функции, которую мы ищем, и если оно не совпало, то просматривает всю таблицу экспорта в поисках нужного имени. я глянул - эти хинты, по крайней мере у меня на visual studio 2008 + xp sp3, на 100% не верны (глядел по функциям которые в hello world-е консольном юзались).
интерестно ещё то, что хинт-ы в скомпиленных мною файлах, а также в exe-шниках из visual studio, для одних и тех же функций не совпадают. полный бред какойто :-/
вот мля, теперь всё ясно я смотрел файлы pe explorer-ом, а он неправильно показывает hint-ы, очищая старший байт слова в 0. посмотрел dependency walker-ом и всё стало на свои места
Хинт: разные версии системных dll имеют разное количество экспортируемых функций, а имена их обязательно отсортированы по алфавиту.
J0E То, что они отсортированы по алфавиту не имеет никаког значения, поскольку загрузчик ищет имена по массиву указателей. vladqq Что ясно? Совпадать стали с номером в экспорте? Меня терзают смутные сомнения... (с)