DLL Export Viewer: просмотр экспортируемых функций DLL-файлов

Когда программа выдаёт ошибку вида «точка входа в процедуру не найдена в библиотеке DLL», первое диагностическое действие — открыть проблемную библиотеку в DLL Export Viewer и проверить, присутствует ли в ней нужная функция. Эта небольшая портативная утилита от NirSoft показывает полный список экспортируемых функций любого DLL-файла: имена, адреса, ординалы и пути к модулям, без установки и лишних настроек.

Инструмент полезен разработчикам, системным администраторам и продвинутым пользователям: он помогает разобраться, какие функции предоставляет библиотека, почему приложение не находит нужный вызов и какая версия DLL реально загружена в системе. Ниже разберём, как пользоваться утилитой, какие есть альтернативы и как читать полученные данные.

Что такое экспорт функций в DLL

Динамическая библиотека (DLL — Dynamic Link Library) содержит код и данные, которые могут использовать сразу несколько программ. Чтобы внешнее приложение могло вызвать функцию из библиотеки, эта функция должна быть явно объявлена в таблице экспорта — специальном разделе PE-файла. Именно эту таблицу и считывают программы-анализаторы.

Каждая запись таблицы экспорта содержит имя функции (или только её ординал — порядковый номер), относительный виртуальный адрес (RVA) и иногда форвардинг — перенаправление вызова в другую библиотеку. Например, многие функции kernel32.dll в современных версиях Windows фактически перенаправлены в kernelbase.dll.

  • 🔍 Имя функции — символьный идентификатор, по которому её ищет загрузчик.
  • 🔢 Ординал — числовой индекс функции, позволяет импортировать без имени.
  • 📍 RVA-адрес — смещение кода функции внутри файла.
  • ↪️ Forwarder — указание, что вызов переадресуется в другую DLL.

Как пользоваться DLL Export Viewer от NirSoft

Утилита распространяется бесплатно и не требует установки — достаточно скачать архив с официального сайта NirSoft и распаковать его. Запускается файл dllexp.exe, работает как в 32-битных, так и в 64-битных системах; для анализа 64-битных библиотек предусмотрена отдельная версия dllexp-x64.exe.

После запуска программа предложит выбрать режим сканирования: открыть один конкретный файл, просканировать все загруженные в систему модули или найти конкретную функцию во всех DLL указанной папки. Для точечной проверки выберите первый вариант и укажите путь к нужной библиотеке через диалог открытия файла.

☑️ Проверка DLL перед анализом

Выполнено: 0 / 4

Результат отображается в виде таблицы: имя функции, адрес, ординал и имя файла. Двойной клик по строке открывает окно свойств с полной информацией. Список можно сохранить в текстовый файл, CSV или HTML через меню File → Save Selected Items — это удобно для сравнения версий библиотеки.

📊 Для какой задачи вам нужен просмотр экспорта DLL?
Диагностика ошибки «точка входа не найдена»
Разработка и отладка собственных библиотек
Анализ чужого или неизвестного файла
Сравнение версий одной DLL

Чтение результатов: на что смотреть

Главная колонка — Function Name. Если функция, которую требует приложение, отсутствует в списке, значит, загружена не та версия библиотеки. Типичный сценарий: программа собрана под новую версию DLL, а в системе лежит старая, где нужной процедуры ещё не было. Именно так и возникает ошибка «The procedure entry point could not be located».

Обратите внимание на записи вида NTDLL.RtlAllocateHeap в колонке имени — это форвардинг: вызов перенаправляется в другую библиотеку, и искать реализацию функции нужно уже там. Пустое имя при наличии ординала означает, что функция экспортируется только по номеру — так иногда делают намеренно, чтобы затруднить анализ.

⚠️ Внимание: наличие функции в таблице экспорта не гарантирует её корректную работу. У функции могла измениться сигнатура (набор параметров) между версиями — внешне имя совпадает, но вызов приводит к сбою. Сверяйте не только имена, но и версию файла в его свойствах.

Альтернативные инструменты для анализа DLL

DLL Export Viewer — не единственный способ посмотреть таблицу экспорта. В зависимости от задачи удобнее могут оказаться другие средства, от консольных утилит Microsoft до полноценных PE-анализаторов.

