无法定位程序输入点于msvcrtdll相关问题解决方法_第1页
无法定位程序输入点于msvcrtdll相关问题解决方法_第2页
无法定位程序输入点于msvcrtdll相关问题解决方法_第3页
无法定位程序输入点于msvcrtdll相关问题解决方法_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、无法定位程序输入点于msvcrt.dll 相关问题解决方法我发现这个问题是在每次打开八戒桌面小工具时会提示“Deskwidget:DeskWidget.exe -无法找到入口 无法定位程序输入点_except_handler4_common 于动态链接库msvcrt.dll上”,遂上网查了资料。发现这是个系统性的问题。以前八戒软件能正常使用,不知道这段时间是卸载了什么软件还是装了什么东西,导致八戒不能用了。网上的方法如下,可以解决每次弹出“无法定位 ”对话框的问题:这是由于 sp3 加载的驱动造成的;只需要将C:WINDOWSsystem32dwmapi.dll重新命名一下即可以解决;在 sy

2、stem32中找到 dwmapi.dll ,他的标签居然表明来自Vista RTM ,试着把 “dwmapi.dll 重”命名一下(注:改成任意文件名,如dwmap.dll )。问题解决。-不过,我从没有修改飞信安装文件夹下的dwmapi.dll却能正常使用飞信,没有出现网上所说的每次弹出 “无法定位 ”对话框的问题, 真的很奇怪。 究竟是什么原因导致这个问题的呢?为什么 windowssystem32 下的 dwmapi.dll动态链接库可以随便修改,这不会导致系统问题吗?也许下面的文章能解答一些疑问:原文地址 浅谈 Windows 环境软件故障调试与分析大家好,我是 Eric,今天,我将与

3、大家一起分享一个软件故障的调试与分析案例,希望给大家提供一个解决Windows 下软件错误的基本分析思路和供参考的一类解决方法。看完本例,您将会初步了解到Dll Entry Point错误的一些基本知识, 也将接触到像 Winbdg 、DependencyWalker 一类的专业调试、分析工具软件的基本使用,在这里我也和大家一起分享并探讨。本例中出现错误的软件是中国移动飞信2008 版客户端,具体现象是每次双击图标启动该程序时总会收到一个错误信息对话框标题为 “FetionFX.exe - Entry Point Not Found”,内容为 “The procedure entry poin

4、t _except_handler4_common could not be located in thedynamic link library msvcrt.dll.。如下图所示:”以前在台式机中文版MicrosoftWindows XP Professional with Service Pace 2个客户端时并没有出现该问题,但是今年9 月份我将笔记本计算机的操作系统安装为上使用这Microsoft Windows XP Professional with Service Pace 3的英文版,然后于10 月初安装飞信客户端之后就一直存有这个问题,直到今天我才有一块集中的空余时间来分析

5、解决。之前我搜索过百度,但是答案均是“系统缺少 msvcrt.dll ,下载 一个就好了 ”或者是 “msvcrt.dll 版本不正确, 下载一个替换即可”,为了图简便,我也试过,但是根本不奏效。可是我发现没有解决也可以正常使用飞信,只是每次要弹出这个错误消息,所以也没急着管。哈哈 幸好今天解决掉了, 心得是解决软件故障不能浮于表面,欲发掘内在问题和根本原因,还得自己架设环境手动分析,因为软件太多了,错误的种类也太多了,一切还是得具体情况具体分析阿 下面我们一起来看看整个过程吧:(全部的分析调试过程不止下面的这些,但是经过解决这个问题,以下整理出来的思路应该是最简短并且能够找到问题原因的)首先

6、, 我们让该问题重现,即双击飞信客户端的桌面图标,让其弹出该错误对话框。错误提示出现了,我们先不急着点击 “OK(确定 ) ”按钮,而是启动一个调试程序。 (本例中使用著名的 Microsoft Windbg 工具进行调试分析)然后在 “File(文件 ) ”菜单中选择 “Attach to aProcess.( 附加到一个进程) ”,选择当前的飞信客户端的进程“ FetionFX.exe。这里”之所以要选择 Attach to a Process 就是因为我们要将调试器跟踪到当前这个产生错误的进程, 然后从内存中实时察看相关的线程堆栈甚至 API 函数的调用。 Windbg 中还支持其他的几

7、种类型的调试,须根据具体情形按需选择。附加到该进程之后的结果如下图所示:然后,我们可以在图中清晰地看到,当系统加载到“ c:Program FilesChinadwmapi.dll时挂”起,就是图中的"Warning: Break-in time out, suspending.",在 Windows 中的表现也就是弹出了上述的错误对话框,并且我们还没有点击“确定 ”按钮,于是程序暂时挂起。因此,我们可以判断,FeionFX.exe 启动时加载的位于“c:Program”目录下的dwmapi.dll在执行某个函数过程的时候遇到了错误。那么究竟是什么样的函数呢?根据错误对话框

