Да, эта структура несколько сложна. Помимо исторических причин, он, вероятно, был оптимизирован для доступа к импортированным символам по порядковым номерам (а не по именам).
Если я правильно помню, AddressOfFunctions
- это RVA (указатель относительно базы изображения) на массив, содержащий RVA экспортируемых символов. Порядковый номер является индексом в этом массиве. Так что, если у вас есть, вы можете быстро идентифицировать символ.
OTOH, если у вас есть только имя символа, AddressOfNames
- это RVA для массива, содержащего указатели на имена символов строки ascii. Вы должны найти символ, а затем использовать найденный индекс в массиве, указанном AddressOfNameOrdinals
, это даст вам порядковый номер символа.