gpt4 book ai didi

windows - NT DLL Loader 是否按照可执行文件导入部分的顺序加载 DLL?

转载 作者:可可西里 更新时间:2023-11-01 11:14:25 24 4
gpt4 key购买 nike

如果您在 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

我现在有 speculated in another question 对于独立的 DLL,加载程序(将 DLL 映射到地址空间并调用其 DllMain 函数的组件)将按照 DLL 在导入部分中出现的顺序加载 DLL。

注意:这显然只能应用于独立的 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

libgimpmathlibgimpcolor 在这个意义上是独立的 DLL。所以这里的问题是:Loader 是否总是在 libgimpmath 之前加载 libgimpcolor 因为它首先出现在导入部分?

最佳答案

对于独立的DLL,加载顺序确实和IAT的顺序一样。

From Michael Grier's MSDN Blog

The implementation is linear/sequential. Therefore even the order of the imports in your static import tables matters. [...] If the linker for some reason reverses the order of the static imports, you'll see the opposite.

关于windows - NT DLL Loader 是否按照可执行文件导入部分的顺序加载 DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6382560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com