Binary digit! Если взять base из IMAGE_EXPORT и оно к примеру было равным 10! тогда если в первом элементе массива AddressOfOrinal(т.е. куда эту указывает) будет порядковым номером элемента, в котором хранится rva нужной функции. И если это будет 5, а base у нас 10. то это будет 15й dword. Но что в начале 14 dword`ов в пустую?
А самому - лень посмотреть? Берём длл с ненулевым base (например comctl32), находим таблицу ординалов, смотрим на первый элемент (это и есть индекс - смотри PE документацию), который будет где-то =0, теперь по адресу AdressTableRVA+Index*4 выбираем адрес функции.Проверяем например в hiew', что всё верно. Другое дело в программе нам следует использовать для импорта по ординалу - Index+base.
спасибо за ответ, все что ниже это лишь для проверки мыслей: Мне недоконца ясны действия PE-загрузчика при линковке dll. Он смотрит на IMAGE_EXPORT_DIRECTORY адрес на которую указан в первом элемете из 16 в таблице директорий. В этой деректории он берет AddressOfNames и начинает искать нужную функ- цию по всем адресам указанным в этом массиве как только он находит он запоминает какой по счету этот элемент и обрщается к массиву на который указывает AddressOfOrdinals допустим было 5, тогда он обращается к 5му элементу берет от туда значение и прибавляет Base и что получилось указы- вает на нужный адрес в массиве AddressOfFunction. Все ли я правильно понял?
EvilsInterrupt Почти: >берет от туда значение и прибавляет Base Нет, прибавлять не надо - ординалы уже скорректированны.
Вот что написал старший товарищ: нет. номер 10 - это не порядковый. там он как-то по другому ищет т.е. функция с номером 10 может быть где угодно в списке адресов Вот откуда не допонимание.