Всем привет!
Возник вопрос:
как самостоятельно сгенерировать таблицу импорта в PE файле?
Пусть функции не будут использоваться, главное, чтобы числились в импорте, вместе с DLL'ками.
От Гугла толку мало.
В двух замечательных статьях есть информация об импорте:
1)
Статическое детектирование файлов: Часть 1
2)
От зеленого к красному
Но по генерации не всё понятно.
На следующих двух рисунках представлен разбор таблицы импорта простейших бинарников. Надеюсь, нигде не ошибся.

Рисунок 1

Рисунок 2
Проблема заключается в том, что не понятно, как считать RVA.
Например (см. рис. 2), первый DWORD (структура IMAGE_THUNK_DATA32) - это RVA до структуры IMAGE_IMPORT_BY_NAME (ф-ия GetTickCount).
Чтобы получить RVA, нужно знать, по какому смещению будет находится структура IMAGE_IMPORT_BY_NAME. Адрес начала секции известен.
Но разместить структуру IMAGE_IMPORT_BY_NAME можно лишь после IMAGE_THUNK_DATA32.
В итоге получается такая ерунда: чтобы узнать X, нужно знать Y, но, чтобы узнать Y, нужно узнать X.
Теоретически, можно вместо RVA в IMAGE_THUNK_DATA32 поставить метку, например, 0x41414141. А после размещения IMAGE_IMPORT_BY_NAME, заменить метку на реальный RVA. Но как тогда узнать, какая метка к какой структуре IMAGE_IMPORT_BY_NAME относится? Не говоря уже о других проблемах.
Походу, всё это ерунда и я вообще копаю не в ту сторону.
Подскажите,
как правильно генерировать таблицу импорта?
Благодарю.