Я посмотрел таблицу экспорта определенной DLL, и я увидел некоторые странные записи в таблице, поэтому я попытался найти ответ на этот вопрос в спецификации pecoff и не нашел ни одного, и я надеюсь, что кто-то может иметь один.
Я запустил дампбин в определенной библиотеке DLL (Qt5Core.dll) и обнаружил, что в таблице экспорта есть записи, которые не функции — > есть записи, которые по своим адресам указывают на раздел .data и разделы .rdata …
например:
const QAbstractState :: `vftable ‘67366E0C 1470
QMetaObject const QEventTransition :: staticMetaObject 673C15A8 6160
QCoreApplication * QCoreApplication :: self 6746180C 5504
Кажется, что некоторые переменные c ++, и я задавался вопросом, почему они находятся в таблице экспорта?
Спасибо!
Экспорт записей не должен быть функцией.
Вы можете взглянуть на мою ветку stackoverflow: PE — Отличить данные от экспорта функций
Вывод был ясен, данные также можно экспортировать из PE-файла.
Не существует идеального способа отличить их друг от друга, но некоторые эвристические операции и операции времени выполнения могут помочь вам в этом вопросе.
Обратитесь к моему посту выше для получения дополнительной информации (также читайте комментарии).
NumberOfFunctions
Общее количество функций / символов, которые экспортируются этим модулем.
NumberOfNames
Количество функций / символов, которые экспортируются по имени. Это значение не является количеством ВСЕХ функций / символов в модуле. Для этого номера вам нужно проверить NumberOfFunctions. Это значение может быть 0. В этом случае модуль может экспортировать только по порядковому номеру. Если нет функции / символа для экспорта в первом случае, RVA таблицы экспорта в каталоге данных будет 0.
Исходя из вышеизложенного, мы заключаем, что в порядковой таблице указано только количество экспортов, которые действительно имеют имя.
Источник: http://win32assembly.programminghorizon.com/pe-tut7.html