将dumpbin从Visual Studio中抠出来,并使用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


C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/125529931C/C++基础与进阶(专栏文章,持续更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/category_11931267.htmlVC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/124272585C++软件分析工具从入门到精通案例集锦(专栏文章,持续更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/131405795开源组件及数据库技术(专栏文章,持续更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/category_12458859.html网络编程与网络问题分享(专栏文章,持续更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/category_2276111.html       最近,有个开发同时为了验证问题,需要将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节点,在该节点下找到如下截图中命令行入口:

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

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

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

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

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

 直接在命令行中查看结果很不方便,我们可以使用“>”重定向符将输出结果重定向到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了,如下所示:

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

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

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

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

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

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

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

只依赖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能否正常运行。结果运行有问题,如下所示:

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

拷贝过来。

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/336699.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python教程38:使用turtle画动态粒子爱心+文字爱心

Turtle库是Python语言中的一个标准库,它提供了一种有趣的方式来介绍编程和图形绘制的基本概念。Turtle库使用一个虚拟的“海龟”来绘制图形。你可以控制海龟的方向、速度和位置,通过向前移动、向左转或向右转等命令来绘制线条、圆弧多边形等图形。 -----…

LeetCode 36 有效的数独

题目描述 有效的数独 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考…

0-1背包问题-例题

题目摘自《卡码网》46题 题意理解 m种材料——对应m物品 大小问n的行李箱——对应大小为n的背包 所以该问题是一个0-1背包问题,采用动态规划的一般思路来解题。 解题思路: 动规五部曲: (1)定义二维dp数组,明…

2024 Midjourney 基础教程(⼆):了解 Midjourney Bot 和AI绘画使用技巧进阶教学

在上⼀篇⽂章中,我们学到了如何注册 Midjourney ,开通付费订阅,并画出了可能是⾃⼰的第⼀张 AI绘画。怎么样?这种将想象的画⾯,变为现实世界图⽚的感觉。 是否有种造物者的错觉,同时有种开盲盒的惊喜感&…

行为型设计模式——模板方法模式

学习难度:⭐ ,比较常用 模板方法模式 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知&#xff0…

Linux系统——测试端口连通性方法

目录 一、TCP端口连通性测试 1、ssh 2、telnet(可能需要安装) 3、curl 4、tcping(需要安装) 5、nc(需要安装) 6、nmap(需要安装) 二、UDP端口连通性测试 1、nc(…

Mysql判断一个表中的数据是否在另一个表存在

方式一: 判断A表中有多少条数据在B表中【存在】,并且显示这些数据–EXISTS语句 select A.ID, A.NAME from 表A where EXISTS(select * from 表B where A.IDB.ID) 判断A表中有多少条数据在B表中【不存在】,并且显示这些数据–NOT EXISTS语句 select …

商品源数据如何采集,您知道吗?

如今,电子商务已经渗透到了人们生活的方方面面。2020年新冠肺炎突如其来,打乱了人们正常的生产生活秩序,给经济发展带来了极大的影响。抗击疫情过程中,为避免人员接触和聚集,以“无接触配送”为营销卖点的电子商务迅速…

解决录制的 mp4 视频文件在 windows 无法播放的问题

解决录制的 mp4 视频文件在 windows 无法播放的问题 kazam 默认录制保存下来的 mp4 视频文件在 windows 中是无法直接使用的,这是由于视频编码方式的问题。解决办法: 首先安装 ffmeg 编码工具: sudo apt-get install ffmpeg 然后改变视频的…

告诉大家上手实操skywalking的最便捷途径(无需自己构建环境)

大家可能对于skywalking都不陌生,它是一个APM(application performance monitor)产品,适用于分布式系统的应用程序性能监控工具,专为微服务、云原生和基于容器的(Kubernetes)架构而设计。很多同…

Goby高级食用指南

Goby高级食用指南 1.Goby POC2.自定义字典3.Goby插件生态 - 一些好用的插件分享FOFASubDomainsBruteExportCsvAWVSRedis-cliGoby4waf初级篇参考 - Goby基本使用 1.Goby POC Goby的漏洞模块包含官方自定义的一些初始POC: 红队版的POC会实时更新,普通版则不会 Goby的POC编写…

一氧化碳中毒悲剧频发:探究道合顺电化学传感器促进家庭取暖安全

1月6日,陕西省榆林市发生了一起疑似因使用煤炭炉取暖中毒事件。通报称,经公安部门现场调查,并结合医院救治情况,初步判断5人属一氧化碳中毒,其中4人抢救无效死亡,令人痛心。 一般来说,这种在日…