У меня есть вопрос, связанный с вызовом функций в DLL-файле. Если я хорошо понимаю, в файле DLL мы можем определить множество различных функций, которые могут быть вызваны файлом .exe. Например, функции, которые могут быть вызваны из a.dll
Файл включает в себя следующие функции:
void fun1(int k);
int fun2(float value);
float fun3(double sig);
Для конкретной программы, например, a.exe
, это может только вызвать fun1
функция в a.dll
без использования других функций. Тогда мой вопрос, как я могу узнать, какие функции вызываются при запуске программы .exe.
Вы можете проверить таблицу символов исполняемого файла на наличие импортированных символов. Для окон (.exe
файлы) вы можете использовать DUMPBIN
утилита с /IMPORTS
как описано здесь.
ОбновитьКак упоминалось в комментариях, исполняемый файл может загружать библиотеки DLL и динамически обращаться к ним таким образом, чтобы не создавать символы во время компиляции. Например, позвонив GetProcAddress после загрузки DLL с помощью LoadLibrary. В этом случае не будет присутствовать символ и DUMPBIN
не будет перечислять это, но функция может или не может быть вызвана.
Если вы более или менее знаете, как работает исполняемый файл и он, кажется, не выполняет какие-то действия динамически (например, загружает код из библиотек подключаемых модулей), то можно с уверенностью предположить, что динамическая загрузка не происходит. Кроме того, если таблица символов exe показывает немного функций из данной DLL, маловероятно, что exe динамически обращается к функциям из той же DLL.
Кроме того, тот факт, что функция появляется в таблице символов, не гарантия что он будет вызван exe, но в любом нормальном, статическом случае это делает его вполне вероятным.
Ты можешь использовать Зависимость Уокер
«Dependency Walker — это бесплатная утилита, которая сканирует любой 32-битный или 64-битный модуль Windows (exe, dll, ocx, sys и т. Д.) И строит иерархическую древовидную диаграмму всех зависимых модулей. Для каждого найденного модуля она перечисляет все функции, которые экспортируются этим модулем, и какие из этих функций фактически вызываются другими модулями. В другом представлении отображается минимальный набор требуемых файлов вместе с подробной информацией о каждом файле, включая полный путь к файлу, базовый адрес, номера версий, тип машины, отладочная информация и многое другое. «