将dumpbin从VS中抠出来,并使用dumpbin查看exe和dll库的依赖关系

将dumpbin从VS中抠出来,并使用dumpbin查看exe和dll库的依赖关系将 dumpbin 从 VS 中抠出来 并使用 dumpbin 查看 exe 和 dll 库的依赖关系

目录

1、初步说明

2、在开发的机器上使用dumpbin工具查看dll库的依赖关系

3、将dumpbin.exe从Visual Studio中抠出来

3.1、找到dumpbin.exe文件及其依赖的dll文件

3.2、在cmd中运行dumpbin,提示找不到link.exe文件

3.3、再次运行dumpbin.exe提示找不到mspdb100.dll


       最近,有个开发同时为了验证问题,需要将mediaxxx.dll从依赖该库的目标库中临时移除,在目标库中不再调用mediaxxx.dll库的导出接口,不再引入mediaxxx.dll对应的.lib文件,但启动exe主程序时还是报找不到mediaxxx.dll,代码中明明已经将对mediaxxx.dll库的引用都去掉了,为啥还会依赖mediaxxx.dll库呢?于是找到我帮忙分析一下,看一下到底还有哪个模块还依赖mediaxxx.dll库。

1、初步说明

       这个可以使用Dependency Walker去查看exe主程序与底层的dll库的依赖关系,但该工具只能查看静态依赖的dll库,对于代码中使用LoadLibrary去动态加载的dll库,是查看不到的。我们的exe程序中确实有部分模块是动态加载的。

       其实还有个更好用的工具dumpbin,这个工具是微软Visual Studio(IDE开发环境)自带的工具,位于VS的安装目录中。使用该工具可以查看exe和dll文件的依赖关系,可以查看exe和dll导入接口和导出接口等信息。

2、在开发的机器上使用dumpbin工具查看dll库的依赖关系

        如何使用dumpbin工具呢?以Visual Studio 2010为例,可以到Windows开始菜单中找到Microsoft Visual Studio 2010节点,在该节点下找到如下截图中命令行入口:

将dumpbin从VS中抠出来,并使用dumpbin查看exe和dll库的依赖关系

点击菜单项弹出如下的命令行窗口,会自动切换到d:\Program Files (x86)\Microsoft Visual Studio 10.0\VC路径中,然后可以在该命令行窗口中直接操作dumpbin.exe工具。

       可以输入dumpbin /?命令,查看dumpbin.exe支持的命令行参数:

将dumpbin从VS中抠出来,并使用dumpbin查看exe和dll库的依赖关系

在本问题中我们使用/DEPENDENTS参数,就能查看到目标exe和dll的依赖的库信息。具体可以分别执行如下的命令,将目标路径下的所有dll和exe的依赖关系输出:

dumpbin /DEPENDENTS C:\Users\Administrator\Desktop\Debug\*.dll dumpbin /DEPENDENTS C:\Users\Administrator\Desktop\Debug\*.exe

其中,/DEPENDENTS表示查看依赖关系。输出的结果如下所示:

将dumpbin从VS中抠出来,并使用dumpbin查看exe和dll库的依赖关系

 直接在命令行中查看结果很不方便,我们可以使用“>”重定向符将输出结果重定向到txt文件中,方便查看搜索。命令如下:

dumpbin /DEPENDENTS C:\Users\Administrator\Desktop\Debug\*.dll > E:\0816-dll.txt dumpbin /DEPENDENTS C:\Users\Administrator\Desktop\Debug\*.exe > E:\0816-exe.txt

输出到文件中查看就方便了,可以随意的搜索了。到E盘中打开txt文件,直接搜索mediaxxx.dll,就看到了还有哪个库还依赖mediaxxx.dll了,如下所示:

将dumpbin从VS中抠出来,并使用dumpbin查看exe和dll库的依赖关系

3、将dumpbin.exe从Visual Studio中抠出来

       上诉方法只能在安装Visual Studio的机器上使用,但有时我们可能需要在没安装VS的机器上使用,所以决定将dumpbin工具从VS中抠出来,方便大家使用。

3.1、找到dumpbin.exe文件及其依赖的dll文件

        启动Everything搜索工具,输入dumpbin.exe,看到如下的多个搜索结果:

将dumpbin从VS中抠出来,并使用dumpbin查看exe和dll库的依赖关系

Everything搜索工具是Windows平台上的文件搜索工具,可以搜索所有磁盘上的文件,比Windows系统自带的文件搜索要快很多,推荐大家使用。

