win32 pe - почему import hint-ы не совпадают с export index-ами?

Тема в разделе "WASM.WIN32", создана пользователем vladqq, 4 янв 2010.

  1. vladqq

    vladqq New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2009
    Сообщения:
    69
    хай всем

    такой вопрос
    в pe формате, в секции импортов, каждой из импортируемых функций соответствует один hint, который ложится рядом с именем функции. в формате сказано, что это - предполагаемый номер этой функции в export таблице dll-ки, из которой эта функция импортируется. я скомпилил на студии 2005 простенький hello world, потом с помощью pe explorer-а посравнивал hint-ы, и номера соответствующих функций в системных dll (kernel32 и msvcr90). ни одного совпадения не обнаружил. вопрос - как такое может быть ? или я неправильно понял документацию по PE формату?
     
  2. Ox8BFF55

    Ox8BFF55 New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2009
    Сообщения:
    181
    Формат PE написан двуяко... Так что не удивително что не поняли.

    Так предпологаемый и фактический??

    П.С. Все будет зависить как будут грузится библиотеки. Так что от версии к версии что от может изменится. А побольшому случаю не пох*** а?
     
  3. vladqq

    vladqq New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2009
    Сообщения:
    69
    в спецификации написано что hint, это предполагаемый номер. загрузчик сравнивает название функции, которая лежит по предполагаемому номеру с именем функции, которую мы ищем, и если оно не совпало, то просматривает всю таблицу экспорта в поисках нужного имени. я глянул - эти хинты, по крайней мере у меня на visual studio 2008 + xp sp3, на 100% не верны (глядел по функциям которые в hello world-е консольном юзались).
     
  4. vladqq

    vladqq New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2009
    Сообщения:
    69
    интерестно ещё то, что хинт-ы в скомпиленных мною файлах, а также в exe-шниках из visual studio, для одних и тех же функций не совпадают. полный бред какойто :-/
     
  5. vladqq

    vladqq New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2009
    Сообщения:
    69
    вот мля, теперь всё ясно :) я смотрел файлы pe explorer-ом, а он неправильно показывает hint-ы, очищая старший байт слова в 0. посмотрел dependency walker-ом и всё стало на свои места :)
     
  6. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    Хинт: разные версии системных dll имеют разное количество экспортируемых функций, а имена их обязательно отсортированы по алфавиту.
     
  7. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    J0E
    То, что они отсортированы по алфавиту не имеет никаког значения, поскольку загрузчик ищет имена по массиву указателей.
    vladqq Что ясно? Совпадать стали с номером в экспорте? Меня терзают смутные сомнения... (с)
     
  8. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    Этот массив везде одинаковый что ли?