ИнструментТипВозможностиКому подходит
DLL Export ViewerGUI, портативныйЭкспорт функций, поиск по всем DLL, сохранение отчётовБыстрая диагностика
Dependency WalkerGUIЭкспорт и импорт, дерево зависимостейАнализ связей библиотек
dumpbinКонсольЭкспорт, импорт, заголовки PEРазработчики с Visual Studio
CFF ExplorerGUI, PE-редакторПолный разбор структуры PE-файлаГлубокий анализ

Утилита dumpbin входит в состав Visual Studio и запускается из командной строки разработчика. Чтобы вывести список экспортируемых функций, выполните:

dumpbin /exports C:\Windows\System32\user32.dll

Результат можно перенаправить в файл для дальнейшего поиска: dumpbin /exports user32.dll > exports.txt. Этот способ не требует сторонних программ, но нуждается в установленных инструментах сборки.

Типовые сценарии использования

Самая частая задача — диагностика конфликта версий. Приложение падает при запуске, а в журнале событий фигурирует конкретная DLL. Откройте её в просмотрщике, найдите функцию из текста ошибки и сравните версию файла с той, что ожидает программа. Часто выясняется, что в папке приложения лежит устаревшая копия системной библиотеки, которая загружается вместо актуальной из System32.

Вторая ситуация — разработка. Перед вызовом функции через GetProcAddress нужно убедиться, что она вообще экспортируется, и узнать её точное имя: компиляторы C++ могут искажать имена (name mangling), добавляя к ним служебные символы. В списке экспорта видно реальное имя, которое нужно передавать загрузчику.

Третий сценарий — первичный анализ неизвестного файла. Список экспортируемых функций даёт представление о назначении библиотеки: сетевые вызовы, работа с файлами, криптография. Это лишь поверхностный признак, но он помогает решить, стоит ли углубляться в анализ.

⚠️ Внимание: скачивайте инструменты анализа только с официальных сайтов разработчиков. Под видом популярных утилит вроде просмотрщиков DLL на сторонних ресурсах нередко распространяются вредоносные сборки. Перед запуском проверьте цифровую подпись файла и его репутацию через сервисы проверки файлов.

Почему некоторые функции отображаются без имён

Разработчик библиотеки может экспортировать функцию только по ординалу, указав в .def-файле ключевое слово NONAME. Такой вызов возможен только по номеру через GetProcAddress с целочисленным аргументом. Это осознанное решение — для уменьшения размера таблицы или затруднения реверс-инжиниринга.

Ограничения метода

Просмотр таблицы экспорта показывает лишь «оглавление» библиотеки, но не её содержимое. По имени функции нельзя узнать её параметры, тип возвращаемого значения и логику работы — для этого нужна документация, заголовочные файлы или дизассемблирование. Не пытайтесь вызывать неизвестные функции «вслепую»: некорректные параметры могут привести к падению процесса или повреждению данных.

Также учитывайте, что часть функциональности библиотеки может быть вообще не экспортирована и использоваться только внутри неё. Отсутствие функции в списке не означает, что соответствующего кода в файле нет.

FAQ: частые вопросы

Чем отличается экспорт от импорта функций?

Экспорт — это функции, которые библиотека предоставляет другим модулям. Импорт — наоборот, список функций, которые сам файл вызывает из чужих DLL. Полную картину даёт просмотр обеих таблиц, например в Dependency Walker или CFF Explorer.

Почему DLL Export Viewer не открывает файл?

Возможные причины: файл не является PE-модулем, повреждён, упакован протектором или имеет другую разрядность, чем запущенная версия утилиты. Попробуйте x64-сборку программы для 64-битных библиотек и проверьте целостность файла.

Можно ли посмотреть экспорт DLL без сторонних программ?

Да, если установлена Visual Studio или её Build Tools — используйте команду dumpbin /exports имя_файла.dll в командной строке разработчика. Встроенных средств просмотра таблицы экспорта в самой Windows нет.

Что означает запись вида «NTDLL.RtlCopyMemory» в списке функций?

Это форвардинг: функция объявлена в текущей библиотеке, но её реализация находится в другой DLL, куда загрузчик автоматически перенаправит вызов. Такой механизм широко используется в системных библиотеках Windows.

Безопасно ли открывать подозрительные DLL в просмотрщике?

Само чтение таблицы экспорта не исполняет код библиотеки, поэтому пассивный просмотр безопасен. Опасность представляет загрузка DLL в процесс или запуск её функций — этого в аналитических инструментах не происходит. Тем не менее анализ вредоносных файлов лучше проводить в изолированной среде.