其中D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin目录,就是VS的安装目录,将这个文件拷贝出来。

       然后使用Dependency walker打开dumpbin.exe,看看该exe还依赖哪些库,如下所示:

将dumpbin从VS中抠出来,并使用dumpbin查看exe和dll库的依赖关系

只依赖Kernel32.dll和msvcr100.dll,Kernel32.dll是系统库,是系统自带的,我们不需要带上该库。msvcr100.dll是C运行时库,是安装VS时会拷贝到系统中的,需要带上的。使用Everything搜索一下msvcr100.dll,拷贝过来就可以了。

3.2、在cmd中运行dumpbin,提示找不到link.exe文件

       我是将dumpbin工具的文件放置在C:\Users\Administrator\Desktop\dumpbin-2010目录中,打开cmd窗口,切换到该目录中,然后输入dumpbin /?命令,看看当前拷贝出来的dumpbin.exe能否正常运行。结果运行有问题,如下所示:

将dumpbin从VS中抠出来,并使用dumpbin查看exe和dll库的依赖关系

提示找不到link.exe。于是到dumpbin.exe所在路径D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin中,找到link.exe文件:

将dumpbin从VS中抠出来,并使用dumpbin查看exe和dll库的依赖关系

拷贝过来。

3.3、再次运行dumpbin.exe提示找不到mspdb100.dll

       将link.exe文件拷贝过来后,再次在cmd窗口中运行dumpbin /?命令,结果还是有问题,如下所示:

将dumpbin从VS中抠出来,并使用dumpbin查看exe和dll库的依赖关系

提示找不到mspdb100.dll库。于是又用Everything搜索了一下mspdb100.dll:

将dumpbin从VS中抠出来,并使用dumpbin查看exe和dll库的依赖关系

 将mspdb100.dll拷贝过来。然后再次运行就正常,于是输入dumpbin /?命令,就能将dumpbin.exe命令行支持的参数打印出来,如下所示:

将dumpbin从VS中抠出来,并使用dumpbin查看exe和dll库的依赖关系

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221858.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午5:07
下一篇 2026年3月17日 下午5:08


相关推荐

  • 如何破解运动世界校园模拟器检测

    本文已过时最新版不可用最早用安卓上的PacketCapture抓到http包只要删除对应模拟器文件就可以后来变成了https又对emulatorUrls进行了加密再追加了几个文件就难倒了一批菜鸡软件使用360加固直接逆向难度不小选择曲线救国第一次用Flidder的autoresponder直接把emulatorUrls的值清零返回.

    2022年4月7日
    147
  • arduino小车速度调节_智能小车pwm调速程序及原理图

    arduino小车速度调节_智能小车pwm调速程序及原理图Arduino小车——调速篇  在这一篇我们将对小车的行进速度进行调整,将驱动模块的作用发挥出来。首先大家要了解PWM这个概念。PWM  脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各

    2022年10月7日
    5
  • jquery unbind_java主函数

    jquery unbind_java主函数PHPuniqid()函数uniqid()函数基于以微秒计的当前时间,生成一个唯一的ID。PHPPHPuniqid()函数uniqid()函数基于以微秒计的当前时间,生成一个唯一的ID。注释:由于基于系统时间,通过该函数生成的ID不是最佳的。如需生成绝对唯一的ID,请使用md5()函数(请在字符串函数参考中查找)。echouniqid();?>本例产生32个字符的独…

    2025年8月13日
    3
  • gml格式数据转换

    gml格式数据转换gml 格式数据转换在国外很多网络数据给出的都是 gml 格式 Newman 主页的数据 但是 Matlab C 等语言最喜欢的还是 TXT 等常用格式 在这里 我们会告诉你如何把 gml 格式转换为其他格式 在这里我们主要用到软件是 Gephi 可以画超炫的网络图 和 Matlab 1 打开 Gephi 文件 打开 2 选择需要转换的 gml 格式文件 football gml 确定 3 选择数据资料 数据表格

    2026年3月19日
    2
  • socketpair原理_socket负载均衡

    socketpair原理_socket负载均衡描述先看下传统的CS模型,如下:总是一方发起请求,等待另一方回应。当一次传输完成之后,client端发起新的请求之后,server端才作出回应。那如何才能做到双向通信? 一种解决办法就是client端即使client,又是server,server端即使client也是server,如下:但是上述方面比较复杂,这时候就引入要分析的socketpair了。

    2022年10月14日
    5
  • Android笔记之 文件保存、压缩与清空删除

    Android笔记之 文件保存、压缩与清空删除

    2022年2月1日
    59

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号