利用OllyDebug查看程序调用的dll模块
最近在做一个Qt项目,在产品发布的时候一直为找不到程序到底缺少了哪些dll组件而困扰。具体问题是,在我的项目中使用到了QMediaPlayer播放一段音频文件,我使用的开发环境的Win7 32位,而在发布安装包的时候,还是照常去掉Qt相关的环境变量,然后运行可执行程序,提示缺少什么dll,我就向可执行程序的目录下拷贝对应的dll,直到程序可以正常启动运行。就是按照上面的方法,我制作了软件的安装包,但是,当将这个软件安装到XP系统上测试时,发现程序没有声音了,这个问题让我很纠结。
后来,我在网上找到了一条线索,就是通过软件来查看可执行程序调用的dll模块,然后我就可以根据列举的dll模块信息,将缺少的补充上去即可,我选择的比较常用的OllyDebug。OllyDebug是一款功能非常强大的32位汇编及分析调试器,也是当前最为流行的解密利器了。一个全新可视化的动态追踪工具,可以完全替代SoftICE,是当前功能最为强大的调试工具,能够处理其他同类软件所无法处理的问题。可以自定义设置的外观及运行参数,支持多种数据格式,支持代码高亮及多线程高度,可以自动分析函数的运行过程及循环语句等,可以增加2进制代码的可读性,让调试变得更为简单。可能将调试的程序单独保存为文件,可以继续加载使用。
我在这里共享了这个软件的英文版和中文版的工具下载地址:
英文版:http://pan.baidu.com/s/1i3oUsuD
中文版:http://pan.baidu.com/s/1o6qfZmU
由于软件功能太强大,我也就只能在这里针对我遇到的问题,介绍一下我们怎么查找程序调用的dll模块的,这里我使用的是英文版。
首先,解压软件包,运行其中的可执行文件,如下图:
打开程序以后,我们需要打开待观察的可执行文件(*.exe),依次点击菜单“File -> Open”,然后在弹出的文件对话框中找到对应的可执行程序,如下图所示。
打开软件以后,OllyDebug的主界面显示如下:
然后,依次选择菜单中的“View -> Executable modules”,会跳转到下图所示的界面,其中即列举了被观察的可执行程序当前加载的dll模块。
再接着,我们需要全速运行此程序,观察加载的dll模块的变化。单击如下图红色方框中的“运行”按钮。
然后,我们就可以看到程序开始加载dll,并列举出来,最新调用的dll用红色字体标示了出来,如下图所示。
我们就可以通过依次检查列举出来的每一个dll是否已经拷贝到了可执行目录下。说明:调用的系统文件中的dll不用管,我们只关心的是类库中提供的dll有没有拷贝。
结论:在Qt应用中使用到多媒体时,一定要向可执行目录下面添加plugins中的mediaservice目录,我的平台上的路径为C:\Qt\Qt5.1.1\5.1.1\mingw48_32\plugins\mediaservice,否则,程序可能工作不正常,但是并没有提示错误。
利用OllyDebug查看程序调用的dll模块的更多相关文章
- 关于Windows平台下应用程序加载DLL模块的问题.
本文将讨论以下问题: (1)Windows可执行程序会从哪些目录下加载DLL. (2)如何将可执行使用的DLL放置到统一的目录下,而不是与EXE同一目录. (3)可执行程序加载了不该加载的DLL. ( ...
- Delphi7程序调用C#写的DLL解决办法(转)
近来,因工作需要,必须解决Delphi7写的主程序调用C#写的dll的问题.在网上一番搜索,又经过种种试验,最终证明有以下两种方法可行: 编写C#dll的方法都一样,首先在vs2005中创建一个 ...
- Delphi7程序调用C#写的DLL解决办法
近来,因工作需要,必须解决Delphi7写的主程序调用C#写的dll的问题.在网上一番搜索,又经过种种试验,最终证明有以下两种方法可行: 编写C#dll的方法都一样,首先在vs2005中创建一 ...
- c#调用c++ dll(一)
首先来说说c++中的dll 核心的一些知识 比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作.可能存在一些模块的功能较为通用,在构造其它软件系统时 ...
- 加载DLL模块
关于Windows平台下应用程序加载DLL模块的问题. 本文将讨论以下问题: (1)Windows可执行程序会从哪些目录下加载DLL. (2)如何将可执行使用的DLL放置到统一的目录下,而不是与EXE ...
- 2015.5.9 C#编写DLL及C#调用C#DLL
过程比C#调用VC++dll简单. 一.创建DLL 新建工程,类型选择类库,生成的结果就是dll 注意:在项目属性-应用程序中,注意三个地方,程序集名称和默认命名空间可以调整,但要一致,别的程序调用此 ...
- c#利用SWIG调用c++dll学习总结【转】
开发环境: 操作系统:windows 7 IDE:Microsoft Visual Studio Professional 2015 SWIG: 3.0.12 swig的介绍 详细介绍可看官网,一下贴 ...
- Native Application 开发详解(直接在程序中调用 ntdll.dll 中的 Native API,有内存小、速度快、安全、API丰富等8大优点)
文章目录: 1. 引子: 2. Native Application Demo 展示: 3. Native Application 简介: 4. Native Ap ...
- Visual Studio 调试系列8 查找导致程序崩溃的 DLL(使用模块窗口)
系列目录 [已更新最新开发文章,点击查看详细] 如果应用程序在调用系统 DLL 或他人的代码时崩溃,则需要找出在崩溃发生时处于活动状态的 DLL. 如果在自己的程序之外的 DLL 中遇到崩溃, ...
随机推荐
- 问题-"Record not found or changed by another user"
回答1:===============================================================问题:clientdataset“Record not found ...
- nyoj 1022 最少步数【优先队列+广搜】
最少步数 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...
- sql server smo
在SQL Server2005以前的版本中,SQL分布式管理对象(SQL-DMO)为我们提供了非常有效的方法来通过编程的方式管理SQL Server.SQL-DMO支持基于COM的接口,开发人员可以通 ...
- Windows Azure功能更新: SDK 2.1发布,Traffic Manager集成
最近,Windows Azure又进行了更新 Windows Azure SDK 2.0发布没多久,2.1版(for .NET)就在今天发布了.2.1版本在管理功能上进行了重大改进,包括Visual ...
- Wbemtest查询
运行wbemtest,打开后连接命名空间,默认为“root\cimv2”,可以连接到”IIS管理命名空间(此为Windows Server 2008 R2)“ 查看该命名空间下所有可用的类:单击“枚举 ...
- HTTPResponse.read([amt]):只能read一次
业务需要:我要写个tanx模拟器,给DSP发竞价请求. 下面是部分代码: def PostDataToDSP(self,url,postdata): headers = { 'Content-Type ...
- Eclipse使用新手教程
说起java的IDE,朗朗上口的无非是Eclipse了,假若能熟练Eclipse,对于我们编写java程序会起到事半功倍的效果,大大提高我们工作效率.因此本篇博文,笔者仅仅是针对刚刚入门java的新手 ...
- springMVC项目引入jstl标签库若干问题的总结
中午,不知道动到项目的哪个地方了,之前在联系人列表页面用的好好的jstl标签库突然报错了:<%@taglib prefix="c" uri="http://java ...
- Default route and zero route
A default route of a computer that is participating in computer networking is the packet forwarding ...
- 5.CentOS6.6安装git
额,因为公司的项目存放在gitlab上,所以要求员工必须会使用git 这里简单说下git在 linux下的安装,使用的说明,我会单开一篇文章来写 1.首先卸载掉CentOS6.6自带的1.7.1版本的 ...