最近在做一个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模块的更多相关文章

  1. 关于Windows平台下应用程序加载DLL模块的问题.

    本文将讨论以下问题: (1)Windows可执行程序会从哪些目录下加载DLL. (2)如何将可执行使用的DLL放置到统一的目录下,而不是与EXE同一目录. (3)可执行程序加载了不该加载的DLL. ( ...

  2. Delphi7程序调用C#写的DLL解决办法(转)

    近来,因工作需要,必须解决Delphi7写的主程序调用C#写的dll的问题.在网上一番搜索,又经过种种试验,最终证明有以下两种方法可行:    编写C#dll的方法都一样,首先在vs2005中创建一个 ...

  3. Delphi7程序调用C#写的DLL解决办法

     近来,因工作需要,必须解决Delphi7写的主程序调用C#写的dll的问题.在网上一番搜索,又经过种种试验,最终证明有以下两种方法可行:    编写C#dll的方法都一样,首先在vs2005中创建一 ...

  4. c#调用c++ dll(一)

    首先来说说c++中的dll 核心的一些知识 比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作.可能存在一些模块的功能较为通用,在构造其它软件系统时 ...

  5. 加载DLL模块

    关于Windows平台下应用程序加载DLL模块的问题. 本文将讨论以下问题: (1)Windows可执行程序会从哪些目录下加载DLL. (2)如何将可执行使用的DLL放置到统一的目录下,而不是与EXE ...

  6. 2015.5.9 C#编写DLL及C#调用C#DLL

    过程比C#调用VC++dll简单. 一.创建DLL 新建工程,类型选择类库,生成的结果就是dll 注意:在项目属性-应用程序中,注意三个地方,程序集名称和默认命名空间可以调整,但要一致,别的程序调用此 ...

  7. c#利用SWIG调用c++dll学习总结【转】

    开发环境: 操作系统:windows 7 IDE:Microsoft Visual Studio Professional 2015 SWIG: 3.0.12 swig的介绍 详细介绍可看官网,一下贴 ...

  8. Native Application 开发详解(直接在程序中调用 ntdll.dll 中的 Native API,有内存小、速度快、安全、API丰富等8大优点)

    文章目录:                   1. 引子: 2. Native Application Demo 展示: 3. Native Application 简介: 4. Native Ap ...

  9. Visual Studio 调试系列8 查找导致程序崩溃的 DLL(使用模块窗口)

    系列目录     [已更新最新开发文章,点击查看详细] 如果应用程序在调用系统 DLL 或他人的代码时崩溃,则需要找出在崩溃发生时处于活动状态的 DLL. 如果在自己的程序之外的 DLL 中遇到崩溃, ...

随机推荐

  1. light oj 1153 - Internet Bandwidth【网络流无向图】

    1153 - Internet Bandwidth   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 ...

  2. JS 事件与事件对象小结

    JavaScript与HTML之间的交互是通过事件来实现的.IE9,chrome,Firefox,Opera,Safari均实现了DOM2级规范中定义的标准DOM事件,而IE8和IE8以下版本仍然保留 ...

  3. 关于手机短信验证码存session 获取不到的问题

    问题描述:最近做一个项目,手机端注册,服务端产生一个验证码,通过短信发送到手机,并存放到session中,但手机端发送第二次请求传回验证码,要对两个验证码进行比较判断时,session存放的验证码丢失 ...

  4. 拍照返回的bitmap太小

    private void doPhoto(int requestCode) { if(!Environment.getExternalStorageState().equals(Environment ...

  5. dublin core实例

    <?xml version="1.0"?> <metadata xmlns="http://example.org/myapp/" xmlns ...

  6. Cactus入门

    这是一个WebProject,有关Cactus用法详见本文测试用例 首先是web.xml <?xml version="1.0" encoding="UTF-8&q ...

  7. ARR状态监控脚本

    ##################################################################################### # THIS IS SAMP ...

  8. C# 算速表达式

              public object ComputeExpression(string expression)         {             var result = new  ...

  9. (BUG已修改,最优化)安卓ListView异步加载网络图片与缓存软引用图片,线程池,只加载当前屏之说明

    原文:http://blog.csdn.net/java_jh/article/details/20068915 迟点出更新的.这个还有BUG.因为软引应不给力了.2.3之后 前几天的原文有一个线程管 ...

  10. android93 进程优先级补充

    ###进程优先级(一个应用可以有多个进程,比如有Activity的进程和service的进程,)* 五种前台进程 * 拥有一个正在与用户交互的activity(onResume调用)的进程 * 拥有一 ...