Если у вас есть исполняемый файл в Windows, вы можете просмотреть его раздел импорта с помощью утилиты DUMPBIN (включенной, например, в Visual Studio).
Чтобы получить список всех импортированных DLL, вы можете запустить что-то вроде этого (просто произвольный пример):
C:\Programme\GIMP-2.0\bin>dumpbin /IMPORTS gimp-2.4.exe | grep -i \.dll
libgimpcolor-2.0-0.dll
libgimpmath-2.0-0.dll
libgimpmodule-2.0-0.dll
libgimpthumb-2.0-0.dll
libgimpwidgets-2.0-0.dll
libart_lgpl_2-2.dll
libfontconfig-1.dll
freetype6.dll
libgdk-win32-2.0-0.dll
libgdk_pixbuf-2.0-0.dll
libglib-2.0-0.dll
libgobject-2.0-0.dll
libgthread-2.0-0.dll
libgtk-win32-2.0-0.dll
intl.dll
libpango-1.0-0.dll
libpangoft2-1.0-0.dll
libgimpbase-2.0-0.dll
libgimpconfig-2.0-0.dll
KERNEL32.dll
msvcrt.dll
msvcrt.dll
USER32.dll
У меня сейчас спекулировано в другом вопросе что, для независимых DLL Загрузчик (компоненткоторый отображает библиотеки DLL в адресное пространство и вызывает их функцию DllMain) загрузит библиотеки DLL в том порядке, в котором они появляются в разделе импорта.
Примечание : Очевидно, что это может применяться только кнезависимые библиотеки DLL, потому что загрузчик должен разрешать зависимости, поэтому любая библиотека DLL, которая зависит от любой другой, всегда будет загрузчиком после другой. Таким образом, этот вопрос может применяться только к независимым (не системным) DLL.
Чтобы остаться в моем (произвольно выбранном) примере выше,
C:\Programme\GIMP-2.0\bin>dumpbin /IMPORTS libgimpcolor-2.0-0.dll | grep -i \.dll
Dump of file libgimpcolor-2.0-0.dll
libglib-2.0-0.dll
libgobject-2.0-0.dll
msvcrt.dll
C:\Programme\GIMP-2.0\bin>dumpbin /IMPORTS libgimpmath-2.0-0.dll | grep -i \.dll
Dump of file libgimpmath-2.0-0.dll
libglib-2.0-0.dll
libgobject-2.0-0.dll
msvcrt.dll
C:\Programme\GIMP-2.0\bin>dumpbin /IMPORTS libgobject-2.0-0.dll | grep -i \.dll
Dump of file libgobject-2.0-0.dll
libglib-2.0-0.dll
KERNEL32.dll
msvcrt.dll
C:\Programme\GIMP-2.0\bin>dumpbin /IMPORTS libglib-2.0-0.dll | grep -i \.dll
Dump of file libglib-2.0-0.dll
iconv.dll
intl.dll
ADVAPI32.DLL
KERNEL32.dll
msvcrt.dll
msvcrt.dll
OLE32.dll
SHELL32.DLL
USER32.dll
WS2_32.DLL
libgimpmath
и libgimpcolor
являются независимыми DLL в этом смысле.Итак, вот вопрос: будет ли загрузчик всегда загружать libgimpcolor
до libgimpmath
, потому что он идет первым в разделе импорта?