关键是每个Windows模块(包括可执行文件和库)都包含一个导入表,它列出了它依赖的所有其他模块。此表由链接器构建,内部由操作系统用于确定模块的依赖关系并加载相应的库。
所以Dependency Walker必须做的就是递归所有这些模块(比喻,“走过”),构建各自导入表中指定的模块列表。
它不显示所有运行时依赖项(例如那些使用GetProcAddress
函数加载的依赖项),因为它们未在导入表中列出。它仅显示加载时(或静态)依赖关系。
您可以找到有关Dependency Walker如何工作的更多信息here和here。