使用 Dependency Walker 分析 x86 可执行文件在 Windows 7 x64 上挂起
Posted
技术标签:
【中文标题】使用 Dependency Walker 分析 x86 可执行文件在 Windows 7 x64 上挂起【英文标题】:Profiling x86 executable with Dependency Walker hangs on Windows 7 x64 【发布时间】:2012-02-08 14:46:21 【问题描述】:在 Windows 7 x64 下,当我尝试使用最新版本的 Dependency Walker (2.2.6000) 分析 x86 可执行文件时,分析过程总是会挂起观点。大多数情况下,最后加载的 DLL 是c:\windows\syswow64\URLMON.DLL
,因此该 DLL 中的某些东西似乎导致了问题。在 Windows 7 x86 上分析相同的可执行文件可以完美运行。
我用谷歌搜索了很多,但无法找到解决问题的方法。我发现的一个建议是卸载 IE 8 或 IE 9 并将其替换为 IE 7,但这并没有真正的帮助。我能观察到的唯一影响是,在 IE 7 中,分析过程挂在不同的 DLL 上(iertutil.dll
,如果我没记错的话,也来自系统的syswow64
文件夹)。
所以我的问题是:如何让 Dependency Walker 在 x64 Windows 7 上分析 x86 应用程序?当然,如果一开始就知道问题存在的原因也很好:-)
一些最后的笔记:
我正在使用 x86 版本的 Dependency Walker,因为我想分析 x86 可执行文件 以管理员身份运行 Dependency Walker 没有帮助 所有标记为“可能在 WOW64 上失败”的分析选项均已禁用 我目前用作重现问题的测试用例的可执行文件是 Sumatra PDF 查看器 (download link),因为它是一个简单的 .exe,不需要安装【问题讨论】:
当我尝试分析 Excel 时遇到同样的问题,取决于占用 100% 的 CPU 负载。我在 Windows 8.1 x64 分析 Excel 2013 x86。我尝试了 dependencywalker.com 和 WDK 8.1 的依赖 walker 2.2 【参考方案1】:根据@Stone Free 的 cmets 更新说明
您需要的下载链接已更改为:
https://www.microsoft.com/en-us/download/details.aspx?id=42273
转到2。安装 WDK 10 部分并选择下载:
从第 2 阶段找到并运行 Wdk 安装程序 (wdksetup.exe),然后选择下载选项而不是安装。
一旦完成定位并运行DownloadLocation\Windows Kits\10\WDK\Installers>“Windows Driver Kit-x86_en-us.msi”
然后您将在以下位置找到 Dependency Walker:
C:\Program Files (x86)\Windows Kits\10\Tools\x64\depends.exe 用于 64 位版本 32 位版本的C:\Program Files (x86)\Windows Kits\10\Tools\x86\depends.exe2015-10-29 构建的 Dependency Walker 版本 2.2.10011
一个方便的工具是使用https://github.com/juntalis/depends-launcher,它是一个简单的Dependency Walker 启动器,它可以确定Windows 映像(dll、exe 等)的平台(x86|x64|ia64)并启动适当版本的dependency。 exe查看其依赖关系。它的主要目的是在上下文菜单条目中使用,以便轻松查看图像的依赖项。
【讨论】:
我想知道为什么开发者不更新自己的网站。如果不是这条评论和一些谷歌搜索,我想我不会得到新版本。 截至 2016 年 10 月 26 日,上述程序不安装depends.exe; Tools\x64 和 Tools\x86 已创建,但它们都不包含depends.exe :-( 因此,由于 WDK 10 不包含依赖漫游器,我下载了 WDK 8.1 更新(适用于 Windows 8.1、8 和 7 驱动程序),您将在下面找到Sam 给出的相同 URL。这个确实包括depends.exe(9600版),至少对我来说,修复了OP报告的挂起问题。顺便说一句,您可以从 www.dependencywalker.com 下载的版本是古老的(版本 6000)。 你仍然可以在这里download.microsoft.com/download/C/E/1/…使用depends.exe 获得WDK 10.0.10586@ 呃 - @Ringo 提供的链接安装并没有为我安装 Dependency Walker(截至 2018 年 4 月)。【参考方案2】:目前已知的最新 Dependency Walker 版本似乎是 2015 年 10 月 29 日的 2.2.10011(链接如下)。
它与一些适用于 Windows 10 的 Windows 开发工具包一起部署,但它包含的版本不再可从 Microsoft Pages 获得,并且所有较新的版本都不再包含它,原因不明。
也许是因为最新版本也存在Dynamic-Link Library Redirection 或其他性能问题的一些问题。 (在 windows 10 下使用依赖walker 似乎比以前的 windows 版本更慢更麻烦 - 但仍然是这项工作的好工具)
以下版本可用:
2.2.10011 (2015-10-29) 此开发博客提供非官方版本 - 下载风险自负 https://zzz.buzz/2017/05/18/download-dependency-walker/ 2.2.9600 (2013-08-22) 可通过 WDK 8.1 获得 https://www.microsoft.com/en-us/download/details.aspx?id=42273 安装后出现在 C:\Program Files (x86)\Windows Kits\10\Tools\[Arch]\depends.exe 中 2.2.6000 (2006-10-28) 可从官方作者网站获得 http://www.dependencywalker.com/潜在替代品:
对于简单的任务,Github 项目lucasg/Dependencies 可能值得一试。但它目前不支持像 depends.exe
那样对正在运行的应用程序进行分析以调试损坏的运行时依赖项。
【讨论】:
【参考方案3】:我遇到了同样的问题,我发现它已在最新版本的 Dependency Walker 中得到修复。我比较了 2.2.6000 和 2.2.8288,前者存在问题,后者不存在。但是,您可能必须等待 Windows 8 WDK 向公众发布才能获得最新版本。
【讨论】:
有人能在任何地方找到这个更新版本的 Dependency Walker 吗?它似乎不在当前的 WDK 或 SDK 中。 在我再次忘记并不得不经历繁琐的过程之前,我经历了 2 次才找到它!先去msdn.microsoft.com/en-us/windows/hardware/dn913721.aspx 首先从第 2 阶段运行 Wdk 设置,然后选择下载选项而不是安装 然后运行 DownloadLocation\Windows Kits\10\WDK\Installers>"Windows Driver Kit-x86_en-us.msi" 2.2.10011 对我来说仍然挂起。试图分析一些 qt5 应用程序。最新加载的库是WINSPOOL.DRV
【参考方案4】:
我不得不改用 GitHub 项目:Dependencies。
从 Windows 10 1809 (10.0.17763) 开始,我什至无法运行 10.0.10586.0 WDK 中包含的 depends.exe 版本 2.2.10011。
【讨论】:
以上是关于使用 Dependency Walker 分析 x86 可执行文件在 Windows 7 x64 上挂起的主要内容,如果未能解决你的问题,请参考以下文章
使用Dependency Walker和Process Explorer搞定第三方软件release版本发布问题
使用Dependency Walker查看dll/so库的依赖关系