将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.mfbz.cn/a/306738.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UV胶水能够粘接聚苯乙烯PS吗?需要注意哪些事项?又有哪些优势呢?

聚苯乙烯(Polystyrene,简称PS)是一种常见的合成聚合物,属于热塑性塑料。它是由苯乙烯单体聚合而成的,具有轻质、透明或半透明、电绝缘性好等特点。常见: 包装材料白色泡沫塑料(EPS,用于包装、保…

排序链表[中等]

一、题目 给你链表的头结点head,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4] 示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5] 示例 3&…

Python多线程同步

同步条件(Event) 在Python中,多线程同步可以通过threading模块中的Event对象来实现。Event对象允许一个或多个线程等待某个事件的发生,当事件发生时,等待的线程将被唤醒。 event.isSet():返回event的状态值 event.wait()&#x…

项目-新闻头条-数据管理平台-ajax综合案例

愿许秋风知我意&#xff0c;解我心中意难平。 项目介绍 项目准备 推荐使用&#xff0c; 每个程序员都有自己的管理方式。 验证码登录 HTML结构&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><met…

线性回归(Linear Regression)

什么是机器学习 线性回归是一种用于建立变量之间线性关系的统计模型。在简单线性回归中&#xff0c;我们考虑一个自变量和一个因变量的关系&#xff0c;而在多元线性回归中&#xff0c;我们考虑多个自变量和一个因变量之间的关系。 简单线性回归 简单线性回归模型可以表示为…

vue购物车案例、v-model进阶、与后端交互

一 购物车案例 - 结算 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>购物车结算</title><script src"https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.min.js"></scr…

Real Fire Smoke

资产使用高分辨率的动画Spritesheet,并结合了Shuriken粒子系统。具有3种风格的火焰和爆炸。 效果分为7类。 主要特点: - 3种火 - 预制板共计80块 - 5种爆炸声 - 3个循环的火灾声音 - 7张火焰和烟雾的精灵图 - 8x8 帧的 spritesheet,分辨率在 2048 到 8192 像素之间 效果类别…

Spring cloud聚合父工程project

文章目录 本次微服务版本一. 新建父工程project1.1设置字符集utf-81.2注解生效激活1.3. Java8编译版本 二. 父工程 pom.xml 本次微服务版本 一. 新建父工程project 1.1设置字符集utf-8 1.2注解生效激活 1.3. Java8编译版本 二. 父工程 pom.xml <?xml version"1.0&quo…

【深度学习每日小知识】Logistic Loss 逻辑回归:损失和正则化

逻辑回归的损失函数 线性回归的损失函数是平方损失。逻辑回归的损失函数是对数损失&#xff0c;定义如下&#xff1a; L o g L o s s ∑ ( x , y ) ∈ D − y log ⁡ ( y ′ ) − ( 1 − y ) log ⁡ ( 1 − y ′ ) LogLoss\sum_{(x,y)\in D}-y\log(y)-(1-y)\log(1-y) LogLoss…

漫谈与人类智能相关数学知识的不足之处

客观地说&#xff0c;没有数学就没有当前的大语言模型、多模态大模型&#xff0c;甚至压根就没有人工智能。对人工智能而言&#xff0c;数学就是“天”&#xff01;但是&#xff0c;对于人类智能而言&#xff0c;数学虽然起到了很重要的作用&#xff0c;同样也起到了阻碍作用&a…

Application为啥不能作为Dialog的context?

大家好&#xff0c;相信大家在使用Dialog时&#xff0c;都有一个非常基本的认知&#xff1a;就是Dialog的context只能是Activity&#xff0c;而不能是Application&#xff0c;不然会导致弹窗崩溃&#xff1a; 这个Exception几乎属于是每个Android开发初学者都会碰到的&#xff…

FFmpeg获取音视频流信息

文章目录 前言一、需求二、源码三、运行结果 前言 本文记录用 FFmpeg 获取视频流音频流的信息&#xff08;编码格式、分辨率、帧率、播放时长…&#xff09;&#xff0c;所用的工程基于上个博客编译成功的工程&#xff1a;使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c 一、需求…

扩展边界opencv

扩展图像的边缘&#xff08;如上边增加50像素&#xff09;通常是通过添加额外的像素行来实现的 使用cv2.copyMakeBorder函数 valueborder_color指定了边框的颜色 import cv2 import numpy as np# 读取图像 image cv2.imread(th.jpg)# 设置边框宽度 top_border_width 50 # …

序列模型(4)—— Scaling Laws

本文介绍 LLM 训练过程中重要的 Scaling Laws&#xff0c;这是一个经验规律&#xff0c;指出了固定训练成本&#xff08;总计算量FLOPs&#xff09; C C C 时&#xff0c;如何调配模型规模&#xff08;参数量&#xff09; N N N 和训练 Token 数据量 D D D&#xff0c;才能实现…

【Emgu.CV教程】4.3、无缝融合应用之SeamlessClone()

SeamlessClone()函数才是真正的无缝克隆&#xff0c;它可以将一张小一点的图片&#xff0c;复制到另一张大一点的图片中&#xff0c;并且复制的位置可以用户自己定义&#xff0c;先看一下它的函数介绍&#xff1a; public static void SeamlessClone(IInputArray src, // 输入…

【STM32】| 01——常用外设 | USART

系列文章目录 【STM32】| 01——常用外设 | USART 失败了也挺可爱&#xff0c;成功了就超帅。 文章目录 前言1. 基础理论1.1 并行通信和串行通信1.2 同步通信和异步通信1.3 单工/半双工/全双工1.4 电平信号(RS232/TTL)和差分信号(RS485)1.5 端口(COM) 2. 串口理论2.1 串口物理…

Android - CrashHandler 全局异常捕获器

官网介绍如下&#xff1a;Thread.UncaughtExceptionHandler (Java Platform SE 8 ) 用于线程因未捕获异常而突然终止时调用的处理程序接口。当线程由于未捕获异常而即将终止时&#xff0c;Java虚拟机将使用thread . getuncaughtexceptionhandler()查询该线程的UncaughtExceptio…

cisp难不难?cisp如何备考通过率高?

*CISP 全称为Certified Information Security Professional&#xff0c;是国际上广受欢迎的信息安全专业认证之一。 对于许多信息安全领域的从业者来说&#xff0c;CISP认证是他们职业生涯中的重要一步。那么&#xff0c;CISP难不难呢?如何备考通过率更高呢?接下来&#xf…

electron自定义窗口和右键菜单样式

前言 electron默认沿用系统UI&#xff0c;并没有提供很多接口供使用者定制样式&#xff0c;如果想要完全自定义的样式&#xff0c;目前我能想到的方案只能是通过前端自定义样式&#xff0c;然后通过进程通信来实现系统基础功能&#xff1a;最大/小化、关闭、拖动窗口等。 效果…

关于java的冒泡排序

关于java的冒泡排序 我们前面的文章中了解到了数组的方法类Arrays&#xff0c;我们本篇文章来了解一下最出名的排序算法之一&#xff0c;冒泡排序&#xff01;&#x1f600; 冒泡排序的代码还是非常简单的&#xff0c;两层循环&#xff0c;外层冒泡轮数&#xff0c;里层依次比…
最新文章