最近在做一个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. PC-飞起来!我的Windows XP——五步快速优化Windows XP

    虽然Microsoft的 Vista已经发售了快一年,但国内大部分系统用户仍使用着目前堪称完美的Windows XP.与以往的Windows操作系统一样,新安装的Windows XP可能还不在最佳状态 ...

  2. A Tour of Go Struct Literals

    A struct literal denotes a newly allocated struct value by listing the values of its fields. You can ...

  3. mongodb的优化

    1:使用索引 ,同时对索引排序,[比如mongodb对时间做索引都用-1降序哈,这样查询最新的速度很快],注意组合索引中字段的顺序要和查询时字段的顺序一致哈, 用find().explain()检查查 ...

  4. 包含块、层叠上下文、BFC

    包含块 什么是包含块?简单来说,就是决定一个元素大小和定位的元素.一个元素会为它的内部元素创建包含块,但也不能说元素的包含块就是它的父元素: 1.position:fixed 的元素 包含块是当前可视 ...

  5. Unity手游之路<六>游戏摇杆之Easy Touch 3教程

    之前已经介绍过Unity自带的摇杆Joystick,它用起来很简单.但是它也存在很多局限,不能全部满足普通mmo手游的一些需求,例如:要能方便地更好素材:能指定在某个区域显示,或者只有在该区域触摸时才 ...

  6. excel重复数据

    =COUNTIF(H:H,H1)>1

  7. Linux Bash终端快捷键小结

    Ctrl + A  定位至行首 Ctrl + E  定位至行尾 Ctrl + U  向前删除至行首 Ctrl + K  向后删除至行尾 Ctrl + L  清屏

  8. PHP + ajax 实现异步登录验证

    login.html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...

  9. windows下使用redis,Redis入门使用,Redis基础命令

    windows下使用redis,Redis入门使用,Redis基础命令 >>>>>>>>>>>>>>>> ...

  10. JQuery AJAX请求aspx后台方法

    利用JQuery封装好的AJAX来请求aspx的后台方法,还是比较方便的,但是要注意以下几点: 1.首先要在方法的顶部加上[WenMethod]的特性(此特性要引入using System.Web.S ...