8、的信息,我们可以初步猜测是MSVCRT.dll 中的_except_handler4_common。于是,我们需要查找一下当前进程中有关该过程的现状,所以执行 "x msvcrt!_except_handler*"命令,返回的结果也在上图中的底部。在 Windbg 中,x 是查找符号的命令,可以用来查找全局变量的地址或过程的地址。比如x kernel32!*显示Kernel32.dll中的所有可见变量,数据结构和过程。* 号是通配符, 代替任意的字符串,为了查找全部的,我们需要使用该通配符。(其实如果你执行“xmsv crt!_except_handler4_common你

9、会发”现没有任何结果,也就是找不到, 其实这也就是出现该错误的原因,我们后文分析。因此退一步不输入"4_common" ,查找所有_except_handler过程)结果告诉我们,进程中msvcrt.dll存有的过程有 _except_handler2以及_except_handler3,而恰恰没有 _except_handler4。鉴于以上返回结果,我们可以初步断定,错误的起因是因为程序不能执行MSVCRT.DLL 中的 _except_handler4_common过程,而且原因是当前缺少这个。此时,我们需要借助Microsoft Dependency Walker进行

10、辅助分析并且确认。我们启动Microsoft Dependency Walker,打开该 dwmapi.dll ,可以发现,该DLL 文件的运行将会首先调用MSVCRT.DLL,而且下图中也标示出来了,在当前调用的MSVCRT.DLL中,缺少一个函数"_except_handler4_common",这起好与我们看到的错误现象相以及Windbg 分析的结果吻合。如下图所示:此时,我们可以进一步断定,要么是DLL 版本不对,要么就是dwmapi.dll有问题。而这个程序调用的是XP 系统的 %systemroot%system32下面的 MSVCRT.DLL,从移动飞信官方得

11、知,该程序就是针对XP/Vista 开发的,且朋友中文版XP SP3 中运行得很正常,于是我确认了一下本机该文件的版本,结果是“-2111) ”,看来没有什么问题,是版本。于是我们得查一查另外一个文件了dwmapi.dll ,为什么它要载入 MSVCRT.Dll 并且调用其中并不存在的一个过程呢?接下来,我们查看位于飞信文件夹下的dwmapi.dll 。察看版本信息, 得到 “(vista_rtm.061101-2205) ,”问题就在这里!看到了吗?这个位于飞信安装目录下的文件怎么会来自 Vista 正式发布版?怎么会用到XP 的程序执行之中?要知道,这个文件之所以能够使用全部功能是因为在V

12、ista 环境之下, 很多新的DLL 文件中带有新的函数,正好可以被它调用。那么我们猜想,是不是Vista 版本下的MSVCRT.DLL 就存在一个新版本即第 4 版的 _exception_handler4呢?我们从Microsoft Windows Vista RTM中提取出位于%systemroot%system32下面的 MSVCRT.DLL,其版本为 “(longhorn_rtm.080118- 1840) ”,然后再次使用 Dependency Walker 打开,发现其中果然存在该新的函数!即 “_except_handler4_common” 。如下图所示:到这里,问题就已经清

13、楚了。正是由于本机的飞信客户端在启动时调用了用于Vista的DLL 组件 dwmapi.dll ,而该 DLL 又要尝试调用一个Vista 下 msvcrt.dll才有的过程,才出现了该错误提示。 因为我们发现, 该错误提示并不影响之后程序的正常使用,而且我们所使用的环境是 Windows XP 而非 Vista ,所以推断该调用dwmapi.dll 的过程是非必要的,于是将其重命名或是删除到回收站,再次启动飞信客户端,错误提示消失了, 迎来的是程序正常的使用 之后我查阅了大量的 KB 资料以及 Visual Studio的 MSDN 资料,发现 _except_handler是 VC+ 编译

14、器自带的一个内部异常处理。而版本4 的 _except_handler4_common handler又仅存在于 Vista 以及之后的系统之中。而且值得注意的是,很多这样子的错误都是由于系统中存在有来自更高级版本系统的文件造成的,而文件的来源于一般有几种,一般是修改系统时自己放进去的或者别的安装程序带入的,也有情况是盗版改版的操作系统中存有的,再有就是本例中的情形 安装程序可同时用于Windows XP 以及 Windows Vista 。可能是由于 XP 英文版与中文版的环境的不同,飞信客户端的启动选择了加载调用为Vista 准备的dwmapi.dll 从而产生了此错误。注:本例中并没有介绍使用Dependency Walker的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论